aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2009-11-29 10:46:13 -0500
committerDavid S. Miller <davem@davemloft.net>2009-12-01 19:15:57 -0500
commitcfb8fbf2299d0e028ac59afd5b8c94ebe53d0859 (patch)
tree6becbcb1bb99ea946942d2205a1feba85bcff718 /net/ipv4
parentd2b3eb630767f0b0ae21566b1b88cb512f40c647 (diff)
net: Simplify ip_gre pernet operations.
Take advantage of the new pernet automatic storage management, and stop using compatibility network namespace functions. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4')
-rw-r--r--net/ipv4/ip_gre.c24
1 files changed, 6 insertions, 18 deletions
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
index c5f6af5d0f34..f36ce156cac6 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
@@ -1309,17 +1309,8 @@ static void ipgre_destroy_tunnels(struct ipgre_net *ign, struct list_head *head)
1309 1309
1310static int ipgre_init_net(struct net *net) 1310static int ipgre_init_net(struct net *net)
1311{ 1311{
1312 struct ipgre_net *ign = net_generic(net, ipgre_net_id);
1312 int err; 1313 int err;
1313 struct ipgre_net *ign;
1314
1315 err = -ENOMEM;
1316 ign = kzalloc(sizeof(struct ipgre_net), GFP_KERNEL);
1317 if (ign == NULL)
1318 goto err_alloc;
1319
1320 err = net_assign_generic(net, ipgre_net_id, ign);
1321 if (err < 0)
1322 goto err_assign;
1323 1314
1324 ign->fb_tunnel_dev = alloc_netdev(sizeof(struct ip_tunnel), "gre0", 1315 ign->fb_tunnel_dev = alloc_netdev(sizeof(struct ip_tunnel), "gre0",
1325 ipgre_tunnel_setup); 1316 ipgre_tunnel_setup);
@@ -1340,10 +1331,6 @@ static int ipgre_init_net(struct net *net)
1340err_reg_dev: 1331err_reg_dev:
1341 free_netdev(ign->fb_tunnel_dev); 1332 free_netdev(ign->fb_tunnel_dev);
1342err_alloc_dev: 1333err_alloc_dev:
1343 /* nothing */
1344err_assign:
1345 kfree(ign);
1346err_alloc:
1347 return err; 1334 return err;
1348} 1335}
1349 1336
@@ -1357,12 +1344,13 @@ static void ipgre_exit_net(struct net *net)
1357 ipgre_destroy_tunnels(ign, &list); 1344 ipgre_destroy_tunnels(ign, &list);
1358 unregister_netdevice_many(&list); 1345 unregister_netdevice_many(&list);
1359 rtnl_unlock(); 1346 rtnl_unlock();
1360 kfree(ign);
1361} 1347}
1362 1348
1363static struct pernet_operations ipgre_net_ops = { 1349static struct pernet_operations ipgre_net_ops = {
1364 .init = ipgre_init_net, 1350 .init = ipgre_init_net,
1365 .exit = ipgre_exit_net, 1351 .exit = ipgre_exit_net,
1352 .id = &ipgre_net_id,
1353 .size = sizeof(struct ipgre_net),
1366}; 1354};
1367 1355
1368static int ipgre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[]) 1356static int ipgre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[])
@@ -1682,7 +1670,7 @@ static int __init ipgre_init(void)
1682 return -EAGAIN; 1670 return -EAGAIN;
1683 } 1671 }
1684 1672
1685 err = register_pernet_gen_device(&ipgre_net_id, &ipgre_net_ops); 1673 err = register_pernet_device(&ipgre_net_ops);
1686 if (err < 0) 1674 if (err < 0)
1687 goto gen_device_failed; 1675 goto gen_device_failed;
1688 1676
@@ -1700,7 +1688,7 @@ out:
1700tap_ops_failed: 1688tap_ops_failed:
1701 rtnl_link_unregister(&ipgre_link_ops); 1689 rtnl_link_unregister(&ipgre_link_ops);
1702rtnl_link_failed: 1690rtnl_link_failed:
1703 unregister_pernet_gen_device(ipgre_net_id, &ipgre_net_ops); 1691 unregister_pernet_device(&ipgre_net_ops);
1704gen_device_failed: 1692gen_device_failed:
1705 inet_del_protocol(&ipgre_protocol, IPPROTO_GRE); 1693 inet_del_protocol(&ipgre_protocol, IPPROTO_GRE);
1706 goto out; 1694 goto out;
@@ -1710,7 +1698,7 @@ static void __exit ipgre_fini(void)
1710{ 1698{
1711 rtnl_link_unregister(&ipgre_tap_ops); 1699 rtnl_link_unregister(&ipgre_tap_ops);
1712 rtnl_link_unregister(&ipgre_link_ops); 1700 rtnl_link_unregister(&ipgre_link_ops);
1713 unregister_pernet_gen_device(ipgre_net_id, &ipgre_net_ops); 1701 unregister_pernet_device(&ipgre_net_ops);
1714 if (inet_del_protocol(&ipgre_protocol, IPPROTO_GRE) < 0) 1702 if (inet_del_protocol(&ipgre_protocol, IPPROTO_GRE) < 0)
1715 printk(KERN_INFO "ipgre close: can't remove protocol\n"); 1703 printk(KERN_INFO "ipgre close: can't remove protocol\n");
1716} 1704}