ocfs2/dlm: Add missing dlm_lockres_put()s
authorSunil Mushran <sunil.mushran@oracle.com>
Sat, 1 Mar 2008 22:04:22 +0000 (14:04 -0800)
committerMark Fasheh <mark.fasheh@oracle.com>
Mon, 10 Mar 2008 22:14:12 +0000 (15:14 -0700)
dlm_master_request_handler() forgot to put a lockres when
dlm_assert_master_worker() failed or was skipped.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
fs/ocfs2/dlm/dlmmaster.c

index 320081d53f223503a1747b60d58b005a01dbf28a..ea6b8957786062ad91ab213155fc44ea078724b1 100644 (file)
@@ -1663,7 +1663,12 @@ way_up_top:
                dlm_put_mle(tmpmle);
        }
 send_response:
-
+       /*
+        * __dlm_lookup_lockres() grabbed a reference to this lockres.
+        * The reference is released by dlm_assert_master_worker() under
+        * the call to dlm_dispatch_assert_master().  If
+        * dlm_assert_master_worker() isn't called, we drop it here.
+        */
        if (dispatch_assert) {
                if (response != DLM_MASTER_RESP_YES)
                        mlog(ML_ERROR, "invalid response %d\n", response);
@@ -1678,7 +1683,11 @@ send_response:
                if (ret < 0) {
                        mlog(ML_ERROR, "failed to dispatch assert master work\n");
                        response = DLM_MASTER_RESP_ERROR;
+                       dlm_lockres_put(res);
                }
+       } else {
+               if (res)
+                       dlm_lockres_put(res);
        }
 
        dlm_put(dlm);