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