fs: dlm: move kref_put assert for lkb structs
The unhold_lkb() function decrements the lock's kref, and asserts that the ref count was not the final one. Use the kref_put release function (which should not be called) to call the assert, rather than doing the assert based on the kref_put return value. Using kill_lkb() as the release function doesn't make sense if we only want to assert. Signed-off-by: Alexander Aring <aahringo@redhat.com> Signed-off-by: David Teigland <teigland@redhat.com>
This commit is contained in:
parent
6b0afc0cc3
commit
9585898922
|
@ -1310,6 +1310,13 @@ static inline void hold_lkb(struct dlm_lkb *lkb)
|
||||||
kref_get(&lkb->lkb_ref);
|
kref_get(&lkb->lkb_ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void unhold_lkb_assert(struct kref *kref)
|
||||||
|
{
|
||||||
|
struct dlm_lkb *lkb = container_of(kref, struct dlm_lkb, lkb_ref);
|
||||||
|
|
||||||
|
DLM_ASSERT(false, dlm_print_lkb(lkb););
|
||||||
|
}
|
||||||
|
|
||||||
/* This is called when we need to remove a reference and are certain
|
/* This is called when we need to remove a reference and are certain
|
||||||
it's not the last ref. e.g. del_lkb is always called between a
|
it's not the last ref. e.g. del_lkb is always called between a
|
||||||
find_lkb/put_lkb and is always the inverse of a previous add_lkb.
|
find_lkb/put_lkb and is always the inverse of a previous add_lkb.
|
||||||
|
@ -1317,9 +1324,7 @@ static inline void hold_lkb(struct dlm_lkb *lkb)
|
||||||
|
|
||||||
static inline void unhold_lkb(struct dlm_lkb *lkb)
|
static inline void unhold_lkb(struct dlm_lkb *lkb)
|
||||||
{
|
{
|
||||||
int rv;
|
kref_put(&lkb->lkb_ref, unhold_lkb_assert);
|
||||||
rv = kref_put(&lkb->lkb_ref, kill_lkb);
|
|
||||||
DLM_ASSERT(!rv, dlm_print_lkb(lkb););
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void lkb_add_ordered(struct list_head *new, struct list_head *head,
|
static void lkb_add_ordered(struct list_head *new, struct list_head *head,
|
||||||
|
|
Loading…
Reference in New Issue