X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fldlm%2Fldlm_inodebits.c;h=b68dd59db7634e7fc17160c9fd7e6d23ea345382;hb=30ef0334bcda45c822a41ff50f2d0aa97b95a69a;hp=c698cfdffccbb9931a4a84397a8658da4f23b01a;hpb=d658d73b5231ba24d2e31315102c6e17dd247364;p=fs%2Flustre-release.git diff --git a/lustre/ldlm/ldlm_inodebits.c b/lustre/ldlm/ldlm_inodebits.c index c698cfd..b68dd59 100644 --- a/lustre/ldlm/ldlm_inodebits.c +++ b/lustre/ldlm/ldlm_inodebits.c @@ -27,7 +27,7 @@ * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, Whamcloud, Inc. + * Copyright (c) 2011, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -190,8 +190,12 @@ int ldlm_process_inodebits_lock(struct ldlm_lock *lock, __u64 *flags, LASSERT(cfs_list_empty(&res->lr_converting)); check_res_locked(res); - if (!first_enq) { - LASSERT(work_list != NULL); + /* (*flags & LDLM_FL_BLOCK_NOWAIT) is for layout lock right now. */ + if (!first_enq || (*flags & LDLM_FL_BLOCK_NOWAIT)) { + *err = ELDLM_LOCK_ABORTED; + if (*flags & LDLM_FL_BLOCK_NOWAIT) + *err = ELDLM_LOCK_WOULDBLOCK; + rc = ldlm_inodebits_compat_queue(&res->lr_granted, lock, NULL); if (!rc) RETURN(LDLM_ITER_STOP); @@ -201,6 +205,8 @@ int ldlm_process_inodebits_lock(struct ldlm_lock *lock, __u64 *flags, ldlm_resource_unlink_lock(lock); ldlm_grant_lock(lock, work_list); + + *err = ELDLM_OK; RETURN(LDLM_ITER_CONTINUE); }