From: Al Viro <viro@zeniv.linux.org.uk>
To: linux-fsdevel@vger.kernel.org
Cc: brauner@kernel.org, jack@suse.cz, torvalds@linux-foundation.org
Subject: [PATCH v3 30/65] do_add_mount(): switch to passing pinned_mountpoint instead of mountpoint + path
Date: Wed, 3 Sep 2025 05:54:52 +0100 [thread overview]
Message-ID: <20250903045537.2579614-31-viro@zeniv.linux.org.uk> (raw)
In-Reply-To: <20250903045537.2579614-1-viro@zeniv.linux.org.uk>
Both callers pass it a mountpoint reference picked from pinned_mountpoint
and path it corresponds to.
First of all, path->dentry is equal to mp.mp->m_dentry. Furthermore, path->mnt
is &mp.parent->mnt, making struct path contents redundant.
Pass it the address of that pinned_mountpoint instead; what's more, if we
teach it to treat ERR_PTR(error) in ->parent as "bail out with that error"
we can simplify the callers even more - do_add_mount() will do the right
thing even when called after lock_mount() failure.
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
fs/namespace.c | 32 +++++++++++++++-----------------
1 file changed, 15 insertions(+), 17 deletions(-)
diff --git a/fs/namespace.c b/fs/namespace.c
index d57e727962da..b236536bbbc9 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -3657,10 +3657,13 @@ static int do_move_mount_old(struct path *path, const char *old_name)
/*
* add a mount into a namespace's mount tree
*/
-static int do_add_mount(struct mount *newmnt, struct mountpoint *mp,
- const struct path *path, int mnt_flags)
+static int do_add_mount(struct mount *newmnt, const struct pinned_mountpoint *mp,
+ int mnt_flags)
{
- struct mount *parent = real_mount(path->mnt);
+ struct mount *parent = mp->parent;
+
+ if (IS_ERR(parent))
+ return PTR_ERR(parent);
mnt_flags &= ~MNT_INTERNAL_FLAGS;
@@ -3674,14 +3677,15 @@ static int do_add_mount(struct mount *newmnt, struct mountpoint *mp,
}
/* Refuse the same filesystem on the same mount point */
- if (path->mnt->mnt_sb == newmnt->mnt.mnt_sb && path_mounted(path))
+ if (parent->mnt.mnt_sb == newmnt->mnt.mnt_sb &&
+ parent->mnt.mnt_root == mp->mp->m_dentry)
return -EBUSY;
if (d_is_symlink(newmnt->mnt.mnt_root))
return -EINVAL;
newmnt->mnt.mnt_flags = mnt_flags;
- return graft_tree(newmnt, parent, mp);
+ return graft_tree(newmnt, parent, mp->mp);
}
static bool mount_too_revealing(const struct super_block *sb, int *new_mnt_flags);
@@ -3711,14 +3715,9 @@ static int do_new_mount_fc(struct fs_context *fc, struct path *mountpoint,
mnt_warn_timestamp_expiry(mountpoint, mnt);
LOCK_MOUNT(mp, mountpoint);
- if (IS_ERR(mp.parent)) {
- return PTR_ERR(mp.parent);
- } else {
- error = do_add_mount(real_mount(mnt), mp.mp,
- mountpoint, mnt_flags);
- if (!error)
- retain_and_null_ptr(mnt); // consumed on success
- }
+ error = do_add_mount(real_mount(mnt), &mp, mnt_flags);
+ if (!error)
+ retain_and_null_ptr(mnt); // consumed on success
return error;
}
@@ -3824,11 +3823,10 @@ int finish_automount(struct vfsmount *__m, const struct path *path)
* got", not "try to mount it on top".
*/
LOCK_MOUNT_EXACT(mp, path);
- if (IS_ERR(mp.parent))
- return mp.parent == ERR_PTR(-EBUSY) ? 0 : PTR_ERR(mp.parent);
+ if (mp.parent == ERR_PTR(-EBUSY))
+ return 0;
- err = do_add_mount(mnt, mp.mp, path,
- path->mnt->mnt_flags | MNT_SHRINKABLE);
+ err = do_add_mount(mnt, &mp, path->mnt->mnt_flags | MNT_SHRINKABLE);
if (likely(!err))
retain_and_null_ptr(m);
return err;
--
2.47.2
next prev parent reply other threads:[~2025-09-03 4:55 UTC|newest]
Thread overview: 321+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-25 4:40 [PATCHED][RFC][CFT] mount-related stuff Al Viro
2025-08-25 4:43 ` [PATCH 01/52] fs/namespace.c: fix the namespace_sem guard mess Al Viro
2025-08-25 4:43 ` [PATCH 02/52] introduced guards for mount_lock Al Viro
2025-08-25 12:32 ` Christian Brauner
2025-08-25 13:46 ` Al Viro
2025-08-25 20:21 ` Al Viro
2025-08-25 23:44 ` Al Viro
2025-08-26 1:44 ` Al Viro
2025-08-26 15:17 ` Askar Safin
2025-08-26 15:45 ` Al Viro
2025-08-25 4:43 ` [PATCH 03/52] fs/namespace.c: allow to drop vfsmount references via __free(mntput) Al Viro
2025-08-25 12:33 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 04/52] __detach_mounts(): use guards Al Viro
2025-08-25 12:33 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 05/52] __is_local_mountpoint(): " Al Viro
2025-08-25 12:33 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 06/52] do_change_type(): " Al Viro
2025-08-25 12:34 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 07/52] do_set_group(): " Al Viro
2025-08-25 12:35 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 08/52] mark_mounts_for_expiry(): " Al Viro
2025-08-25 12:37 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 09/52] put_mnt_ns(): " Al Viro
2025-08-25 12:37 ` Christian Brauner
2025-08-25 12:40 ` Christian Brauner
2025-08-25 16:21 ` Al Viro
2025-08-25 4:43 ` [PATCH 10/52] mnt_already_visible(): " Al Viro
2025-08-25 12:39 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 11/52] check_for_nsfs_mounts(): no need to take locks Al Viro
2025-08-25 12:48 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 12/52] propagate_mnt(): use scoped_guard(mount_locked_reader) for mnt_set_mountpoint() Al Viro
2025-08-25 12:49 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 13/52] has_locked_children(): use guards Al Viro
2025-08-25 11:54 ` Linus Torvalds
2025-08-25 17:33 ` Al Viro
2025-08-25 12:49 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 14/52] mnt_set_expiry(): " Al Viro
2025-08-25 12:51 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 15/52] path_is_under(): " Al Viro
2025-08-25 12:56 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 16/52] current_chrooted(): don't bother with follow_down_one() Al Viro
2025-08-25 12:57 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 17/52] current_chrooted(): use guards Al Viro
2025-08-25 12:57 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 18/52] do_move_mount(): trim local variables Al Viro
2025-08-25 12:57 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 19/52] do_move_mount(): deal with the checks on old_path early Al Viro
2025-08-25 13:00 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 20/52] move_mount(2): take sanity checks in 'beneath' case into do_lock_mount() Al Viro
2025-08-25 12:10 ` Linus Torvalds
2025-08-25 12:17 ` Linus Torvalds
2025-08-25 13:02 ` Christian Brauner
2025-08-25 16:05 ` Al Viro
2025-08-25 4:43 ` [PATCH 21/52] finish_automount(): simplify the ELOOP check Al Viro
2025-08-25 13:02 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 22/52] do_loopback(): use __free(path_put) to deal with old_path Al Viro
2025-08-25 13:02 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 23/52] pivot_root(2): use __free() to deal with struct path in it Al Viro
2025-08-25 13:03 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 24/52] finish_automount(): take the lock_mount() analogue into a helper Al Viro
2025-08-25 13:08 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 25/52] do_new_mount_rc(): use __free() to deal with dropping mnt on failure Al Viro
2025-08-25 13:29 ` Christian Brauner
2025-08-25 16:09 ` Al Viro
2025-08-26 8:27 ` Christian Brauner
2025-08-26 17:00 ` Al Viro
2025-08-26 17:55 ` Al Viro
2025-08-26 18:21 ` [RFC][PATCH] switch do_new_mount_fc() to using fc_mount() Al Viro
2025-08-27 15:38 ` Paul Moore
2025-08-25 4:43 ` [PATCH 26/52] finish_automount(): use __free() to deal with dropping mnt on failure Al Viro
2025-08-25 13:09 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 27/52] change calling conventions for lock_mount() et.al Al Viro
2025-08-25 4:43 ` [PATCH 28/52] do_move_mount(): use the parent mount returned by do_lock_mount() Al Viro
2025-08-25 4:43 ` [PATCH 29/52] do_add_mount(): switch to passing pinned_mountpoint instead of mountpoint + path Al Viro
2025-08-25 4:43 ` [PATCH 30/52] graft_tree(), attach_recursive_mnt() - pass pinned_mountpoint Al Viro
2025-08-25 4:43 ` [PATCH 31/52] pivot_root(2): use old_mp.mp->m_dentry instead of old.dentry Al Viro
2025-08-25 13:43 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 32/52] don't bother passing new_path->dentry to can_move_mount_beneath() Al Viro
2025-08-25 4:43 ` [PATCH 33/52] new helper: topmost_overmount() Al Viro
2025-08-25 13:43 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 34/52] do_lock_mount(): don't modify path Al Viro
2025-08-26 14:14 ` Askar Safin
2025-08-25 4:43 ` [PATCH 35/52] constify check_mnt() Al Viro
2025-08-25 13:43 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 36/52] do_mount_setattr(): constify path argument Al Viro
2025-08-25 13:30 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 37/52] do_set_group(): constify path arguments Al Viro
2025-08-25 13:29 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 38/52] drop_collected_paths(): constify arguments Al Viro
2025-08-25 13:31 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 39/52] collect_paths(): constify the return value Al Viro
2025-08-25 13:30 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 40/52] do_move_mount(), vfs_move_mount(), do_move_mount_old(): constify struct path argument(s) Al Viro
2025-08-25 13:30 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 41/52] mnt_warn_timestamp_expiry(): constify struct path argument Al Viro
2025-08-25 13:32 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 42/52] do_new_mount{,_fc}(): " Al Viro
2025-08-25 13:30 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 43/52] do_{loopback,change_type,remount,reconfigure_mnt}(): " Al Viro
2025-08-25 13:31 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 44/52] path_mount(): " Al Viro
2025-08-25 13:32 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 45/52] may_copy_tree(), __do_loopback(): " Al Viro
2025-08-25 13:40 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 46/52] path_umount(): " Al Viro
2025-08-25 13:40 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 47/52] constify can_move_mount_beneath() arguments Al Viro
2025-08-25 13:39 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 48/52] do_move_mount_old(): use __free(path_put) Al Viro
2025-08-25 13:40 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 49/52] do_mount(): " Al Viro
2025-08-25 13:32 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 50/52] umount_tree(): take all victims out of propagation graph at once Al Viro
2025-08-25 4:43 ` [PATCH 51/52] ecryptfs: get rid of pointless mount references in ecryptfs dentries Al Viro
2025-08-25 13:41 ` Christian Brauner
2025-08-25 4:43 ` [PATCH 52/52] fs/namespace.c: sanitize descriptions for {__,}lookup_mnt() Al Viro
2025-08-25 13:42 ` Christian Brauner
2025-08-25 12:30 ` [PATCH 01/52] fs/namespace.c: fix the namespace_sem guard mess Christian Brauner
2025-08-25 12:26 ` [PATCHED][RFC][CFT] mount-related stuff Christian Brauner
2025-08-25 12:43 ` Christian Brauner
2025-08-25 16:11 ` Al Viro
2025-08-25 17:43 ` Al Viro
2025-08-25 20:18 ` Theodore Ts'o
2025-08-26 8:56 ` Christian Brauner
2025-08-27 17:19 ` Linus Torvalds
2025-08-27 17:49 ` Linus Torvalds
2025-08-27 22:49 ` Konstantin Ryabitsev
2025-08-27 23:40 ` Linus Torvalds
2025-08-28 0:41 ` Konstantin Ryabitsev
2025-08-28 1:00 ` Al Viro
2025-08-28 1:15 ` Konstantin Ryabitsev
2025-08-28 1:29 ` Linus Torvalds
2025-08-29 12:30 ` Theodore Ts'o
2025-08-29 18:25 ` Konstantin Ryabitsev
2025-08-28 23:07 ` [PATCHES v2][RFC][CFT] " Al Viro
2025-08-28 23:07 ` [PATCH v2 01/63] fs/namespace.c: fix the namespace_sem guard mess Al Viro
2025-08-28 23:07 ` [PATCH v2 02/63] introduced guards for mount_lock Al Viro
2025-08-29 9:49 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 03/63] fs/namespace.c: allow to drop vfsmount references via __free(mntput) Al Viro
2025-08-28 23:07 ` [PATCH v2 04/63] __detach_mounts(): use guards Al Viro
2025-08-29 9:48 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 05/63] __is_local_mountpoint(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 06/63] do_change_type(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 07/63] do_set_group(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 08/63] mark_mounts_for_expiry(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 09/63] put_mnt_ns(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 10/63] mnt_already_visible(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 11/63] check_for_nsfs_mounts(): no need to take locks Al Viro
2025-08-28 23:07 ` [PATCH v2 12/63] propagate_mnt(): use scoped_guard(mount_locked_reader) for mnt_set_mountpoint() Al Viro
2025-08-28 23:07 ` [PATCH v2 13/63] has_locked_children(): use guards Al Viro
2025-08-29 9:49 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 14/63] mnt_set_expiry(): " Al Viro
2025-08-29 9:49 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 15/63] path_is_under(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 16/63] current_chrooted(): don't bother with follow_down_one() Al Viro
2025-08-28 23:07 ` [PATCH v2 17/63] current_chrooted(): use guards Al Viro
2025-08-28 23:07 ` [PATCH v2 18/63] switch do_new_mount_fc() to fc_mount() Al Viro
2025-08-29 9:53 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 19/63] do_move_mount(): trim local variables Al Viro
2025-08-28 23:07 ` [PATCH v2 20/63] do_move_mount(): deal with the checks on old_path early Al Viro
2025-08-28 23:07 ` [PATCH v2 21/63] move_mount(2): take sanity checks in 'beneath' case into do_lock_mount() Al Viro
2025-08-28 23:07 ` [PATCH v2 22/63] finish_automount(): simplify the ELOOP check Al Viro
2025-08-28 23:07 ` [PATCH v2 23/63] do_loopback(): use __free(path_put) to deal with old_path Al Viro
2025-08-28 23:07 ` [PATCH v2 24/63] pivot_root(2): use __free() to deal with struct path in it Al Viro
2025-08-28 23:07 ` [PATCH v2 25/63] finish_automount(): take the lock_mount() analogue into a helper Al Viro
2025-08-28 23:07 ` [PATCH v2 26/63] do_new_mount_rc(): use __free() to deal with dropping mnt on failure Al Viro
2025-09-01 11:34 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 27/63] finish_automount(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 28/63] change calling conventions for lock_mount() et.al Al Viro
2025-09-01 11:37 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 29/63] do_move_mount(): use the parent mount returned by do_lock_mount() Al Viro
2025-09-01 11:38 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 30/63] do_add_mount(): switch to passing pinned_mountpoint instead of mountpoint + path Al Viro
2025-09-01 11:40 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 31/63] graft_tree(), attach_recursive_mnt() - pass pinned_mountpoint Al Viro
2025-09-01 11:41 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 32/63] pivot_root(2): use old_mp.mp->m_dentry instead of old.dentry Al Viro
2025-08-28 23:07 ` [PATCH v2 33/63] don't bother passing new_path->dentry to can_move_mount_beneath() Al Viro
2025-08-28 23:20 ` Linus Torvalds
2025-08-28 23:39 ` Al Viro
2025-08-28 23:07 ` [PATCH v2 34/63] new helper: topmost_overmount() Al Viro
2025-08-28 23:07 ` [PATCH v2 35/63] do_lock_mount(): don't modify path Al Viro
2025-09-02 10:55 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 36/63] constify check_mnt() Al Viro
2025-08-28 23:07 ` [PATCH v2 37/63] do_mount_setattr(): constify path argument Al Viro
2025-08-28 23:07 ` [PATCH v2 38/63] do_set_group(): constify path arguments Al Viro
2025-08-28 23:07 ` [PATCH v2 39/63] drop_collected_paths(): constify arguments Al Viro
2025-08-28 23:07 ` [PATCH v2 40/63] collect_paths(): constify the return value Al Viro
2025-08-28 23:07 ` [PATCH v2 41/63] do_move_mount(), vfs_move_mount(), do_move_mount_old(): constify struct path argument(s) Al Viro
2025-08-28 23:07 ` [PATCH v2 42/63] mnt_warn_timestamp_expiry(): constify struct path argument Al Viro
2025-08-28 23:07 ` [PATCH v2 43/63] do_new_mount{,_fc}(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 44/63] do_{loopback,change_type,remount,reconfigure_mnt}(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 45/63] path_mount(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 46/63] may_copy_tree(), __do_loopback(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 47/63] path_umount(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 48/63] constify can_move_mount_beneath() arguments Al Viro
2025-08-28 23:07 ` [PATCH v2 49/63] do_move_mount_old(): use __free(path_put) Al Viro
2025-08-28 23:07 ` [PATCH v2 50/63] do_mount(): " Al Viro
2025-08-28 23:07 ` [PATCH v2 51/63] umount_tree(): take all victims out of propagation graph at once Al Viro
2025-09-01 11:50 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 52/63] ecryptfs: get rid of pointless mount references in ecryptfs dentries Al Viro
2025-08-28 23:07 ` [PATCH v2 53/63] fs/namespace.c: sanitize descriptions for {__,}lookup_mnt() Al Viro
2025-08-28 23:07 ` [PATCH v2 54/63] open_detached_copy(): don't bother with mount_lock_hash() Al Viro
2025-09-01 11:29 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 55/63] open_detached_copy(): separate creation of namespace into helper Al Viro
2025-08-29 9:54 ` Christian Brauner
2025-08-28 23:07 ` [PATCH v2 56/63] mnt_ns_tree_remove(): DTRT if mnt_ns had never been added to mnt_ns_list Al Viro
2025-08-29 9:57 ` Christian Brauner
2025-08-28 23:08 ` [PATCH v2 57/63] copy_mnt_ns(): use the regular mechanism for freeing empty mnt_ns on failure Al Viro
2025-08-29 9:56 ` Christian Brauner
2025-08-28 23:08 ` [PATCH v2 58/63] copy_mnt_ns(): use guards Al Viro
2025-09-01 11:43 ` Christian Brauner
2025-08-28 23:08 ` [PATCH v2 59/63] setup_mnt(): primitive for connecting a mount to filesystem Al Viro
2025-08-28 23:08 ` [PATCH v2 60/63] preparations to taking MNT_WRITE_HOLD out of ->mnt_flags Al Viro
2025-08-28 23:08 ` [PATCH v2 61/63] struct mount: relocate MNT_WRITE_HOLD bit Al Viro
2025-08-28 23:31 ` Linus Torvalds
2025-08-29 0:11 ` Al Viro
2025-08-29 0:35 ` Linus Torvalds
2025-08-29 6:03 ` Al Viro
2025-08-29 6:04 ` [59/63] simplify the callers of mnt_unhold_writers() Al Viro
2025-09-01 11:20 ` Christian Brauner
2025-08-29 6:05 ` [60/63] setup_mnt(): primitive for connecting a mount to filesystem Al Viro
2025-08-29 9:59 ` Christian Brauner
2025-08-29 16:37 ` Al Viro
2025-08-30 4:36 ` Al Viro
2025-08-30 7:33 ` [RFC] does # really need to be escaped in devnames? Al Viro
2025-08-30 19:40 ` Linus Torvalds
2025-08-30 20:42 ` Al Viro
2025-09-02 15:03 ` Siddhesh Poyarekar
2025-09-02 16:30 ` Linus Torvalds
2025-09-02 16:39 ` Siddhesh Poyarekar
2025-09-02 17:48 ` David Howells
2025-09-02 20:04 ` Linus Torvalds
2025-09-01 11:17 ` [60/63] setup_mnt(): primitive for connecting a mount to filesystem Christian Brauner
2025-08-29 6:06 ` [61/63] preparations to taking MNT_WRITE_HOLD out of ->mnt_flags Al Viro
2025-09-01 11:27 ` Christian Brauner
2025-08-29 6:07 ` [62/63] struct mount: relocate MNT_WRITE_HOLD bit Al Viro
2025-09-01 11:26 ` Christian Brauner
2025-08-28 23:08 ` [PATCH v2 62/63] simplify the callers of mnt_unhold_writers() Al Viro
2025-08-28 23:08 ` [PATCH v2 63/63] WRITE_HOLD machinery: no need for to bump mount_lock seqcount Al Viro
2025-09-01 11:28 ` Christian Brauner
2025-09-03 4:54 ` [PATCHES v3][RFC][CFT] mount-related stuff Al Viro
2025-09-03 4:54 ` [PATCH v3 01/65] fs/namespace.c: fix the namespace_sem guard mess Al Viro
2025-09-03 4:54 ` [PATCH v3 02/65] introduced guards for mount_lock Al Viro
2025-09-03 4:54 ` [PATCH v3 03/65] fs/namespace.c: allow to drop vfsmount references via __free(mntput) Al Viro
2025-09-03 4:54 ` [PATCH v3 04/65] __detach_mounts(): use guards Al Viro
2025-09-03 4:54 ` [PATCH v3 05/65] __is_local_mountpoint(): " Al Viro
2025-09-03 4:54 ` [PATCH v3 06/65] do_change_type(): " Al Viro
2025-09-03 4:54 ` [PATCH v3 07/65] do_set_group(): " Al Viro
2025-09-03 4:54 ` [PATCH v3 08/65] mark_mounts_for_expiry(): " Al Viro
2025-09-03 4:54 ` [PATCH v3 09/65] put_mnt_ns(): " Al Viro
2025-09-03 4:54 ` [PATCH v3 10/65] mnt_already_visible(): " Al Viro
2025-09-03 4:54 ` [PATCH v3 11/65] check_for_nsfs_mounts(): no need to take locks Al Viro
2025-09-03 4:54 ` [PATCH v3 12/65] propagate_mnt(): use scoped_guard(mount_locked_reader) for mnt_set_mountpoint() Al Viro
2025-09-03 4:54 ` [PATCH v3 13/65] has_locked_children(): use guards Al Viro
2025-09-03 4:54 ` [PATCH v3 14/65] mnt_set_expiry(): " Al Viro
2025-09-03 4:54 ` [PATCH v3 15/65] path_is_under(): " Al Viro
2025-09-03 4:54 ` [PATCH v3 16/65] current_chrooted(): don't bother with follow_down_one() Al Viro
2025-09-03 4:54 ` [PATCH v3 17/65] current_chrooted(): use guards Al Viro
2025-09-03 4:54 ` [PATCH v3 18/65] switch do_new_mount_fc() to fc_mount() Al Viro
2025-09-03 4:54 ` [PATCH v3 19/65] do_move_mount(): trim local variables Al Viro
2025-09-03 4:54 ` [PATCH v3 20/65] do_move_mount(): deal with the checks on old_path early Al Viro
2025-09-03 4:54 ` [PATCH v3 21/65] move_mount(2): take sanity checks in 'beneath' case into do_lock_mount() Al Viro
2025-09-03 4:54 ` [PATCH v3 22/65] finish_automount(): simplify the ELOOP check Al Viro
2025-09-03 4:54 ` [PATCH v3 23/65] do_loopback(): use __free(path_put) to deal with old_path Al Viro
2025-09-03 4:54 ` [PATCH v3 24/65] pivot_root(2): use __free() to deal with struct path in it Al Viro
2025-09-03 4:54 ` [PATCH v3 25/65] finish_automount(): take the lock_mount() analogue into a helper Al Viro
2025-09-03 4:54 ` [PATCH v3 26/65] do_new_mount_fc(): use __free() to deal with dropping mnt on failure Al Viro
2025-09-03 4:54 ` [PATCH v3 26/63] do_new_mount_rc(): " Al Viro
2025-09-03 4:54 ` [PATCH v3 27/65] finish_automount(): " Al Viro
2025-09-03 4:54 ` [PATCH v3 28/65] change calling conventions for lock_mount() et.al Al Viro
2025-09-03 4:54 ` [PATCH v3 29/65] do_move_mount(): use the parent mount returned by do_lock_mount() Al Viro
2025-09-03 4:54 ` Al Viro [this message]
2025-09-03 4:54 ` [PATCH v3 31/65] graft_tree(), attach_recursive_mnt() - pass pinned_mountpoint Al Viro
2025-09-03 4:54 ` [PATCH v3 32/65] pivot_root(2): use old_mp.mp->m_dentry instead of old.dentry Al Viro
2025-09-03 4:54 ` [PATCH v3 33/65] don't bother passing new_path->dentry to can_move_mount_beneath() Al Viro
2025-09-03 4:54 ` [PATCH v3 34/65] new helper: topmost_overmount() Al Viro
2025-09-03 4:54 ` [PATCH v3 35/65] do_lock_mount(): don't modify path Al Viro
2025-09-03 4:54 ` [PATCH v3 36/65] constify check_mnt() Al Viro
2025-09-03 4:54 ` [PATCH v3 37/65] do_mount_setattr(): constify path argument Al Viro
2025-09-03 4:55 ` [PATCH v3 38/65] do_set_group(): constify path arguments Al Viro
2025-09-03 4:55 ` [PATCH v3 39/65] drop_collected_paths(): constify arguments Al Viro
2025-09-03 4:55 ` [PATCH v3 40/65] collect_paths(): constify the return value Al Viro
2025-09-03 4:55 ` [PATCH v3 41/65] do_move_mount(), vfs_move_mount(), do_move_mount_old(): constify struct path argument(s) Al Viro
2025-09-03 4:55 ` [PATCH v3 42/65] mnt_warn_timestamp_expiry(): constify struct path argument Al Viro
2025-09-03 4:55 ` [PATCH v3 43/65] do_new_mount{,_fc}(): " Al Viro
2025-09-03 4:55 ` [PATCH v3 44/65] do_{loopback,change_type,remount,reconfigure_mnt}(): " Al Viro
2025-09-03 4:55 ` [PATCH v3 45/65] path_mount(): " Al Viro
2025-09-03 4:55 ` [PATCH v3 46/65] may_copy_tree(), __do_loopback(): " Al Viro
2025-09-03 4:55 ` [PATCH v3 47/65] path_umount(): " Al Viro
2025-09-03 4:55 ` [PATCH v3 48/65] constify can_move_mount_beneath() arguments Al Viro
2025-09-03 4:55 ` [PATCH v3 49/65] do_move_mount_old(): use __free(path_put) Al Viro
2025-09-03 4:55 ` [PATCH v3 50/65] do_mount(): " Al Viro
2025-09-03 4:55 ` [PATCH v3 51/65] umount_tree(): take all victims out of propagation graph at once Al Viro
2025-09-03 4:55 ` [PATCH v3 52/65] ecryptfs: get rid of pointless mount references in ecryptfs dentries Al Viro
2025-09-03 4:55 ` [PATCH v3 53/65] fs/namespace.c: sanitize descriptions for {__,}lookup_mnt() Al Viro
2025-09-03 4:55 ` [PATCH v3 54/63] open_detached_copy(): don't bother with mount_lock_hash() Al Viro
2025-09-03 4:55 ` [PATCH v3 54/65] path_has_submounts(): use guard(mount_locked_reader) Al Viro
2025-09-03 4:55 ` [PATCH v3 55/65] open_detached_copy(): don't bother with mount_lock_hash() Al Viro
2025-09-03 4:55 ` [PATCH v3 55/63] open_detached_copy(): separate creation of namespace into helper Al Viro
2025-09-03 4:55 ` [PATCH v3 56/63] mnt_ns_tree_remove(): DTRT if mnt_ns had never been added to mnt_ns_list Al Viro
2025-09-03 4:55 ` [PATCH v3 56/65] open_detached_copy(): separate creation of namespace into helper Al Viro
2025-09-03 4:55 ` [PATCH v3 57/63] copy_mnt_ns(): use the regular mechanism for freeing empty mnt_ns on failure Al Viro
2025-09-03 4:55 ` [PATCH v3 57/65] mnt_ns_tree_remove(): DTRT if mnt_ns had never been added to mnt_ns_list Al Viro
2025-09-03 4:55 ` [PATCH v3 58/63] copy_mnt_ns(): use guards Al Viro
2025-09-03 4:55 ` [PATCH v3 58/65] copy_mnt_ns(): use the regular mechanism for freeing empty mnt_ns on failure Al Viro
2025-09-03 4:55 ` [PATCH v3 59/65] copy_mnt_ns(): use guards Al Viro
2025-09-03 4:55 ` [PATCH v3 59/63] simplify the callers of mnt_unhold_writers() Al Viro
2025-09-03 4:55 ` [PATCH v3 60/63] setup_mnt(): primitive for connecting a mount to filesystem Al Viro
2025-09-03 4:55 ` [PATCH v3 60/65] simplify the callers of mnt_unhold_writers() Al Viro
2025-09-03 4:55 ` [PATCH v3 61/63] preparations to taking MNT_WRITE_HOLD out of ->mnt_flags Al Viro
2025-09-03 4:55 ` [PATCH v3 61/65] setup_mnt(): primitive for connecting a mount to filesystem Al Viro
2025-09-03 4:55 ` [PATCH v3 62/65] preparations to taking MNT_WRITE_HOLD out of ->mnt_flags Al Viro
2025-09-03 4:55 ` [PATCH v3 62/63] struct mount: relocate MNT_WRITE_HOLD bit Al Viro
2025-09-03 4:55 ` [PATCH v3 63/65] " Al Viro
2025-09-03 4:55 ` [PATCH v3 63/63] WRITE_HOLD machinery: no need for to bump mount_lock seqcount Al Viro
2025-09-03 4:55 ` [PATCH v3 64/65] " Al Viro
2025-09-03 4:55 ` [PATCH v3 65/65] constify {__,}mnt_is_readonly() Al Viro
2025-09-03 5:08 ` [PATCHES v3][RFC][CFT] mount-related stuff Al Viro
2025-09-03 14:47 ` Linus Torvalds
2025-09-03 18:14 ` Al Viro
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=20250903045537.2579614-31-viro@zeniv.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=brauner@kernel.org \
--cc=jack@suse.cz \
--cc=linux-fsdevel@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 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 NNTP newsgroup(s).