]> www.infradead.org Git - users/hch/misc.git/commitdiff
copy_mnt_ns(): use the regular mechanism for freeing empty mnt_ns on failure
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 26 Aug 2025 21:04:44 +0000 (17:04 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 17 Sep 2025 19:58:28 +0000 (15:58 -0400)
Now that free_mnt_ns() works prior to mnt_ns_tree_add(), there's no need for
an open-coded analogue free_mnt_ns() there - yes, we do avoid one call_rcu()
use per failing call of clone() or unshare(), if they fail due to OOM in that
particular spot, but it's not really worth bothering.

Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namespace.c

index 5968c44cc38aa6fe0be2de84c694bb2dd68149ab..b4374d6d4bae2e82c4c8df0c36cbb9857fac8e6b 100644 (file)
@@ -4184,10 +4184,8 @@ struct mnt_namespace *copy_mnt_ns(unsigned long flags, struct mnt_namespace *ns,
                copy_flags |= CL_SLAVE;
        new = copy_tree(old, old->mnt.mnt_root, copy_flags);
        if (IS_ERR(new)) {
+               emptied_ns = new_ns;
                namespace_unlock();
-               ns_free_inum(&new_ns->ns);
-               dec_mnt_namespaces(new_ns->ucounts);
-               mnt_ns_release(new_ns);
                return ERR_CAST(new);
        }
        if (user_ns != ns->user_ns) {