From: Herbert Xu <herbert@gondor.apana.org.au>
To: Michael Kelley <mhklinux@outlook.com>
Cc: Breno Leitao <leitao@debian.org>,
"saeedm@nvidia.com" <saeedm@nvidia.com>,
"tariqt@nvidia.com" <tariqt@nvidia.com>,
"linux-hyperv@vger.kernel.org" <linux-hyperv@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Thomas Graf <tgraf@suug.ch>, Tejun Heo <tj@kernel.org>,
Hao Luo <haoluo@google.com>, Josh Don <joshdon@google.com>,
Barret Rhoden <brho@google.com>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: [v2 PATCH] rhashtable: Fix rhashtable_try_insert test
Date: Sat, 11 Jan 2025 01:24:03 +0800 [thread overview]
Message-ID: <Z4FXs8vAtitHIJyl@gondor.apana.org.au> (raw)
In-Reply-To: <SN6PR02MB41577C2C4EB260F3D2D4F85FD41C2@SN6PR02MB4157.namprd02.prod.outlook.com>
On Fri, Jan 10, 2025 at 04:59:28PM +0000, Michael Kelley wrote:
>
> This patch fixes the problem I saw with VMs in the Azure cloud. Thanks!
Sorry, but the test on data is needed after all (it was just
buggy). Otherwise we will break rhlist. So please test this
patch instead.
---8<---
The test on whether rhashtable_insert_one did an insertion relies
on the value returned by rhashtable_lookup_one. Unfortunately that
value is overwritten after rhashtable_insert_one returns. Fix this
by saving the old value.
Also simplify the test as only data == NULL matters.
Reported-by: Michael Kelley <mhklinux@outlook.com>
Fixes: e1d3422c95f0 ("rhashtable: Fix potential deadlock by moving schedule_work outside lock")
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
diff --git a/lib/rhashtable.c b/lib/rhashtable.c
index bf956b85455a..e36b36f3146d 100644
--- a/lib/rhashtable.c
+++ b/lib/rhashtable.c
@@ -611,17 +611,20 @@ static void *rhashtable_try_insert(struct rhashtable *ht, const void *key,
new_tbl = rht_dereference_rcu(tbl->future_tbl, ht);
data = ERR_PTR(-EAGAIN);
} else {
+ void *odata;
+
flags = rht_lock(tbl, bkt);
data = rhashtable_lookup_one(ht, bkt, tbl,
hash, key, obj);
new_tbl = rhashtable_insert_one(ht, bkt, tbl,
hash, obj, data);
+ odata = data;
if (PTR_ERR(new_tbl) != -EEXIST)
data = ERR_CAST(new_tbl);
rht_unlock(tbl, bkt, flags);
- if (PTR_ERR(data) == -ENOENT && !new_tbl) {
+ if (odata && !new_tbl) {
atomic_inc(&ht->nelems);
if (rht_grow_above_75(ht, tbl))
schedule_work(&ht->run_work);
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
next prev parent reply other threads:[~2025-01-10 17:24 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-28 12:16 [PATCH] rhashtable: Fix potential deadlock by moving schedule_work outside lock Breno Leitao
2024-11-29 5:47 ` Herbert Xu
2024-12-02 20:16 ` Breno Leitao
2024-12-03 20:16 ` Tejun Heo
2024-12-04 1:34 ` Herbert Xu
2024-12-12 12:33 ` Herbert Xu
2024-12-21 9:06 ` Herbert Xu
2025-01-02 10:15 ` Breno Leitao
2025-01-09 3:16 ` Michael Kelley
2025-01-09 10:15 ` Breno Leitao
2025-01-10 9:27 ` Herbert Xu
2025-01-10 9:49 ` Breno Leitao
2025-01-10 10:07 ` Herbert Xu
2025-01-10 14:46 ` Zaslonko Mikhail
2025-01-10 16:59 ` Michael Kelley
2025-01-10 17:24 ` Herbert Xu [this message]
2025-01-10 18:22 ` [v2 PATCH] rhashtable: Fix rhashtable_try_insert test Michael Kelley
2025-01-14 3:15 ` [v3 " Herbert Xu
2025-01-14 11:58 ` Michael Kelley
2025-01-15 15:15 ` Breno Leitao
2025-01-16 9:10 ` Herbert Xu
2025-01-16 11:48 ` Alexander Gordeev
2025-01-17 13:20 ` Zaslonko Mikhail
2025-01-13 19:50 ` [PATCH] rhashtable: Fix potential deadlock by moving schedule_work outside lock Guenter Roeck
2025-01-14 3:23 ` Herbert Xu
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=Z4FXs8vAtitHIJyl@gondor.apana.org.au \
--to=herbert@gondor.apana.org.au \
--cc=akpm@linux-foundation.org \
--cc=brho@google.com \
--cc=haoluo@google.com \
--cc=joshdon@google.com \
--cc=leitao@debian.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mhklinux@outlook.com \
--cc=netdev@vger.kernel.org \
--cc=saeedm@nvidia.com \
--cc=tariqt@nvidia.com \
--cc=tgraf@suug.ch \
--cc=tj@kernel.org \
/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