public inbox for linux-fsdevel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Lai, Yi" <yi1.lai@linux.intel.com>
To: Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org, brauner@kernel.org,
	yi1.lai@intel.com, ebiederm@xmission.com, jack@suse.cz,
	torvalds@linux-foundation.org
Subject: Re: [PATCH v3 44/48] copy_tree(): don't link the mounts via mnt_list
Date: Wed, 13 Aug 2025 14:45:25 +0800	[thread overview]
Message-ID: <aJw0hU0u9smq8aHq@ly-workstation> (raw)
In-Reply-To: <20250630025255.1387419-44-viro@zeniv.linux.org.uk>

Hi Al Viro,

Greetings!

I used Syzkaller and found that there is BUG: soft lockup in attach_recursive_mnt in linux-next next-20250812.

After bisection and the first bad commit is:
"
663206854f02 copy_tree(): don't link the mounts via mnt_list
"

All detailed into can be found at:
https://github.com/laifryiee/syzkaller_logs/tree/main/250813_093835_attach_recursive_mnt
Syzkaller repro code:
https://github.com/laifryiee/syzkaller_logs/tree/main/250813_093835_attach_recursive_mnt/repro.c
Kconfig(make olddefconfig):
https://github.com/laifryiee/syzkaller_logs/tree/main/250813_093835_attach_recursive_mnt/kconfig_origin
Bisect info:
https://github.com/laifryiee/syzkaller_logs/tree/main/250813_093835_attach_recursive_mnt/bisect_info.log
bzImage:
https://github.com/laifryiee/syzkaller_logs/raw/refs/heads/main/250813_093835_attach_recursive_mnt/bzImage_next-20250812
Issue dmesg:
https://github.com/laifryiee/syzkaller_logs/blob/main/250813_093835_attach_recursive_mnt/next-20250812_dmesg.log

