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 <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro 2025-05-01 19:59:30 -04:00
parent ee1ee33ccc
commit a8c764e1a5

View 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) {