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 | } |
