Linux filesystem development
 help / color / mirror / Atom feed
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

  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox