diff --git a/lustre/ldlm/ldlm_lock.c b/lustre/ldlm/ldlm_lock.c
index a6d5b55f0e26909f77ca93b7da900112ebb6fcea..606a8fe65c3833f6b6d495dfb8c0b9fc720ea3b4 100644
--- a/lustre/ldlm/ldlm_lock.c
+++ b/lustre/ldlm/ldlm_lock.c
@@ -380,10 +380,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 cc7fc39be9fa5d52a57f23daa82b52865bd2cb9d..36a1c80c72404ed94a5a8423979edb3e2b5eeab5 100644
--- a/lustre/ldlm/ldlm_lockd.c
+++ b/lustre/ldlm/ldlm_lockd.c
@@ -1378,8 +1378,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) != 0) {
+                        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 5d0c2897e63b98a09287f9c79dfda96b8f28ad76..b0f9cedb06c1c01c489faf5c51a05cecaf87cc85 100644
--- a/lustre/ldlm/ldlm_request.c
+++ b/lustre/ldlm/ldlm_request.c
@@ -412,12 +412,10 @@ int ldlm_cli_enqueue_fini(struct obd_export *exp, struct ptlrpc_request *req,
                               (long)lock->l_resource->lr_name.name[1],
                               (long)lock->l_resource->lr_name.name[2]);
 
-                        ldlm_lock_change_resource(ns, lock,
-                                          &reply->lock_desc.l_resource.lr_name);
-                        if (lock->l_resource == NULL) {
-                                LBUG();
+                        rc = ldlm_lock_change_resource(ns, lock,
+                                        &reply->lock_desc.l_resource.lr_name);
+                        if (rc || lock->l_resource == NULL)
                                 GOTO(cleanup, rc = -ENOMEM);
-                        }
                         LDLM_DEBUG(lock, "client-side enqueue, new resource");
                 }
                 if (with_policy)