From a8c764e1a580c2128e905ad6e42beef413fb7177 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Thu, 1 May 2025 19:59:30 -0400 Subject: [PATCH] attach_recursive_mnt(): remove from expiry list on move ... rather than doing that in do_move_mount(). That's the main obstacle to moving the protection of ->mnt_expire from namespace_sem to mount_lock (spinlock-only), which would simplify several failure exits. Reviewed-by: Christian Brauner Signed-off-by: Al Viro --- fs/namespace.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/fs/namespace.c b/fs/namespace.c index 7c7cc14da1ee2..e8dc8af87548d 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -2684,6 +2684,9 @@ static int attach_recursive_mnt(struct mount *source_mnt, if (moving) { umount_mnt(source_mnt); mnt_notify_add(source_mnt); + /* if the mount is moved, it should no longer be expired + * automatically */ + list_del_init(&source_mnt->mnt_expire); } else { if (source_mnt->mnt_ns) { LIST_HEAD(head); @@ -3674,12 +3677,6 @@ static int do_move_mount(struct path *old_path, goto out; err = attach_recursive_mnt(old, p, mp); - if (err) - goto out; - - /* if the mount is moved, it should no longer be expire - * automatically */ - list_del_init(&old->mnt_expire); out: unlock_mount(mp); if (!err) { -- 2.47.2