"
[   48.594242] watchdog: BUG: soft lockup - CPU#0 stuck for 21s! [repro:724]
[   48.594264] Modules linked in:
[   48.594270] irq event stamp: 442328
[   48.594273] hardirqs last  enabled at (442327): [<ffffffff85da4465>] _raw_spin_unlock_irqrestore+0x35/0x70
[   48.594297] hardirqs last disabled at (442328): [<ffffffff85d749a4>] sysvec_apic_timer_interrupt+0x14/0xd0
[   48.594311] softirqs last  enabled at (442262): [<ffffffff814814ee>] __irq_exit_rcu+0x10e/0x170
[   48.594336] softirqs last disabled at (442257): [<ffffffff814814ee>] __irq_exit_rcu+0x10e/0x170
[   48.594354] CPU: 0 UID: 0 PID: 724 Comm: repro Tainted: G        W           6.17.0-rc1-next-20250812-next-2025081 #1 P
[   48.594367] Tainted: [W]=WARN
[   48.594370] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 044
[   48.594376] RIP: 0010:attach_recursive_mnt+0xf9a/0x1990
[   48.594394] Code: c1 e8 03 80 3c 18 00 0f 85 07 06 00 00 49 8d 7f 10 4d 8b 6f 70 48 89 f8 48 c1 e8 03 80 3c 18 00 0f 855
[   48.594402] RSP: 0018:ff1100001282fbb0 EFLAGS: 00000246
[   48.594409] RAX: 1fe220000537eea2 RBX: dffffc0000000000 RCX: ffffffff820f5a86
[   48.594414] RDX: ff11000014570000 RSI: ffffffff820f5ad8 RDI: ff11000029bf7510
[   48.594419] RBP: ff1100001282fcd0 R08: 0000000000000001 R09: 0000000000000001
[   48.594424] R10: ff11000010902200 R11: ff11000014570e58 R12: ff11000029017c00
[   48.594429] R13: ff11000026b98220 R14: ff110000290b4070 R15: ff11000026b981c0
[   48.594435] FS:  00007f5edc748800(0000) GS:ff110000e3940000(0000) knlGS:0000000000000000
[   48.594441] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   48.594445] CR2: 00007f5edc7491a8 CR3: 000000002110e001 CR4: 0000000000771ef0
[   48.594454] PKRU: 55555554
[   48.594456] Call Trace:
[   48.594460]  <TASK>
[   48.594474]  ? __pfx_attach_recursive_mnt+0x10/0x10
[   48.594488]  ? do_raw_spin_unlock+0x15c/0x210
[   48.594501]  ? _raw_spin_unlock+0x31/0x60
[   48.594511]  ? __sanitizer_cov_trace_const_cmp4+0x1a/0x20
[   48.594526]  ? clone_mnt+0x755/0xbd0
[   48.594541]  graft_tree+0x190/0x220
[   48.594552]  ? graft_tree+0x190/0x220
[   48.594566]  path_mount+0x1b0a/0x1f70
[   48.594578]  ? lockdep_hardirqs_on+0x89/0x110
[   48.594590]  ? trace_hardirqs_on+0x51/0x60
[   48.594607]  ? __pfx_path_mount+0x10/0x10
[   48.594618]  ? __kasan_slab_free+0x4f/0x60
[   48.594631]  ? kmem_cache_free+0x2ea/0x520
[   48.594643]  ? putname.part.0+0x132/0x180
[   48.594657]  ? putname.part.0+0x137/0x180
[   48.594669]  __x64_sys_mount+0x2a6/0x330
[   48.594680]  ? __x64_sys_mount+0x2a6/0x330
[   48.594694]  ? __pfx___x64_sys_mount+0x10/0x10
[   48.594713]  x64_sys_call+0x2127/0x2180
[   48.594722]  do_syscall_64+0x6d/0x2e0
[   48.594736]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[   48.594744] RIP: 0033:0x7f5edc43ee5d
[   48.594755] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 898
[   48.594762] RSP: 002b:00007ffd1a883988 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5
[   48.594768] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f5edc43ee5d
[   48.594773] RDX: 0000000000000000 RSI: 0000000020000080 RDI: 0000000020000040
[   48.594778] RBP: 00007ffd1a883aa0 R08: 0000000000000000 R09: 0000000000000000
[   48.594782] R10: 0000000000001400 R11: 0000000000000246 R12: 00007ffd1a883bf8
[   48.594787] R13: 00000000004043b3 R14: 0000000000406e08 R15: 00007f5edc795000
[   48.594803]  </TASK>
[   48.594808] Kernel panic - not syncing: softlockup: hung tasks
[   48.615257] CPU: 0 UID: 0 PID: 724 Comm: repro Tainted: G        W    L      6.17.0-rc1-next-20250812-next-2025081 #1 P
[   48.616012] Tainted: [W]=WARN, [L]=SOFTLOCKUP
[   48.616285] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 044
[   48.616983] Call Trace:
[   48.617160]  <IRQ>
[   48.617299]  dump_stack_lvl+0x42/0x150
[   48.617544]  dump_stack+0x19/0x20
[   48.617762]  vpanic+0x6dd/0x770
[   48.617987]  ? __pfx_vpanic+0x10/0x10
[   48.618229]  ? show_trace_log_lvl+0x2c1/0x3c0
[   48.618512]  panic+0xc7/0xd0
[   48.618711]  ? __pfx_panic+0x10/0x10
[   48.618952]  ? watchdog_timer_fn+0x5a0/0x6c0
[   48.619242]  ? watchdog_timer_fn+0x593/0x6c0
[   48.619519]  watchdog_timer_fn+0x5b1/0x6c0
[   48.619779]  ? __pfx_watchdog_timer_fn+0x10/0x10
[   48.620088]  __hrtimer_run_queues+0x6aa/0xb70
[   48.620379]  ? __pfx___hrtimer_run_queues+0x10/0x10
[   48.620696]  hrtimer_interrupt+0x397/0x870
[   48.620979]  __sysvec_apic_timer_interrupt+0x108/0x3b0
[   48.621330]  sysvec_apic_timer_interrupt+0xaf/0xd0
[   48.621631]  </IRQ>
[   48.621773]  <TASK>
[   48.621915]  asm_sysvec_apic_timer_interrupt+0x1f/0x30
[   48.622253] RIP: 0010:attach_recursive_mnt+0xf9a/0x1990
[   48.622584] Code: c1 e8 03 80 3c 18 00 0f 85 07 06 00 00 49 8d 7f 10 4d 8b 6f 70 48 89 f8 48 c1 e8 03 80 3c 18 00 0f 855
[   48.623711] RSP: 0018:ff1100001282fbb0 EFLAGS: 00000246
[   48.624042] RAX: 1fe220000537eea2 RBX: dffffc0000000000 RCX: ffffffff820f5a86
[   48.624480] RDX: ff11000014570000 RSI: ffffffff820f5ad8 RDI: ff11000029bf7510
[   48.624912] RBP: ff1100001282fcd0 R08: 0000000000000001 R09: 0000000000000001
[   48.625356] R10: ff11000010902200 R11: ff11000014570e58 R12: ff11000029017c00
[   48.625792] R13: ff11000026b98220 R14: ff110000290b4070 R15: ff11000026b981c0
[   48.626262]  ? attach_recursive_mnt+0xf16/0x1990
[   48.626559]  ? attach_recursive_mnt+0xf68/0x1990
[   48.626863]  ? __pfx_attach_recursive_mnt+0x10/0x10
[   48.627188]  ? do_raw_spin_unlock+0x15c/0x210
[   48.627465]  ? _raw_spin_unlock+0x31/0x60
[   48.627724]  ? __sanitizer_cov_trace_const_cmp4+0x1a/0x20
[   48.628076]  ? clone_mnt+0x755/0xbd0
[   48.628313]  graft_tree+0x190/0x220
[   48.628539]  ? graft_tree+0x190/0x220
[   48.628783]  path_mount+0x1b0a/0x1f70
[   48.629034]  ? lockdep_hardirqs_on+0x89/0x110
[   48.629313]  ? trace_hardirqs_on+0x51/0x60
[   48.629579]  ? __pfx_path_mount+0x10/0x10
[   48.629837]  ? __kasan_slab_free+0x4f/0x60
[   48.630121]  ? kmem_cache_free+0x2ea/0x520
[   48.630384]  ? putname.part.0+0x132/0x180
[   48.630644]  ? putname.part.0+0x137/0x180
[   48.630901]  __x64_sys_mount+0x2a6/0x330
[   48.631186]  ? __x64_sys_mount+0x2a6/0x330
[   48.631452]  ? __pfx___x64_sys_mount+0x10/0x10
[   48.631744]  x64_sys_call+0x2127/0x2180
[   48.632000]  do_syscall_64+0x6d/0x2e0
[   48.632239]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[   48.632555] RIP: 0033:0x7f5edc43ee5d
[   48.632787] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 898
[   48.633901] RSP: 002b:00007ffd1a883988 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5
[   48.634375] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f5edc43ee5d
[   48.634812] RDX: 0000000000000000 RSI: 0000000020000080 RDI: 0000000020000040
[   48.635282] RBP: 00007ffd1a883aa0 R08: 0000000000000000 R09: 0000000000000000
[   48.635711] R10: 0000000000001400 R11: 0000000000000246 R12: 00007ffd1a883bf8
[   48.636154] R13: 00000000004043b3 R14: 0000000000406e08 R15: 00007f5edc795000
[   48.636600]  </TASK>
[   48.636838] Kernel Offset: disabled
[   48.637081] ---[ end Kernel panic - not syncing: softlockup: hung tasks ]---
"

