diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2015-03-12 00:04:08 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-03-12 14:39:40 -0400 |
commit | efd7ef1c1929d7a0329d4349252863c04d6f1729 (patch) | |
tree | 66a1d5ba57a27fda7665da756551c10ac0ebf656 /net/core | |
parent | 6c7005f6cb1bf63bb1f505ef69364fb2cc00628e (diff) |
net: Kill hold_net release_net
hold_net and release_net were an idea that turned out to be useless.
The code has been disabled since 2008. Kill the code it is long past due.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dev.c | 2 | ||||
-rw-r--r-- | net/core/fib_rules.c | 17 | ||||
-rw-r--r-- | net/core/neighbour.c | 9 | ||||
-rw-r--r-- | net/core/net_namespace.c | 11 | ||||
-rw-r--r-- | net/core/sock.c | 1 |
5 files changed, 5 insertions, 35 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 962ee9d71964..39fe369b46ad 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -6841,8 +6841,6 @@ void free_netdev(struct net_device *dev) | |||
6841 | { | 6841 | { |
6842 | struct napi_struct *p, *n; | 6842 | struct napi_struct *p, *n; |
6843 | 6843 | ||
6844 | release_net(dev_net(dev)); | ||
6845 | |||
6846 | netif_free_tx_queues(dev); | 6844 | netif_free_tx_queues(dev); |
6847 | #ifdef CONFIG_SYSFS | 6845 | #ifdef CONFIG_SYSFS |
6848 | kvfree(dev->_rx); | 6846 | kvfree(dev->_rx); |
diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c index b55677fed1c8..68ea6950cad1 100644 --- a/net/core/fib_rules.c +++ b/net/core/fib_rules.c | |||
@@ -31,7 +31,7 @@ int fib_default_rule_add(struct fib_rules_ops *ops, | |||
31 | r->pref = pref; | 31 | r->pref = pref; |
32 | r->table = table; | 32 | r->table = table; |
33 | r->flags = flags; | 33 | r->flags = flags; |
34 | r->fr_net = hold_net(ops->fro_net); | 34 | r->fr_net = ops->fro_net; |
35 | 35 | ||
36 | r->suppress_prefixlen = -1; | 36 | r->suppress_prefixlen = -1; |
37 | r->suppress_ifgroup = -1; | 37 | r->suppress_ifgroup = -1; |
@@ -116,7 +116,6 @@ static int __fib_rules_register(struct fib_rules_ops *ops) | |||
116 | if (ops->family == o->family) | 116 | if (ops->family == o->family) |
117 | goto errout; | 117 | goto errout; |
118 | 118 | ||
119 | hold_net(net); | ||
120 | list_add_tail_rcu(&ops->list, &net->rules_ops); | 119 | list_add_tail_rcu(&ops->list, &net->rules_ops); |
121 | err = 0; | 120 | err = 0; |
122 | errout: | 121 | errout: |
@@ -160,15 +159,6 @@ static void fib_rules_cleanup_ops(struct fib_rules_ops *ops) | |||
160 | } | 159 | } |
161 | } | 160 | } |
162 | 161 | ||
163 | static void fib_rules_put_rcu(struct rcu_head *head) | ||
164 | { | ||
165 | struct fib_rules_ops *ops = container_of(head, struct fib_rules_ops, rcu); | ||
166 | struct net *net = ops->fro_net; | ||
167 | |||
168 | release_net(net); | ||
169 | kfree(ops); | ||
170 | } | ||
171 | |||
172 | void fib_rules_unregister(struct fib_rules_ops *ops) | 162 | void fib_rules_unregister(struct fib_rules_ops *ops) |
173 | { | 163 | { |
174 | struct net *net = ops->fro_net; | 164 | struct net *net = ops->fro_net; |
@@ -178,7 +168,7 @@ void fib_rules_unregister(struct fib_rules_ops *ops) | |||
178 | fib_rules_cleanup_ops(ops); | 168 | fib_rules_cleanup_ops(ops); |
179 | spin_unlock(&net->rules_mod_lock); | 169 | spin_unlock(&net->rules_mod_lock); |
180 | 170 | ||
181 | call_rcu(&ops->rcu, fib_rules_put_rcu); | 171 | kfree_rcu(ops, rcu); |
182 | } | 172 | } |
183 | EXPORT_SYMBOL_GPL(fib_rules_unregister); | 173 | EXPORT_SYMBOL_GPL(fib_rules_unregister); |
184 | 174 | ||
@@ -303,7 +293,7 @@ static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh) | |||
303 | err = -ENOMEM; | 293 | err = -ENOMEM; |
304 | goto errout; | 294 | goto errout; |
305 | } | 295 | } |
306 | rule->fr_net = hold_net(net); | 296 | rule->fr_net = net; |
307 | 297 | ||
308 | if (tb[FRA_PRIORITY]) | 298 | if (tb[FRA_PRIORITY]) |
309 | rule->pref = nla_get_u32(tb[FRA_PRIORITY]); | 299 | rule->pref = nla_get_u32(tb[FRA_PRIORITY]); |
@@ -423,7 +413,6 @@ static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh) | |||
423 | return 0; | 413 | return 0; |
424 | 414 | ||
425 | errout_free: | 415 | errout_free: |
426 | release_net(rule->fr_net); | ||
427 | kfree(rule); | 416 | kfree(rule); |
428 | errout: | 417 | errout: |
429 | rules_ops_put(ops); | 418 | rules_ops_put(ops); |
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index ad07990e943d..0e8b32efc031 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
@@ -591,7 +591,7 @@ struct pneigh_entry * pneigh_lookup(struct neigh_table *tbl, | |||
591 | if (!n) | 591 | if (!n) |
592 | goto out; | 592 | goto out; |
593 | 593 | ||
594 | write_pnet(&n->net, hold_net(net)); | 594 | write_pnet(&n->net, net); |
595 | memcpy(n->key, pkey, key_len); | 595 | memcpy(n->key, pkey, key_len); |
596 | n->dev = dev; | 596 | n->dev = dev; |
597 | if (dev) | 597 | if (dev) |
@@ -600,7 +600,6 @@ struct pneigh_entry * pneigh_lookup(struct neigh_table *tbl, | |||
600 | if (tbl->pconstructor && tbl->pconstructor(n)) { | 600 | if (tbl->pconstructor && tbl->pconstructor(n)) { |
601 | if (dev) | 601 | if (dev) |
602 | dev_put(dev); | 602 | dev_put(dev); |
603 | release_net(net); | ||
604 | kfree(n); | 603 | kfree(n); |
605 | n = NULL; | 604 | n = NULL; |
606 | goto out; | 605 | goto out; |
@@ -634,7 +633,6 @@ int pneigh_delete(struct neigh_table *tbl, struct net *net, const void *pkey, | |||
634 | tbl->pdestructor(n); | 633 | tbl->pdestructor(n); |
635 | if (n->dev) | 634 | if (n->dev) |
636 | dev_put(n->dev); | 635 | dev_put(n->dev); |
637 | release_net(pneigh_net(n)); | ||
638 | kfree(n); | 636 | kfree(n); |
639 | return 0; | 637 | return 0; |
640 | } | 638 | } |
@@ -657,7 +655,6 @@ static int pneigh_ifdown(struct neigh_table *tbl, struct net_device *dev) | |||
657 | tbl->pdestructor(n); | 655 | tbl->pdestructor(n); |
658 | if (n->dev) | 656 | if (n->dev) |
659 | dev_put(n->dev); | 657 | dev_put(n->dev); |
660 | release_net(pneigh_net(n)); | ||
661 | kfree(n); | 658 | kfree(n); |
662 | continue; | 659 | continue; |
663 | } | 660 | } |
@@ -1428,11 +1425,10 @@ struct neigh_parms *neigh_parms_alloc(struct net_device *dev, | |||
1428 | neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME)); | 1425 | neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME)); |
1429 | dev_hold(dev); | 1426 | dev_hold(dev); |
1430 | p->dev = dev; | 1427 | p->dev = dev; |
1431 | write_pnet(&p->net, hold_net(net)); | 1428 | write_pnet(&p->net, net); |
1432 | p->sysctl_table = NULL; | 1429 | p->sysctl_table = NULL; |
1433 | 1430 | ||
1434 | if (ops->ndo_neigh_setup && ops->ndo_neigh_setup(dev, p)) { | 1431 | if (ops->ndo_neigh_setup && ops->ndo_neigh_setup(dev, p)) { |
1435 | release_net(net); | ||
1436 | dev_put(dev); | 1432 | dev_put(dev); |
1437 | kfree(p); | 1433 | kfree(p); |
1438 | return NULL; | 1434 | return NULL; |
@@ -1472,7 +1468,6 @@ EXPORT_SYMBOL(neigh_parms_release); | |||
1472 | 1468 | ||
1473 | static void neigh_parms_destroy(struct neigh_parms *parms) | 1469 | static void neigh_parms_destroy(struct neigh_parms *parms) |
1474 | { | 1470 | { |
1475 | release_net(neigh_parms_net(parms)); | ||
1476 | kfree(parms); | 1471 | kfree(parms); |
1477 | } | 1472 | } |
1478 | 1473 | ||
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index cb5290b8c428..e5e96b0f6717 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c | |||
@@ -236,10 +236,6 @@ static __net_init int setup_net(struct net *net, struct user_namespace *user_ns) | |||
236 | net->user_ns = user_ns; | 236 | net->user_ns = user_ns; |
237 | idr_init(&net->netns_ids); | 237 | idr_init(&net->netns_ids); |
238 | 238 | ||
239 | #ifdef NETNS_REFCNT_DEBUG | ||
240 | atomic_set(&net->use_count, 0); | ||
241 | #endif | ||
242 | |||
243 | list_for_each_entry(ops, &pernet_list, list) { | 239 | list_for_each_entry(ops, &pernet_list, list) { |
244 | error = ops_init(ops, net); | 240 | error = ops_init(ops, net); |
245 | if (error < 0) | 241 | if (error < 0) |
@@ -294,13 +290,6 @@ out_free: | |||
294 | 290 | ||
295 | static void net_free(struct net *net) | 291 | static void net_free(struct net *net) |
296 | { | 292 | { |
297 | #ifdef NETNS_REFCNT_DEBUG | ||
298 | if (unlikely(atomic_read(&net->use_count) != 0)) { | ||
299 | pr_emerg("network namespace not free! Usage: %d\n", | ||
300 | atomic_read(&net->use_count)); | ||
301 | return; | ||
302 | } | ||
303 | #endif | ||
304 | kfree(rcu_access_pointer(net->gen)); | 293 | kfree(rcu_access_pointer(net->gen)); |
305 | kmem_cache_free(net_cachep, net); | 294 | kmem_cache_free(net_cachep, net); |
306 | } | 295 | } |
diff --git a/net/core/sock.c b/net/core/sock.c index a9a9c2ff9260..c8842f279f7a 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -1455,7 +1455,6 @@ void sk_release_kernel(struct sock *sk) | |||
1455 | 1455 | ||
1456 | sock_hold(sk); | 1456 | sock_hold(sk); |
1457 | sock_release(sk->sk_socket); | 1457 | sock_release(sk->sk_socket); |
1458 | release_net(sock_net(sk)); | ||
1459 | sock_net_set(sk, get_net(&init_net)); | 1458 | sock_net_set(sk, get_net(&init_net)); |
1460 | sock_put(sk); | 1459 | sock_put(sk); |
1461 | } | 1460 | } |