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 | |
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')
-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 | ||||
-rw-r--r-- | net/ipv4/fib_semantics.c | 3 | ||||
-rw-r--r-- | net/ipv4/inet_hashtables.c | 3 | ||||
-rw-r--r-- | net/ipv4/inet_timewait_sock.c | 3 | ||||
-rw-r--r-- | net/ipv6/addrlabel.c | 5 | ||||
-rw-r--r-- | net/ipv6/ip6_flowlabel.c | 3 | ||||
-rw-r--r-- | net/openvswitch/datapath.c | 4 |
11 files changed, 11 insertions, 50 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 | } |
diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c index c6d267442dac..66c1e4fbf884 100644 --- a/net/ipv4/fib_semantics.c +++ b/net/ipv4/fib_semantics.c | |||
@@ -213,7 +213,6 @@ static void free_fib_info_rcu(struct rcu_head *head) | |||
213 | rt_fibinfo_free(&nexthop_nh->nh_rth_input); | 213 | rt_fibinfo_free(&nexthop_nh->nh_rth_input); |
214 | } endfor_nexthops(fi); | 214 | } endfor_nexthops(fi); |
215 | 215 | ||
216 | release_net(fi->fib_net); | ||
217 | if (fi->fib_metrics != (u32 *) dst_default_metrics) | 216 | if (fi->fib_metrics != (u32 *) dst_default_metrics) |
218 | kfree(fi->fib_metrics); | 217 | kfree(fi->fib_metrics); |
219 | kfree(fi); | 218 | kfree(fi); |
@@ -814,7 +813,7 @@ struct fib_info *fib_create_info(struct fib_config *cfg) | |||
814 | } else | 813 | } else |
815 | fi->fib_metrics = (u32 *) dst_default_metrics; | 814 | fi->fib_metrics = (u32 *) dst_default_metrics; |
816 | 815 | ||
817 | fi->fib_net = hold_net(net); | 816 | fi->fib_net = net; |
818 | fi->fib_protocol = cfg->fc_protocol; | 817 | fi->fib_protocol = cfg->fc_protocol; |
819 | fi->fib_scope = cfg->fc_scope; | 818 | fi->fib_scope = cfg->fc_scope; |
820 | fi->fib_flags = cfg->fc_flags; | 819 | fi->fib_flags = cfg->fc_flags; |
diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c index 9111a4e22155..f6a12b97d12b 100644 --- a/net/ipv4/inet_hashtables.c +++ b/net/ipv4/inet_hashtables.c | |||
@@ -61,7 +61,7 @@ struct inet_bind_bucket *inet_bind_bucket_create(struct kmem_cache *cachep, | |||
61 | struct inet_bind_bucket *tb = kmem_cache_alloc(cachep, GFP_ATOMIC); | 61 | struct inet_bind_bucket *tb = kmem_cache_alloc(cachep, GFP_ATOMIC); |
62 | 62 | ||
63 | if (tb != NULL) { | 63 | if (tb != NULL) { |
64 | write_pnet(&tb->ib_net, hold_net(net)); | 64 | write_pnet(&tb->ib_net, net); |
65 | tb->port = snum; | 65 | tb->port = snum; |
66 | tb->fastreuse = 0; | 66 | tb->fastreuse = 0; |
67 | tb->fastreuseport = 0; | 67 | tb->fastreuseport = 0; |
@@ -79,7 +79,6 @@ void inet_bind_bucket_destroy(struct kmem_cache *cachep, struct inet_bind_bucket | |||
79 | { | 79 | { |
80 | if (hlist_empty(&tb->owners)) { | 80 | if (hlist_empty(&tb->owners)) { |
81 | __hlist_del(&tb->node); | 81 | __hlist_del(&tb->node); |
82 | release_net(ib_net(tb)); | ||
83 | kmem_cache_free(cachep, tb); | 82 | kmem_cache_free(cachep, tb); |
84 | } | 83 | } |
85 | } | 84 | } |
diff --git a/net/ipv4/inet_timewait_sock.c b/net/ipv4/inet_timewait_sock.c index 2bd980526631..86ebf020925b 100644 --- a/net/ipv4/inet_timewait_sock.c +++ b/net/ipv4/inet_timewait_sock.c | |||
@@ -98,7 +98,6 @@ void inet_twsk_free(struct inet_timewait_sock *tw) | |||
98 | #ifdef SOCK_REFCNT_DEBUG | 98 | #ifdef SOCK_REFCNT_DEBUG |
99 | pr_debug("%s timewait_sock %p released\n", tw->tw_prot->name, tw); | 99 | pr_debug("%s timewait_sock %p released\n", tw->tw_prot->name, tw); |
100 | #endif | 100 | #endif |
101 | release_net(twsk_net(tw)); | ||
102 | kmem_cache_free(tw->tw_prot->twsk_prot->twsk_slab, tw); | 101 | kmem_cache_free(tw->tw_prot->twsk_prot->twsk_slab, tw); |
103 | module_put(owner); | 102 | module_put(owner); |
104 | } | 103 | } |
@@ -196,7 +195,7 @@ struct inet_timewait_sock *inet_twsk_alloc(const struct sock *sk, const int stat | |||
196 | tw->tw_transparent = inet->transparent; | 195 | tw->tw_transparent = inet->transparent; |
197 | tw->tw_prot = sk->sk_prot_creator; | 196 | tw->tw_prot = sk->sk_prot_creator; |
198 | atomic64_set(&tw->tw_cookie, atomic64_read(&sk->sk_cookie)); | 197 | atomic64_set(&tw->tw_cookie, atomic64_read(&sk->sk_cookie)); |
199 | twsk_net_set(tw, hold_net(sock_net(sk))); | 198 | twsk_net_set(tw, sock_net(sk)); |
200 | /* | 199 | /* |
201 | * Because we use RCU lookups, we should not set tw_refcnt | 200 | * Because we use RCU lookups, we should not set tw_refcnt |
202 | * to a non null value before everything is setup for this | 201 | * to a non null value before everything is setup for this |
diff --git a/net/ipv6/addrlabel.c b/net/ipv6/addrlabel.c index e43e79d0a612..59c793040498 100644 --- a/net/ipv6/addrlabel.c +++ b/net/ipv6/addrlabel.c | |||
@@ -129,9 +129,6 @@ static const __net_initconst struct ip6addrlbl_init_table | |||
129 | /* Object management */ | 129 | /* Object management */ |
130 | static inline void ip6addrlbl_free(struct ip6addrlbl_entry *p) | 130 | static inline void ip6addrlbl_free(struct ip6addrlbl_entry *p) |
131 | { | 131 | { |
132 | #ifdef CONFIG_NET_NS | ||
133 | release_net(p->lbl_net); | ||
134 | #endif | ||
135 | kfree(p); | 132 | kfree(p); |
136 | } | 133 | } |
137 | 134 | ||
@@ -241,7 +238,7 @@ static struct ip6addrlbl_entry *ip6addrlbl_alloc(struct net *net, | |||
241 | newp->label = label; | 238 | newp->label = label; |
242 | INIT_HLIST_NODE(&newp->list); | 239 | INIT_HLIST_NODE(&newp->list); |
243 | #ifdef CONFIG_NET_NS | 240 | #ifdef CONFIG_NET_NS |
244 | newp->lbl_net = hold_net(net); | 241 | newp->lbl_net = net; |
245 | #endif | 242 | #endif |
246 | atomic_set(&newp->refcnt, 1); | 243 | atomic_set(&newp->refcnt, 1); |
247 | return newp; | 244 | return newp; |
diff --git a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c index f45d6db50a45..457303886fd4 100644 --- a/net/ipv6/ip6_flowlabel.c +++ b/net/ipv6/ip6_flowlabel.c | |||
@@ -100,7 +100,6 @@ static void fl_free(struct ip6_flowlabel *fl) | |||
100 | if (fl) { | 100 | if (fl) { |
101 | if (fl->share == IPV6_FL_S_PROCESS) | 101 | if (fl->share == IPV6_FL_S_PROCESS) |
102 | put_pid(fl->owner.pid); | 102 | put_pid(fl->owner.pid); |
103 | release_net(fl->fl_net); | ||
104 | kfree(fl->opt); | 103 | kfree(fl->opt); |
105 | kfree_rcu(fl, rcu); | 104 | kfree_rcu(fl, rcu); |
106 | } | 105 | } |
@@ -403,7 +402,7 @@ fl_create(struct net *net, struct sock *sk, struct in6_flowlabel_req *freq, | |||
403 | } | 402 | } |
404 | } | 403 | } |
405 | 404 | ||
406 | fl->fl_net = hold_net(net); | 405 | fl->fl_net = net; |
407 | fl->expires = jiffies; | 406 | fl->expires = jiffies; |
408 | err = fl6_renew(fl, freq->flr_linger, freq->flr_expires); | 407 | err = fl6_renew(fl, freq->flr_linger, freq->flr_expires); |
409 | if (err) | 408 | if (err) |
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c index 5bae7243c577..096c6276e6b9 100644 --- a/net/openvswitch/datapath.c +++ b/net/openvswitch/datapath.c | |||
@@ -203,7 +203,6 @@ static void destroy_dp_rcu(struct rcu_head *rcu) | |||
203 | 203 | ||
204 | ovs_flow_tbl_destroy(&dp->table); | 204 | ovs_flow_tbl_destroy(&dp->table); |
205 | free_percpu(dp->stats_percpu); | 205 | free_percpu(dp->stats_percpu); |
206 | release_net(ovs_dp_get_net(dp)); | ||
207 | kfree(dp->ports); | 206 | kfree(dp->ports); |
208 | kfree(dp); | 207 | kfree(dp); |
209 | } | 208 | } |
@@ -1501,7 +1500,7 @@ static int ovs_dp_cmd_new(struct sk_buff *skb, struct genl_info *info) | |||
1501 | if (dp == NULL) | 1500 | if (dp == NULL) |
1502 | goto err_free_reply; | 1501 | goto err_free_reply; |
1503 | 1502 | ||
1504 | ovs_dp_set_net(dp, hold_net(sock_net(skb->sk))); | 1503 | ovs_dp_set_net(dp, sock_net(skb->sk)); |
1505 | 1504 | ||
1506 | /* Allocate table. */ | 1505 | /* Allocate table. */ |
1507 | err = ovs_flow_tbl_init(&dp->table); | 1506 | err = ovs_flow_tbl_init(&dp->table); |
@@ -1575,7 +1574,6 @@ err_destroy_percpu: | |||
1575 | err_destroy_table: | 1574 | err_destroy_table: |
1576 | ovs_flow_tbl_destroy(&dp->table); | 1575 | ovs_flow_tbl_destroy(&dp->table); |
1577 | err_free_dp: | 1576 | err_free_dp: |
1578 | release_net(ovs_dp_get_net(dp)); | ||
1579 | kfree(dp); | 1577 | kfree(dp); |
1580 | err_free_reply: | 1578 | err_free_reply: |
1581 | kfree_skb(reply); | 1579 | kfree_skb(reply); |