Hope this cound be insightful to you.

Regards,
Yi Lai

---

If you don't need the following environment to reproduce the problem or if you
already have one reproduced environment, please ignore the following information.

How to reproduce:
git clone https://gitlab.com/xupengfe/repro_vm_env.git
cd repro_vm_env
tar -xvf repro_vm_env.tar.gz
cd repro_vm_env; ./start3.sh  // it needs qemu-system-x86_64 and I used v7.1.0
  // start3.sh will load bzImage_2241ab53cbb5cdb08a6b2d4688feb13971058f65 v6.2-rc5 kernel
  // You could change the bzImage_xxx as you want
  // Maybe you need to remove line "-drive if=pflash,format=raw,readonly=on,file=./OVMF_CODE.fd \" for different qemu version
You could use below command to log in, there is no password for root.
ssh -p 10023 root@localhost

After login vm(virtual machine) successfully, you could transfer reproduced
binary to the vm by below way, and reproduce the problem in vm:
gcc -pthread -o repro repro.c
scp -P 10023 repro root@localhost:/root/

Get the bzImage for target kernel:
Please use target kconfig and copy it to kernel_src/.config
make olddefconfig
make -jx bzImage           //x should equal or less than cpu num your pc has

Fill the bzImage file into above start3.sh to load the target kernel in vm.


Tips:
If you already have qemu-system-x86_64, please ignore below info.
If you want to install qemu v7.1.0 version:
git clone https://github.com/qemu/qemu.git
cd qemu
git checkout -f v7.1.0
mkdir build
cd build
yum install -y ninja-build.x86_64
yum -y install libslirp-devel.x86_64
../configure --target-list=x86_64-softmmu --enable-kvm --enable-vnc --enable-gtk --enable-sdl --enable-usb-redir --enable-slirp
make
make install
 
