]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
attach_recursive_mnt(): remove from expiry list on move
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 1 May 2025 23:59:30 +0000 (19:59 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 29 Jun 2025 22:13:42 +0000 (18:13 -0400)
... 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 <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namespace.c

index 7c7cc14da1ee2d110f8dbe4fcbb185fb26fd6698..e8dc8af87548d720757a345017c45bdfd62dab93 100644 (file)
@@ -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) {