From: Alexander Aring <aahringo@redhat.com>
To: teigland@redhat.com
Cc: gfs2@lists.linux.dev, stable@vger.kernel.org,
vvidic@valentin-vidic.from.hr, joseph.qi@linux.alibaba.com,
ocfs2-devel@oss.oracle.com, heming.zhao@suse.com,
aahringo@redhat.com
Subject: [PATCH 2/2] dlm: fix off-by-one waiters refcount handling
Date: Tue, 12 Mar 2024 13:05:08 -0400 [thread overview]
Message-ID: <20240312170508.3590306-2-aahringo@redhat.com> (raw)
In-Reply-To: <20240312170508.3590306-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.
Cc: stable@vger.kernel.org
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
next prev parent reply other threads:[~2024-03-12 17:05 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-12 17:05 [PATCH 1/2] dlm: fix user space lkb refcounting Alexander Aring
2024-03-12 17:05 ` Alexander Aring [this message]
2024-03-12 20:25 ` [PATCH 2/2] dlm: fix off-by-one waiters refcount handling Valentin Vidić
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=20240312170508.3590306-2-aahringo@redhat.com \
--to=aahringo@redhat.com \
--cc=gfs2@lists.linux.dev \
--cc=heming.zhao@suse.com \
--cc=joseph.qi@linux.alibaba.com \
--cc=ocfs2-devel@oss.oracle.com \
--cc=stable@vger.kernel.org \
--cc=teigland@redhat.com \
--cc=vvidic@valentin-vidic.from.hr \
/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