aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ppp_generic.c
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2009-11-29 10:46:09 -0500
committerDavid S. Miller <davem@davemloft.net>2009-12-01 19:15:56 -0500
commit741a6fa210c5c8828af3819134f644842e0e9c09 (patch)
tree54d90c7bdbe7701c5876d9ad59c42fbde7122d7c /drivers/net/ppp_generic.c
parente8d02885997081f09272af6b9a27061a142da4c5 (diff)
net: Simplify ppp_generic 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 'drivers/net/ppp_generic.c')
-rw-r--r--drivers/net/ppp_generic.c30
1 files changed, 7 insertions, 23 deletions
diff --git a/drivers/net/ppp_generic.c b/drivers/net/ppp_generic.c
index 0a56a778af0a..f671bb810047 100644
--- a/drivers/net/ppp_generic.c
+++ b/drivers/net/ppp_generic.c
@@ -864,12 +864,7 @@ static const struct file_operations ppp_device_fops = {
864 864
865static __net_init int ppp_init_net(struct net *net) 865static __net_init int ppp_init_net(struct net *net)
866{ 866{
867 struct ppp_net *pn; 867 struct ppp_net *pn = net_generic(net, ppp_net_id);
868 int err;
869
870 pn = kzalloc(sizeof(*pn), GFP_KERNEL);
871 if (!pn)
872 return -ENOMEM;
873 868
874 idr_init(&pn->units_idr); 869 idr_init(&pn->units_idr);
875 mutex_init(&pn->all_ppp_mutex); 870 mutex_init(&pn->all_ppp_mutex);
@@ -879,32 +874,21 @@ static __net_init int ppp_init_net(struct net *net)
879 874
880 spin_lock_init(&pn->all_channels_lock); 875 spin_lock_init(&pn->all_channels_lock);
881 876
882 err = net_assign_generic(net, ppp_net_id, pn);
883 if (err) {
884 kfree(pn);
885 return err;
886 }
887
888 return 0; 877 return 0;
889} 878}
890 879
891static __net_exit void ppp_exit_net(struct net *net) 880static __net_exit void ppp_exit_net(struct net *net)
892{ 881{
893 struct ppp_net *pn; 882 struct ppp_net *pn = net_generic(net, ppp_net_id);
894 883
895 pn = net_generic(net, ppp_net_id);
896 idr_destroy(&pn->units_idr); 884 idr_destroy(&pn->units_idr);
897 /*
898 * if someone has cached our net then
899 * further net_generic call will return NULL
900 */
901 net_assign_generic(net, ppp_net_id, NULL);
902 kfree(pn);
903} 885}
904 886
905static struct pernet_operations ppp_net_ops = { 887static struct pernet_operations ppp_net_ops = {
906 .init = ppp_init_net, 888 .init = ppp_init_net,
907 .exit = ppp_exit_net, 889 .exit = ppp_exit_net,
890 .id = &ppp_net_id,
891 .size = sizeof(struct ppp_net),
908}; 892};
909 893
910#define PPP_MAJOR 108 894#define PPP_MAJOR 108
@@ -917,7 +901,7 @@ static int __init ppp_init(void)
917 901
918 printk(KERN_INFO "PPP generic driver version " PPP_VERSION "\n"); 902 printk(KERN_INFO "PPP generic driver version " PPP_VERSION "\n");
919 903
920 err = register_pernet_gen_device(&ppp_net_id, &ppp_net_ops); 904 err = register_pernet_device(&ppp_net_ops);
921 if (err) { 905 if (err) {
922 printk(KERN_ERR "failed to register PPP pernet device (%d)\n", err); 906 printk(KERN_ERR "failed to register PPP pernet device (%d)\n", err);
923 goto out; 907 goto out;
@@ -943,7 +927,7 @@ static int __init ppp_init(void)
943out_chrdev: 927out_chrdev:
944 unregister_chrdev(PPP_MAJOR, "ppp"); 928 unregister_chrdev(PPP_MAJOR, "ppp");
945out_net: 929out_net:
946 unregister_pernet_gen_device(ppp_net_id, &ppp_net_ops); 930 unregister_pernet_device(&ppp_net_ops);
947out: 931out:
948 return err; 932 return err;
949} 933}
@@ -2835,7 +2819,7 @@ static void __exit ppp_cleanup(void)
2835 unregister_chrdev(PPP_MAJOR, "ppp"); 2819 unregister_chrdev(PPP_MAJOR, "ppp");
2836 device_destroy(ppp_class, MKDEV(PPP_MAJOR, 0)); 2820 device_destroy(ppp_class, MKDEV(PPP_MAJOR, 0));
2837 class_destroy(ppp_class); 2821 class_destroy(ppp_class);
2838 unregister_pernet_gen_device(ppp_net_id, &ppp_net_ops); 2822 unregister_pernet_device(&ppp_net_ops);
2839} 2823}
2840 2824
2841/* 2825/*