From: Al Viro <viro@zeniv.linux.org.uk>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [git pull] d_revalidate pile
Date: Mon, 27 Jan 2025 04:47:21 +0000 [thread overview]
Message-ID: <20250127044721.GD1977892@ZenIV> (raw)
->d_revalidate() series, along with ->d_iname preliminary work.
One trivial conflict in fs/afs/dir.c - afs_do_lookup_one() has lost
one argument in mainline and switched another from dentry to qstr
in this series.
The following changes since commit 40384c840ea1944d7c5a392e8975ed088ecf0b37:
Linux 6.13-rc1 (2024-12-01 14:28:56 -0800)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git tags/pull-revalidate
for you to fetch changes up to a8ea90bfec66b239dad9a478fc444aa32d3961bc:
9p: fix ->rename_sem exclusion (2025-01-25 11:51:57 -0500)
----------------------------------------------------------------
Provide stable parent and name to ->d_revalidate() instances
Most of the filesystem methods where we care about dentry name
and parent have their stability guaranteed by the callers;
->d_revalidate() is the major exception.
It's easy enough for callers to supply stable values for
expected name and expected parent of the dentry being
validated. That kills quite a bit of boilerplate in
->d_revalidate() instances, along with a bunch of races
where they used to access ->d_name without sufficient
precautions.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
----------------------------------------------------------------
Al Viro (20):
make sure that DNAME_INLINE_LEN is a multiple of word size
dcache: back inline names with a struct-wrapped array of unsigned long
make take_dentry_name_snapshot() lockless
dissolve external_name.u into separate members
ext4 fast_commit: make use of name_snapshot primitives
generic_ci_d_compare(): use shortname_storage
Pass parent directory inode and expected name to ->d_revalidate()
afs_d_revalidate(): use stable name and parent inode passed by caller
ceph_d_revalidate(): use stable parent inode passed by caller
ceph_d_revalidate(): propagate stable name down into request encoding
fscrypt_d_revalidate(): use stable parent inode passed by caller
exfat_d_revalidate(): use stable parent inode passed by caller
vfat_revalidate{,_ci}(): use stable parent inode passed by caller
fuse_dentry_revalidate(): use stable parent inode and name passed by caller
gfs2_drevalidate(): use stable parent inode and name passed by caller
nfs{,4}_lookup_validate(): use stable parent inode passed by caller
nfs: fix ->d_revalidate() UAF on ->d_name accesses
ocfs2_dentry_revalidate(): use stable parent inode and name passed by caller
orangefs_d_revalidate(): use stable parent inode and name passed by caller
9p: fix ->rename_sem exclusion
Documentation/filesystems/locking.rst | 7 +-
Documentation/filesystems/porting.rst | 16 +++++
Documentation/filesystems/vfs.rst | 24 ++++++-
fs/9p/v9fs.h | 2 +-
fs/9p/vfs_dentry.c | 26 +++++++-
fs/afs/dir.c | 40 ++++--------
fs/ceph/dir.c | 25 ++------
fs/ceph/mds_client.c | 9 ++-
fs/ceph/mds_client.h | 2 +
fs/coda/dir.c | 3 +-
fs/crypto/fname.c | 22 ++-----
fs/dcache.c | 95 ++++++++++++++++------------
fs/ecryptfs/dentry.c | 18 ++++--
fs/exfat/namei.c | 11 +---
fs/ext4/fast_commit.c | 29 ++-------
fs/ext4/fast_commit.h | 3 +-
fs/fat/namei_vfat.c | 19 +++---
fs/fuse/dir.c | 20 +++---
fs/gfs2/dentry.c | 31 ++++-----
fs/hfs/sysdep.c | 3 +-
fs/jfs/namei.c | 3 +-
fs/kernfs/dir.c | 3 +-
fs/libfs.c | 15 +++--
fs/namei.c | 18 +++---
fs/nfs/dir.c | 62 ++++++++----------
fs/nfs/namespace.c | 2 +-
fs/nfs/nfs3proc.c | 5 +-
fs/nfs/nfs4proc.c | 20 +++---
fs/nfs/proc.c | 6 +-
fs/ocfs2/dcache.c | 14 ++--
fs/orangefs/dcache.c | 22 +++----
fs/overlayfs/super.c | 22 ++++++-
fs/proc/base.c | 6 +-
fs/proc/fd.c | 3 +-
fs/proc/generic.c | 6 +-
fs/proc/proc_sysctl.c | 3 +-
fs/smb/client/dir.c | 3 +-
fs/tracefs/inode.c | 3 +-
fs/vboxsf/dir.c | 3 +-
include/linux/dcache.h | 23 +++++--
include/linux/fscrypt.h | 7 +-
include/linux/nfs_xdr.h | 2 +-
tools/testing/selftests/bpf/progs/find_vma.c | 2 +-
43 files changed, 352 insertions(+), 306 deletions(-)
next reply other threads:[~2025-01-27 4:47 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-27 4:47 Al Viro [this message]
2025-01-27 17:19 ` [git pull] d_revalidate pile 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
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=20250127044721.GD1977892@ZenIV \
--to=viro@zeniv.linux.org.uk \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.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.