aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/dlm/dlmmaster.c
diff options
context:
space:
mode:
authorSunil Mushran <sunil.mushran@oracle.com>2008-03-01 17:04:20 -0500
committerMark Fasheh <mark.fasheh@oracle.com>2008-03-10 18:14:09 -0400
commit2c5c54aca9d0263f81bd4886232835ba31f7635a (patch)
treeb20b13e1a15bfa33c1ebba7a57fabfe23ad9c3eb /fs/ocfs2/dlm/dlmmaster.c
parent4338ab6a750303cbae4cc76cc7de5edba6598ebe (diff)
ocfs2/dlm: Add missing dlm_lock_put()s
Normally locks for remote nodes are freed when that node sends an UNLOCK message to the master. The master node tags an DLM_UNLOCK_FREE_LOCK action to do an extra put on the lock at the end. However, there are times when the master node has to free the locks for the remote nodes forcibly. Two cases when this happens are: 1. When the master has migrated the lockres plus all locks to another node. 2. When the master is clearing all the locks of a dead node. It was in the above two conditions that the dlm was missing the extra put. 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>
Diffstat (limited to 'fs/ocfs2/dlm/dlmmaster.c')
-rw-r--r--fs/ocfs2/dlm/dlmmaster.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
index 6d318b0bd816..320081d53f22 100644
--- a/fs/ocfs2/dlm/dlmmaster.c
+++ b/fs/ocfs2/dlm/dlmmaster.c
@@ -2933,6 +2933,9 @@ static void dlm_remove_nonlocal_locks(struct dlm_ctxt *dlm,
2933 dlm_lockres_clear_refmap_bit(lock->ml.node, res); 2933 dlm_lockres_clear_refmap_bit(lock->ml.node, res);
2934 list_del_init(&lock->list); 2934 list_del_init(&lock->list);
2935 dlm_lock_put(lock); 2935 dlm_lock_put(lock);
2936 /* In a normal unlock, we would have added a
2937 * DLM_UNLOCK_FREE_LOCK action. Force it. */
2938 dlm_lock_put(lock);
2936 } 2939 }
2937 } 2940 }
2938 queue++; 2941 queue++;