All of lore.kernel.org
 help / color / mirror / Atom feed
From: Al Viro <viro@zeniv.linux.org.uk>
To: Sasha Levin <sashal@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [git pull] d_revalidate pile
Date: Tue, 28 Jan 2025 00:26:59 +0000	[thread overview]
Message-ID: <20250128002659.GJ1977892@ZenIV> (raw)
In-Reply-To: <Z5gWQnUDMyE5sniC@lappy>

On Mon, Jan 27, 2025 at 06:26:58PM -0500, Sasha Levin wrote:
> On Mon, Jan 27, 2025 at 10:40:59PM +0000, Al Viro wrote:
> > On Mon, Jan 27, 2025 at 09:34:56PM +0000, Al Viro wrote:
> > 
> > > If so, then
> > > 	a) it's a false positive (and IIRC, it's not the first time
> > > kfence gets confused by that)
> > > 	b) your bisection will probably converge to bdd9951f60f9
> > > "dissolve external_name.u into separate members" which is where we'd
> > > ended up with offsetof(struct external_name, name) being 4 modulo 8.
> > > 
> > > As a quick test, try to flip the order of head and count in
> > > struct external_name and see if that makes the warning go away.
> > > If it does, I'm pretty certain that theory above is correct.
> > 
> > Not quite...   dentry_string_cmp() assumes that ->d_name.name is
> > word-aligned, so load_unaligned_zeropad() is done only to the
> > second string (the one we compare against).
> 
> Sorry for the silence on my end: this issue doesn't reproduce
> consistently, so I need to do more runs for these tests.

Updated version force-pushed; delta is

diff --git a/fs/dcache.c b/fs/dcache.c
index 695406e48937..903142b324e9 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -295,10 +295,16 @@ static inline int dentry_cmp(const struct dentry *dentry, const unsigned char *c
 	return dentry_string_cmp(cs, ct, tcount);
 }
 
+/*
+ * long names are allocated separately from dentry and never modified.
+ * Refcounted, freeing is RCU-delayed.  See take_dentry_name_snapshot()
+ * for the reason why ->count and ->head can't be combined into a union.
+ * dentry_string_cmp() relies upon ->name[] being word-aligned.
+ */
 struct external_name {
-	struct rcu_head head;	// ->head and ->count can't be combined
-	atomic_t count;		// see take_dentry_name_snapshot()
-	unsigned char name[];
+	atomic_t count;
+	struct rcu_head head;
+	unsigned char name[] __aligned(sizeof(unsigned long));
 };
 
 static inline struct external_name *external_name(struct dentry *dentry)


Could you recheck that one (23e8b451dea4)?  I'll send an update pull request
if nothing wrong shows up.

  reply	other threads:[~2025-01-28  0:27 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-27  4:47 [git pull] d_revalidate pile Al Viro
2025-01-27 17:19 ` Sasha Levin
2025-01-27 17:36   ` Al Viro
2025-01-27 20:52     ` Sasha Levin
2025-01-27 21:34       ` Al Viro
2025-01-27 22:40         ` Al Viro
2025-01-27 23:08           ` Linus Torvalds
2025-01-27 23:26           ` Sasha Levin
2025-01-28  0:26             ` Al Viro [this message]
2025-01-28  0:31               ` Al Viro
2025-01-30  4:37                 ` [git pull] d_revalidate pile (v2) Al Viro
2025-01-30 17:24                   ` Linus Torvalds
2025-01-30 19:31                     ` Miklos Szeredi
2025-01-31  5:56                     ` Al Viro
2025-01-30 17:46                   ` pr-tracker-bot
2025-01-28  0:43               ` [git pull] d_revalidate pile Linus Torvalds
2025-01-28  1:21                 ` Al Viro
2025-01-28  1:27                   ` Linus Torvalds
2025-01-28  2:56                     ` Al Viro
2025-01-27 19:12   ` Linus Torvalds
2025-01-27 20:38     ` Mark Brown
2025-01-27 22:32       ` Sasha Levin
2025-01-28 12:14         ` Mark Brown
2025-01-28 12:43           ` Dan Carpenter
2025-01-28 12:33         ` Dan Carpenter
2025-01-28 19:24           ` Sasha Levin
2025-01-28  9:19       ` Guillaume Tucker

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=20250128002659.GJ1977892@ZenIV \
    --to=viro@zeniv.linux.org.uk \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sashal@kernel.org \
    --cc=torvalds@linux-foundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.