aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dlm/lock.h
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2006-05-02 13:34:03 -0400
committerSteven Whitehouse <swhiteho@redhat.com>2006-05-02 13:34:03 -0400
commit97a35d1e5fab9ff8de27814082b78b2fc9ad94f0 (patch)
tree551025da17641ccc4df7378da2bb94cedfb2482e /fs/dlm/lock.h
parentd2d7b8a2a756fb520792ca3db3abdeed9214ae5b (diff)
[DLM] fix grant_after_purge softlockup
In dlm_grant_after_purge() we were holding a hash table read_lock while calling put_rsb() which potentially removes the rsb from the hash table, taking the same lock in write. Fix this by flagging rsb's ahead of time that have been purged. Then iteratively read_lock the hash table, find a flagged rsb, unlock, process rsb. Signed-off-by: David Teigland <teigland@redhat.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/dlm/lock.h')
-rw-r--r--fs/dlm/lock.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/dlm/lock.h b/fs/dlm/lock.h
index bffab9c88b1d..56cdc073b1f6 100644
--- a/fs/dlm/lock.h
+++ b/fs/dlm/lock.h
@@ -25,7 +25,7 @@ void dlm_scan_rsbs(struct dlm_ls *ls);
25 25
26int dlm_purge_locks(struct dlm_ls *ls); 26int dlm_purge_locks(struct dlm_ls *ls);
27void dlm_purge_mstcpy_locks(struct dlm_rsb *r); 27void dlm_purge_mstcpy_locks(struct dlm_rsb *r);
28int dlm_grant_after_purge(struct dlm_ls *ls); 28void dlm_grant_after_purge(struct dlm_ls *ls);
29int dlm_recover_waiters_post(struct dlm_ls *ls); 29int dlm_recover_waiters_post(struct dlm_ls *ls);
30void dlm_recover_waiters_pre(struct dlm_ls *ls); 30void dlm_recover_waiters_pre(struct dlm_ls *ls);
31int dlm_recover_master_copy(struct dlm_ls *ls, struct dlm_rcom *rc); 31int dlm_recover_master_copy(struct dlm_ls *ls, struct dlm_rcom *rc);