diff options
author | 2006-08-18 11:54:25 -0500 | |
---|---|---|
committer | 2006-08-21 09:50:09 -0400 | |
commit | a345da3e8f28ff69e1b14df78f7ddc6e7b78b726 (patch) | |
tree | a1aa40c1aae01064b64b953c9b4a16180dd82be9 /fs/dlm/lock.c | |
parent | [GFS2] Fix leak of gfs2_bufdata (diff) | |
download | linux-a345da3e8f28ff69e1b14df78f7ddc6e7b78b726.tar.gz linux-a345da3e8f28ff69e1b14df78f7ddc6e7b78b726.tar.bz2 linux-a345da3e8f28ff69e1b14df78f7ddc6e7b78b726.zip |
[DLM] dump rsb and locks on assert
Introduce new function dlm_dump_rsb() to call within assertions instead of
dlm_print_rsb(). The new function dumps info about all locks on the rsb
in addition to rsb details.
Signed-off-by: David Teigland <teigland@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/dlm/lock.c')
-rw-r--r-- | fs/dlm/lock.c | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c index bb2e35151210..712438513cc4 100644 --- a/fs/dlm/lock.c +++ b/fs/dlm/lock.c @@ -171,6 +171,28 @@ void dlm_print_rsb(struct dlm_rsb *r) r->res_recover_locks_count, r->res_name); } +void dlm_dump_rsb(struct dlm_rsb *r) +{ + struct dlm_lkb *lkb; + + dlm_print_rsb(r); + + printk(KERN_ERR "rsb: root_list empty %d recover_list empty %d\n", + list_empty(&r->res_root_list), list_empty(&r->res_recover_list)); + printk(KERN_ERR "rsb lookup list\n"); + list_for_each_entry(lkb, &r->res_lookup, lkb_rsb_lookup) + dlm_print_lkb(lkb); + printk(KERN_ERR "rsb grant queue:\n"); + list_for_each_entry(lkb, &r->res_grantqueue, lkb_statequeue) + dlm_print_lkb(lkb); + printk(KERN_ERR "rsb convert queue:\n"); + list_for_each_entry(lkb, &r->res_convertqueue, lkb_statequeue) + dlm_print_lkb(lkb); + printk(KERN_ERR "rsb wait queue:\n"); + list_for_each_entry(lkb, &r->res_waitqueue, lkb_statequeue) + dlm_print_lkb(lkb); +} + /* Threads cannot use the lockspace while it's being recovered */ static inline void lock_recovery(struct dlm_ls *ls) @@ -478,7 +500,7 @@ static void unhold_rsb(struct dlm_rsb *r) { int rv; rv = kref_put(&r->res_ref, toss_rsb); - DLM_ASSERT(!rv, dlm_print_rsb(r);); + DLM_ASSERT(!rv, dlm_dump_rsb(r);); } static void kill_rsb(struct kref *kref) @@ -488,12 +510,12 @@ static void kill_rsb(struct kref *kref) /* All work is done after the return from kref_put() so we can release the write_lock before the remove and free. */ - DLM_ASSERT(list_empty(&r->res_lookup),); - DLM_ASSERT(list_empty(&r->res_grantqueue),); - DLM_ASSERT(list_empty(&r->res_convertqueue),); - DLM_ASSERT(list_empty(&r->res_waitqueue),); - DLM_ASSERT(list_empty(&r->res_root_list),); - DLM_ASSERT(list_empty(&r->res_recover_list),); + DLM_ASSERT(list_empty(&r->res_lookup), dlm_dump_rsb(r);); + DLM_ASSERT(list_empty(&r->res_grantqueue), dlm_dump_rsb(r);); + DLM_ASSERT(list_empty(&r->res_convertqueue), dlm_dump_rsb(r);); + DLM_ASSERT(list_empty(&r->res_waitqueue), dlm_dump_rsb(r);); + DLM_ASSERT(list_empty(&r->res_root_list), dlm_dump_rsb(r);); + DLM_ASSERT(list_empty(&r->res_recover_list), dlm_dump_rsb(r);); } /* Attaching/detaching lkb's from rsb's is for rsb reference counting. @@ -1336,7 +1358,7 @@ static void grant_pending_locks(struct dlm_rsb *r) struct dlm_lkb *lkb, *s; int high = DLM_LOCK_IV; - DLM_ASSERT(is_master(r), dlm_print_rsb(r);); + DLM_ASSERT(is_master(r), dlm_dump_rsb(r);); high = grant_pending_convert(r, high); high = grant_pending_wait(r, high); @@ -1431,7 +1453,7 @@ static int set_master(struct dlm_rsb *r, struct dlm_lkb *lkb) return 0; } - DLM_ASSERT(r->res_nodeid == -1, dlm_print_rsb(r);); + DLM_ASSERT(r->res_nodeid == -1, dlm_dump_rsb(r);); dir_nodeid = dlm_dir_nodeid(r); |