* Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, Intel Corporation.
+ * Copyright (c) 2011, 2013, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
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);
ldlm_resource_unlink_lock(lock);
ldlm_grant_lock(lock, work_list);
+
+ *err = ELDLM_OK;
RETURN(LDLM_ITER_CONTINUE);
}
rc = ldlm_run_ast_work(ldlm_res_to_ns(res), &rpc_list,
LDLM_WORK_BL_AST);
lock_res(res);
- if (rc == -ERESTART)
- GOTO(restart, -ERESTART);
+ if (rc == -ERESTART)
+ GOTO(restart, rc);
*flags |= LDLM_FL_BLOCK_GRANTED;
} else {
ldlm_resource_unlink_lock(lock);