From: Al Viro Date: Thu, 1 May 2025 23:59:30 +0000 (-0400) Subject: attach_recursive_mnt(): remove from expiry list on move X-Git-Tag: block-6.17-20250808~63^2~25 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=a8c764e1a580c2128e905ad6e42beef413fb7177;p=linux-block.git 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 --- diff --git a/fs/namespace.c b/fs/namespace.c index 7c7cc14da1ee..e8dc8af87548 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) {