On Mon, Jun 30, 2025 at 03:52:51AM +0100, Al Viro wrote:
> The only place that really needs to be adjusted is commit_tree() -
> there we need to iterate through the copy and we might as well
> use next_mnt() for that.  However, in case when our tree has been
> slid under something already mounted (propagation to a mountpoint
> that already has something mounted on it or a 'beneath' move_mount)
> we need to take care not to walk into the overmounting tree.
> 
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
> ---
>  fs/mount.h     |  3 +--
>  fs/namespace.c | 60 ++++++++++++++++++++------------------------------
>  fs/pnode.c     |  3 ++-
>  3 files changed, 27 insertions(+), 39 deletions(-)
> 
> diff --git a/fs/mount.h b/fs/mount.h
> index 08583428b10b..97737051a8b9 100644
> --- a/fs/mount.h
> +++ b/fs/mount.h
> @@ -193,7 +193,7 @@ static inline bool mnt_ns_empty(const struct mnt_namespace *ns)
>  	return RB_EMPTY_ROOT(&ns->mounts);
>  }
>  
> -static inline void move_from_ns(struct mount *mnt, struct list_head *dt_list)
> +static inline void move_from_ns(struct mount *mnt)
>  {
>  	struct mnt_namespace *ns = mnt->mnt_ns;
>  	WARN_ON(!mnt_ns_attached(mnt));
> @@ -203,7 +203,6 @@ static inline void move_from_ns(struct mount *mnt, struct list_head *dt_list)
>  		ns->mnt_first_node = rb_next(&mnt->mnt_node);
>  	rb_erase(&mnt->mnt_node, &ns->mounts);
>  	RB_CLEAR_NODE(&mnt->mnt_node);
> -	list_add_tail(&mnt->mnt_list, dt_list);
>  }
>  
>  bool has_locked_children(struct mount *mnt, struct dentry *dentry);
> diff --git a/fs/namespace.c b/fs/namespace.c
> index 38a46b32413d..bd6c7da901fc 100644
> --- a/fs/namespace.c
> +++ b/fs/namespace.c
> @@ -1161,34 +1161,6 @@ static void mnt_add_to_ns(struct mnt_namespace *ns, struct mount *mnt)
>  	mnt_notify_add(mnt);
>  }
>  
> -/*
> - * vfsmount lock must be held for write
> - */
> -static void commit_tree(struct mount *mnt)
> -{
> -	struct mount *parent = mnt->mnt_parent;
> -	struct mount *m;
> -	LIST_HEAD(head);
> -	struct mnt_namespace *n = parent->mnt_ns;
> -
> -	BUG_ON(parent == mnt);
> -
> -	if (!mnt_ns_attached(mnt)) {
> -		list_add_tail(&head, &mnt->mnt_list);
> -		while (!list_empty(&head)) {
> -			m = list_first_entry(&head, typeof(*m), mnt_list);
> -			list_del(&m->mnt_list);
> -
> -			mnt_add_to_ns(n, m);
> -		}
> -		n->nr_mounts += n->pending_mounts;
> -		n->pending_mounts = 0;
> -	}
> -
> -	make_visible(mnt);
> -	touch_mnt_namespace(n);
> -}
> -
>  static struct mount *next_mnt(struct mount *p, struct mount *root)
>  {
>  	struct list_head *next = p->mnt_mounts.next;
> @@ -1215,6 +1187,27 @@ static struct mount *skip_mnt_tree(struct mount *p)
>  	return p;
>  }
>  
> +/*
> + * vfsmount lock must be held for write
> + */
> +static void commit_tree(struct mount *mnt)
> +{
> +	struct mnt_namespace *n = mnt->mnt_parent->mnt_ns;
> +
> +	if (!mnt_ns_attached(mnt)) {
> +		for (struct mount *m = mnt; m; m = next_mnt(m, mnt))
> +			if (unlikely(mnt_ns_attached(m)))
> +				m = skip_mnt_tree(m);
> +			else
> +				mnt_add_to_ns(n, m);
> +		n->nr_mounts += n->pending_mounts;
> +		n->pending_mounts = 0;
> +	}
> +
> +	make_visible(mnt);
> +	touch_mnt_namespace(n);
> +}
> +
>  /**
>   * vfs_create_mount - Create a mount for a configured superblock
>   * @fc: The configuration context with the superblock attached
> @@ -1831,9 +1824,8 @@ static void umount_tree(struct mount *mnt, enum umount_tree_flags how)
>  	for (p = mnt; p; p = next_mnt(p, mnt)) {
>  		p->mnt.mnt_flags |= MNT_UMOUNT;
>  		if (mnt_ns_attached(p))
> -			move_from_ns(p, &tmp_list);
> -		else
> -			list_move(&p->mnt_list, &tmp_list);
> +			move_from_ns(p);
> +		list_add_tail(&p->mnt_list, &tmp_list);
>  	}
>  
>  	/* Hide the mounts from mnt_mounts */
> @@ -2270,7 +2262,6 @@ struct mount *copy_tree(struct mount *src_root, struct dentry *dentry,
>  					list_add(&dst_mnt->mnt_expire,
>  						 &src_mnt->mnt_expire);
>  			}
> -			list_add_tail(&dst_mnt->mnt_list, &res->mnt_list);
>  			attach_mnt(dst_mnt, dst_parent, src_parent->mnt_mp);
>  			unlock_mount_hash();
>  		}
> @@ -2686,12 +2677,9 @@ static int attach_recursive_mnt(struct mount *source_mnt,
>  		list_del_init(&source_mnt->mnt_expire);
>  	} else {
>  		if (source_mnt->mnt_ns) {
> -			LIST_HEAD(head);
> -
>  			/* move from anon - the caller will destroy */
>  			for (p = source_mnt; p; p = next_mnt(p, source_mnt))
> -				move_from_ns(p, &head);
> -			list_del_init(&head);
> +				move_from_ns(p);
>  		}
>  	}
>  
> diff --git a/fs/pnode.c b/fs/pnode.c
> index cbf5f5746252..81f7599bdac4 100644
> --- a/fs/pnode.c
> +++ b/fs/pnode.c
> @@ -449,7 +449,8 @@ static void umount_one(struct mount *m, struct list_head *to_umount)
>  {
>  	m->mnt.mnt_flags |= MNT_UMOUNT;
>  	list_del_init(&m->mnt_child);
> -	move_from_ns(m, to_umount);
> +	move_from_ns(m);
> +	list_add_tail(&m->mnt_list, to_umount);
>  }
>  
>  static void remove_from_candidate_list(struct mount *m)
> -- 
> 2.39.5
> 

  reply	other threads:[~2025-08-13  6:45 UTC|newest]

