From be89144db1f65079a9d4b505a439bcd51e7b527f Mon Sep 17 00:00:00 2001 From: Julian Anastasov Date: Mon, 16 Apr 2012 04:43:15 +0000 Subject: [PATCH] --- yaml --- r: 299551 b: refs/heads/master c: b922934d017f1cc831b017913ed7d1a56c558b43 h: refs/heads/master i: 299549: 6fdf5ef07f0e9b16cb8d498e7ff23ed085bf0c8a 299547: bc99b888908d7bfd9d5ca190739587c06904545c 299543: 8b9265c62235a0eb942a81fcb90ab6e643829be3 299535: a4aa117f1fda08858ccda7dd54922003f54d22f1 299519: 2f3aa68eee895b60d2e555b7648975f8d870aedd v: v3 --- [refs] | 2 +- trunk/net/core/net_namespace.c | 33 ++++++++++++++++++--------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/[refs] b/[refs] index f67d4dd3779b..26af67bbf790 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9fe5642f4a3b13beb43c2633db7df22dd9d99250 +refs/heads/master: b922934d017f1cc831b017913ed7d1a56c558b43 diff --git a/trunk/net/core/net_namespace.c b/trunk/net/core/net_namespace.c index 0e950fda9a0a..31a5ae51a45c 100644 --- a/trunk/net/core/net_namespace.c +++ b/trunk/net/core/net_namespace.c @@ -83,21 +83,29 @@ static int net_assign_generic(struct net *net, int id, void *data) static int ops_init(const struct pernet_operations *ops, struct net *net) { - int err; + int err = -ENOMEM; + void *data = NULL; + if (ops->id && ops->size) { - void *data = kzalloc(ops->size, GFP_KERNEL); + data = kzalloc(ops->size, GFP_KERNEL); if (!data) - return -ENOMEM; + goto out; err = net_assign_generic(net, *ops->id, data); - if (err) { - kfree(data); - return err; - } + if (err) + goto cleanup; } + err = 0; if (ops->init) - return ops->init(net); - return 0; + err = ops->init(net); + if (!err) + return 0; + +cleanup: + kfree(data); + +out: + return err; } static void ops_free(const struct pernet_operations *ops, struct net *net) @@ -448,12 +456,7 @@ static void __unregister_pernet_operations(struct pernet_operations *ops) static int __register_pernet_operations(struct list_head *list, struct pernet_operations *ops) { - int err = 0; - err = ops_init(ops, &init_net); - if (err) - ops_free(ops, &init_net); - return err; - + return ops_init(ops, &init_net); } static void __unregister_pernet_operations(struct pernet_operations *ops)