[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