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
>
next prev parent 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