From: Al Viro <viro@zeniv.linux.org.uk>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-fsdevel@vger.kernel.org, Christian Brauner <brauner@kernel.org>
Subject: [git pull][6.17] vfs.git 9/9: mount pile
Date: Sat, 26 Jul 2025 09:09:42 +0100 [thread overview]
Message-ID: <20250726080942.GH1456602@ZenIV> (raw)
In-Reply-To: <20250726080119.GA222315@ZenIV>
The following changes since commit d0b3b7b22dfa1f4b515fd3a295b3fd958f9e81af:
Linux 6.16-rc4 (2025-06-29 13:09:04 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git tags/pull-mount
for you to fetch changes up to a7cce099450f8fc597a6ac215440666610895fb7:
statmount_mnt_basic(): simplify the logics for group id (2025-06-29 19:03:46 -0400)
----------------------------------------------------------------
mount changes. I've got more stuff in the local tree, but
this is getting too much for one merge window as it is.
* mount hash conflicts rudiments are gone now - we do not allow
multiple mounts with the same parent/mountpoint to be
hashed at the same time.
* struct mount changes
mnt_umounting is gone;
mnt_slave_list/mnt_slave is an hlist now;
overmounts are kept track of by explicit pointer in mount;
a bunch of flags moved out of mnt_flags to a new field,
with only namespace_sem for protection;
mnt_expiry is protected by mount_lock now (instead of
namespace_sem);
MNT_LOCKED is used only for mounts that need to remain
attached to their parents to prevent mountpoint exposure -
no more overloading it for absolute roots;
all mnt_list uses are transient now - it's used only to
represent temporary sets during umount_tree().
* mount refcounting change
children no longer pin parents for any mounts, whether they'd
passed through umount_tree() or not.
* struct mountpoint changes
refcount is no more; what matters is ->m_list emptiness;
instead of temporary bumping the refcount, we insert a new object
(pinned_mountpoint) into ->m_list;
new calling conventions for lock_mount() and friends.
* do_move_mount()/attach_recursive_mnt() seriously cleaned up.
* globals in fs/pnode.c are gone.
* propagate_mnt(), change_mnt_propagation() and propagate_umount() cleaned up
(in the last case - pretty much completely rewritten).
* freeing of emptied mnt_namespace is done in namespace_unlock()
for one thing, there are subtle ordering requirements there;
for another it simplifies cleanups.
* assorted cleanups.
* restore the machinery for long-term mounts from accumulated bitrot.
This is going to get a followup come next cycle, when #work.fs_context
with its change of vfs_fs_parse_string() calling conventions goes
into -next.
----------------------------------------------------------------
Al Viro (48):
attach_mnt(): expand in attach_recursive_mnt(), then lose the flag argument
get rid of mnt_set_mountpoint_beneath()
prevent mount hash conflicts
copy_tree(): don't set ->mnt_mountpoint on the root of copy
constify mnt_has_parent()
pnode: lift peers() into pnode.h
new predicate: mount_is_ancestor()
constify is_local_mountpoint()
new predicate: anon_ns_root(mount)
dissolve_on_fput(): use anon_ns_root()
__attach_mnt(): lose the second argument
don't set MNT_LOCKED on parentless mounts
clone_mnt(): simplify the propagation-related logics
do_umount(): simplify the "is it still mounted" checks
sanitize handling of long-term internal mounts
Rewrite of propagate_umount()
make commit_tree() usable in same-namespace move case
attach_recursive_mnt(): unify the mnt_change_mountpoint() logics
attach_recursive_mnt(): pass destination mount in all cases
attach_recursive_mnt(): get rid of flags entirely
do_move_mount(): take dropping the old mountpoint into attach_recursive_mnt()
do_move_mount(): get rid of 'attached' flag
attach_recursive_mnt(): remove from expiry list on move
take ->mnt_expire handling under mount_lock [read_seqlock_excl]
pivot_root(): reorder tree surgeries, collapse unhash_mnt() and put_mountpoint()
combine __put_mountpoint() with unhash_mnt()
get rid of mountpoint->m_count
don't have mounts pin their parents
mount: separate the flags accessed only under namespace_sem
propagate_one(): get rid of dest_master
propagate_mnt(): handle all peer groups in the same loop
propagate_one(): separate the "do we need secondary here?" logics
propagate_one(): separate the "what should be the master for this copy" part
propagate_one(): fold into the sole caller
fs/pnode.c: get rid of globals
propagate_mnt(): get rid of last_dest
propagate_mnt(): fix comment and convert to kernel-doc, while we are at it
change_mnt_propagation() cleanups, step 1
change_mnt_propagation(): do_make_slave() is a no-op unless IS_MNT_SHARED()
do_make_slave(): choose new master sanely
turn do_make_slave() into transfer_propagation()
mnt_slave_list/mnt_slave: turn into hlist_head/hlist_node
change_mnt_propagation(): move ->mnt_master assignment into MS_SLAVE case
copy_tree(): don't link the mounts via mnt_list
take freeing of emptied mnt_namespace to namespace_unlock()
get rid of CL_SHARE_TO_SLAVE
invent_group_ids(): zero ->mnt_group_id always implies !IS_MNT_SHARED()
statmount_mnt_basic(): simplify the logics for group id
Documentation/filesystems/propagate_umount.txt | 484 +++++++++++++++++
drivers/gpu/drm/i915/gem/i915_gemfs.c | 21 +-
drivers/gpu/drm/v3d/v3d_gemfs.c | 21 +-
fs/hugetlbfs/inode.c | 2 +-
fs/mount.h | 40 +-
fs/namespace.c | 711 ++++++++++---------------
fs/pnode.c | 697 ++++++++++++------------
fs/pnode.h | 27 +-
include/linux/mount.h | 18 +-
ipc/mqueue.c | 2 +-
10 files changed, 1216 insertions(+), 807 deletions(-)
create mode 100644 Documentation/filesystems/propagate_umount.txt
next prev parent reply other threads:[~2025-07-26 8:09 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-26 8:01 [git pull][6.17] vfs.git 1/9: d_flags pile Al Viro
2025-07-26 8:02 ` [git pull][6.17] vfs.git 2/9: simple_recursive_removal Al Viro
2025-07-28 23:41 ` pr-tracker-bot
2025-07-26 8:03 ` [git pull][6.17] vfs.git 3/9: rpc_pipefs Al Viro
2025-07-28 23:41 ` pr-tracker-bot
2025-07-26 8:04 ` [git pull][6.17] vfs.git 4/9: asm/param.h pile Al Viro
2025-07-28 23:41 ` pr-tracker-bot
2025-07-26 8:05 ` [git pull][6.17] vfs.git 5/9: securityfs Al Viro
2025-07-28 23:41 ` pr-tracker-bot
2025-07-26 8:05 ` [git pull][6.17] vfs.git 6/9: misc pile Al Viro
2025-07-28 23:41 ` pr-tracker-bot
2025-07-26 8:08 ` [git pull][6.17] vfs.git 7/9: ceph d_name fixes Al Viro
2025-07-28 23:41 ` pr-tracker-bot
2025-07-26 8:08 ` [git pull][6.17] vfs.git 8/9: CLASS(fd) followup Al Viro
2025-07-28 23:41 ` pr-tracker-bot
2025-07-26 8:09 ` Al Viro [this message]
2025-07-28 23:41 ` [git pull][6.17] vfs.git 9/9: mount pile pr-tracker-bot
2025-07-28 23:41 ` [git pull][6.17] vfs.git 1/9: d_flags pile pr-tracker-bot
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=20250726080942.GH1456602@ZenIV \
--to=viro@zeniv.linux.org.uk \
--cc=brauner@kernel.org \
--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 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.