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:
Alexander Aring 2022-06-23 21:28:58 -04:00 committed by David Teigland
parent 6b0afc0cc3
commit 9585898922
1 changed files with 8 additions and 3 deletions

View File

@ -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,