OSDN Git Service

net: Cleanup in copy_net_ns()
authorKirill Tkhai <ktkhai@virtuozzo.com>
Tue, 13 Feb 2018 09:26:13 +0000 (12:26 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 13 Feb 2018 15:36:04 +0000 (10:36 -0500)
Line up destructors actions in the revers order
to constructors. Next patches will add more actions,
and this will be comfortable, if there is the such
order.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Acked-by: Andrei Vagin <avagin@virtuozzo.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/net_namespace.c

index 1180c21..8138438 100644 (file)
@@ -411,27 +411,25 @@ struct net *copy_net_ns(unsigned long flags,
 
        net = net_alloc();
        if (!net) {
-               dec_net_namespaces(ucounts);
-               return ERR_PTR(-ENOMEM);
+               rv = -ENOMEM;
+               goto dec_ucounts;
        }
-
+       refcount_set(&net->passive, 1);
+       net->ucounts = ucounts;
        get_user_ns(user_ns);
 
        rv = mutex_lock_killable(&net_mutex);
-       if (rv < 0) {
-               net_free(net);
-               dec_net_namespaces(ucounts);
-               put_user_ns(user_ns);
-               return ERR_PTR(rv);
-       }
+       if (rv < 0)
+               goto put_userns;
 
-       net->ucounts = ucounts;
        rv = setup_net(net, user_ns);
        mutex_unlock(&net_mutex);
        if (rv < 0) {
-               dec_net_namespaces(ucounts);
+put_userns:
                put_user_ns(user_ns);
                net_drop_ns(net);
+dec_ucounts:
+               dec_net_namespaces(ucounts);
                return ERR_PTR(rv);
        }
        return net;