From 5b39d9755791a9877ae3476d095ceed827486e01 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Wed, 18 Apr 2012 15:26:52 -0400 Subject: [PATCH] --- yaml --- r: 299565 b: refs/heads/master c: 56fa9b16303b0a3bad88ff528c4d5ff54d8cdb47 h: refs/heads/master i: 299563: f3edcae2a224a8c64627a67567f9e7be347a10d4 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 0e0b420567d5..d7d9a6a4bb7b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: dbd717e37bf1409fd250d13aef2cab07bcae8c88 +refs/heads/master: 56fa9b16303b0a3bad88ff528c4d5ff54d8cdb47 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)