Thread overview: 175+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-10  8:17 [PATCHES][RFC][CFR] mount-related stuff Al Viro
2025-06-10  8:21 ` [PATCH 01/26] copy_tree(): don't set ->mnt_mountpoint on the root of copy Al Viro
2025-06-10  8:21   ` [PATCH 02/26] constify mnt_has_parent() Al Viro
2025-06-11 10:26     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 03/26] pnode: lift peers() into pnode.h Al Viro
2025-06-11 10:29     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 04/26] new predicate: mount_is_ancestor() Al Viro
2025-06-11 10:32     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 05/26] constify is_local_mountpoint() Al Viro
2025-06-11 10:32     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 06/26] new predicate: anon_ns_root(mount) Al Viro
2025-06-11 10:39     ` Christian Brauner
2025-06-11 17:57       ` Al Viro
2025-06-10  8:21   ` [PATCH 07/26] dissolve_on_fput(): use anon_ns_root() Al Viro
2025-06-11 10:41     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 08/26] don't set MNT_LOCKED on parentless mounts Al Viro
2025-06-11 10:49     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 09/26] clone_mnt(): simplify the propagation-related logics Al Viro
2025-06-11 10:53     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 10/26] do_umount(): simplify the "is it still mounted" checks Al Viro
2025-06-11 10:54     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 11/26] sanitize handling of long-term internal mounts Al Viro
2025-06-11 10:56     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 12/26] Rewrite of propagate_umount() Al Viro
2025-06-11 10:56     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 13/26] attach_mnt(): expand in attach_recursive_mnt(), then lose the flag argument Al Viro
2025-06-11 10:59     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 14/26] do_move_mount(): take dropping the old mountpoint into attach_recursive_mnt() Al Viro
2025-06-11 10:59     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 15/26] get rid of mnt_set_mountpoint_beneath() Al Viro
2025-06-11 11:01     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 16/26] make commit_tree() usable in same-namespace move case Al Viro
2025-06-11 11:03     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 17/26] attach_recursive_mnt(): unify the mnt_change_mountpoint() logics Al Viro
2025-06-11 11:05     ` Christian Brauner
2025-06-11 18:12       ` Al Viro
2025-06-12 12:08         ` Christian Brauner
2025-06-10  8:21   ` [PATCH 18/26] attach_recursive_mnt(): pass destination mount in all cases Al Viro
2025-06-11 11:07     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 19/26] attach_recursive_mnt(): get rid of flags entirely Al Viro
2025-06-11 11:08     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 20/26] do_move_mount(): get rid of 'attached' flag Al Viro
2025-06-11 11:08     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 21/26] attach_recursive_mnt(): remove from expiry list on move Al Viro
2025-06-11 11:09     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 22/26] take ->mnt_expire handling under mount_lock [read_seqlock_excl] Al Viro
2025-06-11 11:11     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 23/26] pivot_root(): reorder tree surgeries, collapse unhash_mnt() and put_mountpoint() Al Viro
2025-06-11 11:11     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 24/26] combine __put_mountpoint() with unhash_mnt() Al Viro
2025-06-11 11:12     ` Christian Brauner
2025-06-10  8:21   ` [PATCH 25/26] get rid of mountpoint->m_count Al Viro
2025-06-11 11:19     ` Christian Brauner
2025-06-11 18:47       ` Al Viro
2025-06-16 20:38         ` Al Viro
2025-06-16 21:52           ` Linus Torvalds
2025-06-10  8:21   ` [PATCH 26/26] don't have mounts pin their parents Al Viro
2025-06-11 11:22     ` Christian Brauner
2025-06-16  2:50     ` Ian Kent
2025-06-10 22:30   ` [PATCH 01/26] copy_tree(): don't set ->mnt_mountpoint on the root of copy Eric W. Biederman
2025-06-10 23:14     ` Al Viro
2025-06-11 10:31 ` [PATCHES][RFC][CFR] mount-related stuff Christian Brauner
2025-06-11 17:51   ` Al Viro
2025-06-12 12:09     ` Christian Brauner
2025-06-23  4:49 ` [PATCHES v2][RFC][CFR] " Al Viro
2025-06-23  4:53   ` [PATCH v2 01/35] replace collect_mounts()/drop_collected_mounts() with a safer variant Al Viro
2025-06-23  4:53     ` [PATCH v2 02/35] attach_recursive_mnt(): do not lock the covering tree when sliding something under it Al Viro
2025-06-23  4:53     ` [PATCH v2 03/35] attach_mnt(): expand in attach_recursive_mnt(), then lose the flag argument Al Viro
2025-06-23  4:53     ` [PATCH v2 04/35] get rid of mnt_set_mountpoint_beneath() Al Viro
2025-06-23  4:53     ` [PATCH v2 05/35] prevent mount hash conflicts Al Viro
2025-06-23  4:53     ` [PATCH v2 06/35] copy_tree(): don't set ->mnt_mountpoint on the root of copy Al Viro
2025-06-23  4:54     ` [PATCH v2 07/35] constify mnt_has_parent() Al Viro
2025-06-23  4:54     ` [PATCH v2 08/35] pnode: lift peers() into pnode.h Al Viro
2025-06-23  4:54     ` [PATCH v2 09/35] new predicate: mount_is_ancestor() Al Viro
2025-06-23  4:54     ` [PATCH v2 10/35] constify is_local_mountpoint() Al Viro
2025-06-23  4:54     ` [PATCH v2 11/35] new predicate: anon_ns_root(mount) Al Viro
2025-06-23  4:54     ` [PATCH v2 12/35] dissolve_on_fput(): use anon_ns_root() Al Viro
2025-06-23  4:54     ` [PATCH v2 13/35] __attach_mnt(): lose the second argument Al Viro
2025-06-23  4:54     ` [PATCH v2 14/35] don't set MNT_LOCKED on parentless mounts Al Viro
2025-06-23  4:54     ` [PATCH v2 15/35] clone_mnt(): simplify the propagation-related logics Al Viro
2025-06-23  4:54     ` [PATCH v2 16/35] do_umount(): simplify the "is it still mounted" checks Al Viro
2025-06-23  4:54     ` [PATCH v2 17/35] sanitize handling of long-term internal mounts Al Viro
2025-06-23 16:18       ` Linus Torvalds
2025-06-23 17:03         ` Al Viro
2025-06-23 18:21           ` Linus Torvalds
2025-06-28  7:58           ` [RFC] vfs_parse_fs_string() calling conventions change (was Re: [PATCH v2 17/35] sanitize handling of long-term internal mounts) Al Viro
2025-06-28 16:28             ` Al Viro
2025-06-29 17:47               ` Al Viro
2025-06-28 17:41             ` Linus Torvalds
2025-06-30 15:19             ` David Howells
2025-06-30 16:55               ` Al Viro
2025-06-30 17:04                 ` Linus Torvalds
2025-06-23  4:54     ` [PATCH v2 18/35] Rewrite of propagate_umount() Al Viro
2025-06-23  4:54     ` [PATCH v2 19/35] make commit_tree() usable in same-namespace move case Al Viro
2025-06-23  4:54     ` [PATCH v2 20/35] attach_recursive_mnt(): unify the mnt_change_mountpoint() logics Al Viro
2025-06-23  4:54     ` [PATCH v2 21/35] attach_recursive_mnt(): pass destination mount in all cases Al Viro
2025-06-23  4:54     ` [PATCH v2 22/35] attach_recursive_mnt(): get rid of flags entirely Al Viro
2025-06-23  4:54     ` [PATCH v2 23/35] do_move_mount(): take dropping the old mountpoint into attach_recursive_mnt() Al Viro
2025-06-23  4:54     ` [PATCH v2 24/35] do_move_mount(): get rid of 'attached' flag Al Viro
2025-06-23  4:54     ` [PATCH v2 25/35] attach_recursive_mnt(): remove from expiry list on move Al Viro
2025-06-23  4:54     ` [PATCH v2 26/35] take ->mnt_expire handling under mount_lock [read_seqlock_excl] Al Viro
2025-06-23  4:54     ` [PATCH v2 27/35] pivot_root(): reorder tree surgeries, collapse unhash_mnt() and put_mountpoint() Al Viro
2025-06-23  4:54     ` [PATCH v2 28/35] combine __put_mountpoint() with unhash_mnt() Al Viro
2025-06-23  4:54     ` [PATCH v2 29/35] get rid of mountpoint->m_count Al Viro
2025-06-23  4:54     ` [PATCH v2 30/35] don't have mounts pin their parents Al Viro
2025-06-23  4:54     ` [PATCH v2 31/35] copy_tree(): don't link the mounts via mnt_list Al Viro
2025-06-23  4:54     ` [PATCH v2 32/35] mount: separate the flags accessed only under namespace_sem Al Viro
2025-06-23  4:54     ` [PATCH v2 33/35] propagate_one(): get rid of dest_master Al Viro
2025-06-23  4:54     ` [PATCH v2 34/35] propagate_mnt(): get rid of globals Al Viro
2025-06-23  4:54     ` [PATCH v2 35/35] take freeing of emptied mnt_namespace to namespace_unlock() Al Viro
2025-06-23 15:10     ` [PATCH v2 01/35] replace collect_mounts()/drop_collected_mounts() with a safer variant Al Viro
2025-06-23  9:06   ` [PATCHES v2][RFC][CFR] mount-related stuff Ian Kent
2025-06-23 18:55     ` Al Viro
2025-06-24  6:48       ` Ian Kent
2025-06-24  7:05         ` Al Viro
2025-06-24 11:03           ` Ian Kent
2025-06-25  7:57         ` Al Viro
2025-06-25 10:58           ` Ian Kent
2025-06-27  3:03             ` Ian Kent
2025-06-30  2:51   ` [PATCHES v3][RFC][CFR] " Al Viro
2025-06-30  2:52     ` [PATCH v3 01/48] attach_mnt(): expand in attach_recursive_mnt(), then lose the flag argument Al Viro
2025-06-30  2:52       ` [PATCH v3 02/48] get rid of mnt_set_mountpoint_beneath() Al Viro
2025-06-30  2:52       ` [PATCH v3 03/48] prevent mount hash conflicts Al Viro
2025-06-30  2:52       ` [PATCH v3 04/48] copy_tree(): don't set ->mnt_mountpoint on the root of copy Al Viro
2025-06-30  2:52       ` [PATCH v3 05/48] constify mnt_has_parent() Al Viro
2025-06-30  2:52       ` [PATCH v3 06/48] pnode: lift peers() into pnode.h Al Viro
2025-06-30  2:52       ` [PATCH v3 07/48] new predicate: mount_is_ancestor() Al Viro
2025-06-30  2:52       ` [PATCH v3 08/48] constify is_local_mountpoint() Al Viro
2025-06-30  2:52       ` [PATCH v3 09/48] new predicate: anon_ns_root(mount) Al Viro
2025-06-30  2:52       ` [PATCH v3 10/48] dissolve_on_fput(): use anon_ns_root() Al Viro
2025-06-30  2:52       ` [PATCH v3 11/48] __attach_mnt(): lose the second argument Al Viro
2025-06-30  2:52       ` [PATCH v3 12/48] don't set MNT_LOCKED on parentless mounts Al Viro
2025-06-30  2:52       ` [PATCH v3 13/48] clone_mnt(): simplify the propagation-related logics Al Viro
2025-06-30  2:52       ` [PATCH v3 14/48] do_umount(): simplify the "is it still mounted" checks Al Viro
2025-06-30  2:52       ` [PATCH v3 15/48] sanitize handling of long-term internal mounts Al Viro
2025-06-30  2:52       ` [PATCH v3 16/48] Rewrite of propagate_umount() Al Viro
2025-06-30  2:52       ` [PATCH v3 17/48] make commit_tree() usable in same-namespace move case Al Viro
2025-06-30  2:52       ` [PATCH v3 18/48] attach_recursive_mnt(): unify the mnt_change_mountpoint() logics Al Viro
2025-06-30  2:52       ` [PATCH v3 19/48] attach_recursive_mnt(): pass destination mount in all cases Al Viro
2025-06-30  2:52       ` [PATCH v3 20/48] attach_recursive_mnt(): get rid of flags entirely Al Viro
2025-06-30  2:52       ` [PATCH v3 21/48] do_move_mount(): take dropping the old mountpoint into attach_recursive_mnt() Al Viro
2025-06-30  2:52       ` [PATCH v3 22/48] do_move_mount(): get rid of 'attached' flag Al Viro
2025-06-30  2:52       ` [PATCH v3 23/48] attach_recursive_mnt(): remove from expiry list on move Al Viro
2025-06-30  2:52       ` [PATCH v3 24/48] take ->mnt_expire handling under mount_lock [read_seqlock_excl] Al Viro
2025-06-30  2:52       ` [PATCH v3 25/48] pivot_root(): reorder tree surgeries, collapse unhash_mnt() and put_mountpoint() Al Viro
2025-06-30  2:52       ` [PATCH v3 26/48] combine __put_mountpoint() with unhash_mnt() Al Viro
2025-06-30  2:52       ` [PATCH v3 27/48] get rid of mountpoint->m_count Al Viro
2025-06-30  2:52       ` [PATCH v3 28/48] don't have mounts pin their parents Al Viro
2025-06-30  2:52       ` [PATCH v3 29/48] mount: separate the flags accessed only under namespace_sem Al Viro
2025-06-30  2:52       ` [PATCH v3 30/48] propagate_one(): get rid of dest_master Al Viro
2025-06-30  2:52       ` [PATCH v3 31/48] propagate_mnt(): handle all peer groups in the same loop Al Viro
2025-06-30  2:52       ` [PATCH v3 32/48] propagate_one(): separate the "do we need secondary here?" logics Al Viro
2025-06-30  2:52       ` [PATCH v3 33/48] propagate_one(): separate the "what should be the master for this copy" part Al Viro
2025-06-30  2:52       ` [PATCH v3 34/48] propagate_one(): fold into the sole caller Al Viro
2025-06-30  2:52       ` [PATCH v3 35/48] fs/pnode.c: get rid of globals Al Viro
2025-06-30  2:52       ` [PATCH v3 36/48] propagate_mnt(): get rid of last_dest Al Viro
2025-06-30  2:52       ` [PATCH v3 37/48] propagate_mnt(): fix comment and convert to kernel-doc, while we are at it Al Viro
2025-06-30  2:52       ` [PATCH v3 38/48] change_mnt_propagation() cleanups, step 1 Al Viro
2025-06-30  2:52       ` [PATCH v3 39/48] change_mnt_propagation(): do_make_slave() is a no-op unless IS_MNT_SHARED() Al Viro
2025-06-30  2:52       ` [PATCH v3 40/48] do_make_slave(): choose new master sanely Al Viro
2025-06-30  2:52       ` [PATCH v3 41/48] turn do_make_slave() into transfer_propagation() Al Viro
2025-06-30  2:52       ` [PATCH v3 42/48] mnt_slave_list/mnt_slave: turn into hlist_head/hlist_node Al Viro
2025-06-30  2:52       ` [PATCH v3 43/48] change_mnt_propagation(): move ->mnt_master assignment into MS_SLAVE case Al Viro
2025-06-30  2:52       ` [PATCH v3 44/48] copy_tree(): don't link the mounts via mnt_list Al Viro
2025-08-13  6:45         ` Lai, Yi [this message]
2025-08-13  7:13           ` Al Viro
2025-08-13  7:32             ` Al Viro
2025-08-14 23:21               ` Al Viro
2025-08-14 23:25                 ` Al Viro
2025-08-15  3:19                 ` Lai, Yi
2025-06-30  2:52       ` [PATCH v3 45/48] take freeing of emptied mnt_namespace to namespace_unlock() Al Viro
2025-06-30  2:52       ` [PATCH v3 46/48] get rid of CL_SHARE_TO_SLAVE Al Viro
2025-06-30  2:52       ` [PATCH v3 47/48] invent_group_ids(): zero ->mnt_group_id always implies !IS_MNT_SHARED() Al Viro
2025-06-30  2:52       ` [PATCH v3 48/48] statmount_mnt_basic(): simplify the logics for group id Al Viro
2025-07-02 19:29     ` [PATCHES v3][RFC][CFR] mount-related stuff 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=aJw0hU0u9smq8aHq@ly-workstation \
    --to=yi1.lai@linux.intel.com \
    --cc=brauner@kernel.org \
    --cc=ebiederm@xmission.com \
    --cc=jack@suse.cz \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@zeniv.linux.org.uk \
    --cc=yi1.lai@intel.com \
    /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