[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>
This commit is contained in:
parent
15d00c0b91
commit
a345da3e8f
|
@ -171,6 +171,28 @@ void dlm_print_rsb(struct dlm_rsb *r)
|
||||||
r->res_recover_locks_count, r->res_name);
|
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 */
|
/* Threads cannot use the lockspace while it's being recovered */
|
||||||
|
|
||||||
static inline void lock_recovery(struct dlm_ls *ls)
|
static inline void lock_recovery(struct dlm_ls *ls)
|
||||||
|
@ -478,7 +500,7 @@ static void unhold_rsb(struct dlm_rsb *r)
|
||||||
{
|
{
|
||||||
int rv;
|
int rv;
|
||||||
rv = kref_put(&r->res_ref, toss_rsb);
|
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)
|
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
|
/* All work is done after the return from kref_put() so we
|
||||||
can release the write_lock before the remove and free. */
|
can release the write_lock before the remove and free. */
|
||||||
|
|
||||||
DLM_ASSERT(list_empty(&r->res_lookup),);
|
DLM_ASSERT(list_empty(&r->res_lookup), dlm_dump_rsb(r););
|
||||||
DLM_ASSERT(list_empty(&r->res_grantqueue),);
|
DLM_ASSERT(list_empty(&r->res_grantqueue), dlm_dump_rsb(r););
|
||||||
DLM_ASSERT(list_empty(&r->res_convertqueue),);
|
DLM_ASSERT(list_empty(&r->res_convertqueue), dlm_dump_rsb(r););
|
||||||
DLM_ASSERT(list_empty(&r->res_waitqueue),);
|
DLM_ASSERT(list_empty(&r->res_waitqueue), dlm_dump_rsb(r););
|
||||||
DLM_ASSERT(list_empty(&r->res_root_list),);
|
DLM_ASSERT(list_empty(&r->res_root_list), dlm_dump_rsb(r););
|
||||||
DLM_ASSERT(list_empty(&r->res_recover_list),);
|
DLM_ASSERT(list_empty(&r->res_recover_list), dlm_dump_rsb(r););
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Attaching/detaching lkb's from rsb's is for rsb reference counting.
|
/* 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;
|
struct dlm_lkb *lkb, *s;
|
||||||
int high = DLM_LOCK_IV;
|
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_convert(r, high);
|
||||||
high = grant_pending_wait(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;
|
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);
|
dir_nodeid = dlm_dir_nodeid(r);
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#define __LOCK_DOT_H__
|
#define __LOCK_DOT_H__
|
||||||
|
|
||||||
void dlm_print_rsb(struct dlm_rsb *r);
|
void dlm_print_rsb(struct dlm_rsb *r);
|
||||||
|
void dlm_dump_rsb(struct dlm_rsb *r);
|
||||||
void dlm_print_lkb(struct dlm_lkb *lkb);
|
void dlm_print_lkb(struct dlm_lkb *lkb);
|
||||||
int dlm_receive_message(struct dlm_header *hd, int nodeid, int recovery);
|
int dlm_receive_message(struct dlm_header *hd, int nodeid, int recovery);
|
||||||
int dlm_modes_compat(int mode1, int mode2);
|
int dlm_modes_compat(int mode1, int mode2);
|
||||||
|
|
|
@ -490,7 +490,7 @@ static int recover_locks(struct dlm_rsb *r)
|
||||||
if (all_queues_empty(r))
|
if (all_queues_empty(r))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
DLM_ASSERT(!r->res_recover_locks_count, dlm_print_rsb(r););
|
DLM_ASSERT(!r->res_recover_locks_count, dlm_dump_rsb(r););
|
||||||
|
|
||||||
error = recover_locks_queue(r, &r->res_grantqueue);
|
error = recover_locks_queue(r, &r->res_grantqueue);
|
||||||
if (error)
|
if (error)
|
||||||
|
@ -557,7 +557,7 @@ int dlm_recover_locks(struct dlm_ls *ls)
|
||||||
|
|
||||||
void dlm_recovered_lock(struct dlm_rsb *r)
|
void dlm_recovered_lock(struct dlm_rsb *r)
|
||||||
{
|
{
|
||||||
DLM_ASSERT(rsb_flag(r, RSB_NEW_MASTER), dlm_print_rsb(r););
|
DLM_ASSERT(rsb_flag(r, RSB_NEW_MASTER), dlm_dump_rsb(r););
|
||||||
|
|
||||||
r->res_recover_locks_count--;
|
r->res_recover_locks_count--;
|
||||||
if (!r->res_recover_locks_count) {
|
if (!r->res_recover_locks_count) {
|
||||||
|
|
Loading…
Reference in New Issue