[Cluster-devel] [PATCH dlm/next 1/3] fs: dlm: move assert into release function
Alexander Aring
aahringo at redhat.com
Fri Jun 24 01:28:58 UTC 2022
This patch moves the assert if unhold_lkb() hits lkb->lkb_ref zero into
the release function. Instead of kill_lkb() which has an assert if
lkb->lkb_status is non-zero. The assert in kill_lkb() has nothing todo
with unhold a lkb and probably was only used here to call something if
it it's zero. The unhold_lkb() should never release a lkb so we move the
assert to the release functionality.
Signed-off-by: Alexander Aring <aahringo at redhat.com>
---
fs/dlm/lock.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c
index 739f09d0951c..dac7eb75dba9 100644
--- a/fs/dlm/lock.c
+++ b/fs/dlm/lock.c
@@ -1310,6 +1310,13 @@ static inline void hold_lkb(struct dlm_lkb *lkb)
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
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.
@@ -1317,9 +1324,7 @@ static inline void hold_lkb(struct dlm_lkb *lkb)
static inline void unhold_lkb(struct dlm_lkb *lkb)
{
- int rv;
- rv = kref_put(&lkb->lkb_ref, kill_lkb);
- DLM_ASSERT(!rv, dlm_print_lkb(lkb););
+ kref_put(&lkb->lkb_ref, unhold_lkb_assert);
}
static void lkb_add_ordered(struct list_head *new, struct list_head *head,
--
2.31.1
More information about the Cluster-devel
mailing list