From e9fcab3910977251bd1463dba10365127ca22f8a Mon Sep 17 00:00:00 2001 From: bwzhou <bwzhou> Date: Fri, 9 May 2008 16:44:07 +0000 Subject: [PATCH] Branch b1_6 b=14034 r=johann, bobijam error handling for ENOMEM case when allocating a ldlm resource --- lustre/ldlm/ldlm_lock.c | 4 +--- lustre/ldlm/ldlm_lockd.c | 9 +++++++-- lustre/ldlm/ldlm_request.c | 6 ++---- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/lustre/ldlm/ldlm_lock.c b/lustre/ldlm/ldlm_lock.c index b63aaba665..94be0f770c 100644 --- a/lustre/ldlm/ldlm_lock.c +++ b/lustre/ldlm/ldlm_lock.c @@ -383,10 +383,8 @@ int ldlm_lock_change_resource(struct ldlm_namespace *ns, struct ldlm_lock *lock, unlock_res_and_lock(lock); newres = ldlm_resource_get(ns, NULL, new_resid, type, 1); - if (newres == NULL) { - LBUG(); + if (newres == NULL) RETURN(-ENOMEM); - } lock_res_and_lock(lock); LASSERT(memcmp(&new_resid, &lock->l_resource->lr_name, diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c index 80ec0488f0..4a732702f2 100644 --- a/lustre/ldlm/ldlm_lockd.c +++ b/lustre/ldlm/ldlm_lockd.c @@ -1353,8 +1353,13 @@ static void ldlm_handle_cp_callback(struct ptlrpc_request *req, &lock->l_resource->lr_name, sizeof(lock->l_resource->lr_name)) != 0) { unlock_res_and_lock(lock); - ldlm_lock_change_resource(ns, lock, - dlm_req->lock_desc.l_resource.lr_name); + if (ldlm_lock_change_resource(ns, lock, + dlm_req->lock_desc.l_resource.lr_name)) { + LDLM_ERROR(lock, "Failed to allocate resource"); + LDLM_LOCK_PUT(lock); + EXIT; + return; + } LDLM_DEBUG(lock, "completion AST, new resource"); CERROR("change resource!\n"); lock_res_and_lock(lock); diff --git a/lustre/ldlm/ldlm_request.c b/lustre/ldlm/ldlm_request.c index aa3d1ae7b2..0dcd78159a 100644 --- a/lustre/ldlm/ldlm_request.c +++ b/lustre/ldlm/ldlm_request.c @@ -440,12 +440,10 @@ int ldlm_cli_enqueue_fini(struct obd_export *exp, struct ptlrpc_request *req, (long)reply->lock_desc.l_resource.lr_name.name[0], (long)lock->l_resource->lr_name.name[0]); - ldlm_lock_change_resource(ns, lock, + rc = ldlm_lock_change_resource(ns, lock, reply->lock_desc.l_resource.lr_name); - if (lock->l_resource == NULL) { - LBUG(); + if (rc || lock->l_resource == NULL) GOTO(cleanup, rc = -ENOMEM); - } LDLM_DEBUG(lock, "client-side enqueue, new resource"); } if (with_policy) -- GitLab