gfs2.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
From: Alexander Aring <aahringo@redhat.com>
To: teigland@redhat.com
Cc: gfs2@lists.linux.dev, aahringo@redhat.com
Subject: [PATCHv3 v6.8-rc6 03/18] dlm: fix off-by-one waiters refcount handling
Date: Mon, 26 Feb 2024 20:48:54 -0500	[thread overview]
Message-ID: <20240227014909.93945-4-aahringo@redhat.com> (raw)
In-Reply-To: <20240227014909.93945-1-aahringo@redhat.com>

There was a wrong conversion to atomic counters in commit 75a7d60134ce
("fs: dlm: handle lkb wait count as atomic_t"), when
atomic_dec_and_test() returns true it will decrement at first and
then return true if it hits zero. This means we will mis a unhold_lkb()
for the last iteration. This patch fixes this issue and if the last
reference is taken we will remove the lkb from the waiters list as this
is how it's supposed to work.

Fixes: 75a7d60134ce ("fs: dlm: handle lkb wait count as atomic_t")
Signed-off-by: Alexander Aring <aahringo@redhat.com>
---
 fs/dlm/lock.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c
index 652c51fbbf76..c30e9f8d017e 100644
--- a/fs/dlm/lock.c
+++ b/fs/dlm/lock.c
@@ -5070,11 +5070,13 @@ int dlm_recover_waiters_post(struct dlm_ls *ls)
 		/* drop all wait_count references we still
 		 * hold a reference for this iteration.
 		 */
-		while (!atomic_dec_and_test(&lkb->lkb_wait_count))
-			unhold_lkb(lkb);
-
 		mutex_lock(&ls->ls_waiters_mutex);
-		list_del_init(&lkb->lkb_wait_reply);
+		while (atomic_read(&lkb->lkb_wait_count)) {
+			if (atomic_dec_and_test(&lkb->lkb_wait_count))
+				list_del_init(&lkb->lkb_wait_reply);
+
+			unhold_lkb(lkb);
+		}
 		mutex_unlock(&ls->ls_waiters_mutex);
 
 		if (oc || ou) {
-- 
2.43.0


  parent reply	other threads:[~2024-02-27  1:49 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-27  1:48 [PATCHv3 v6.8-rc6 00/18] dlm: bring message parsing to softirq context Alexander Aring
2024-02-27  1:48 ` [PATCHv3 v6.8-rc6 01/18] fs: dlm: Simplify the allocation of slab caches in dlm_midcomms_cache_create Alexander Aring
2024-02-27  1:48 ` [PATCHv3 v6.8-rc6 02/18] fs: dlm: Simplify the allocation of slab caches in dlm_lowcomms_msg_cache_create Alexander Aring
2024-02-27  1:48 ` Alexander Aring [this message]
2024-02-27  1:48 ` [PATCHv3 v6.8-rc6 04/18] dlm: put lkbs instead of force free Alexander Aring
2024-02-27  1:48 ` [PATCHv3 v6.8-rc6 05/18] dlm: remove allocation parameter in msg allocation Alexander Aring
2024-02-27  1:48 ` [PATCHv3 v6.8-rc6 06/18] dlm: switch to GFP_ATOMIC in dlm allocations Alexander Aring
2024-02-27  1:48 ` [PATCHv3 v6.8-rc6 07/18] dlm: move root_list functionality to recover.c Alexander Aring
2024-02-27  1:48 ` [PATCHv3 v6.8-rc6 08/18] dlm: move master dir dump to own list Alexander Aring
2024-02-27  1:49 ` [PATCHv3 v6.8-rc6 09/18] dlm: move root_list to ls_recover() stack Alexander Aring
2024-02-27  1:49 ` [PATCHv3 v6.8-rc6 10/18] dlm: implement directory dump context Alexander Aring
2024-02-27  1:49 ` [PATCHv3 v6.8-rc6 11/18] dlm: drop holding waiters mutex in waiters recovery Alexander Aring
2024-02-27  1:49 ` [PATCHv3 v6.8-rc6 12/18] dlm: convert ls_waiters_mutex to spinlock Alexander Aring
2024-02-27  1:49 ` [PATCHv3 v6.8-rc6 13/18] dlm: convert res_lock " Alexander Aring
2024-02-27  1:49 ` [PATCHv3 v6.8-rc6 14/18] dlm: make requestqueue handling non sleepable Alexander Aring
2024-02-27  1:49 ` [PATCHv3 v6.8-rc6 15/18] dlm: ls_recv_active semaphore to rwlock Alexander Aring
2024-02-27  1:49 ` [PATCHv3 v6.8-rc6 16/18] dlm: remove schedule in dlm receive path Alexander Aring
2024-02-27  1:49 ` [PATCHv3 v6.8-rc6 17/18] dlm: convert message parsing locks to disable bh Alexander Aring
2024-02-27  1:49 ` [PATCHv3 v6.8-rc6 18/18] dlm: do dlm message processing in softirq context Alexander Aring

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240227014909.93945-4-aahringo@redhat.com \
    --to=aahringo@redhat.com \
    --cc=gfs2@lists.linux.dev \
    --cc=teigland@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).