diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2009-11-29 10:46:05 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-12-01 19:15:53 -0500 |
commit | 946d1a9298c9e592b189a168326603c92d782b5f (patch) | |
tree | 170e0e7410172146c99068ed17159a80c9d02f94 | |
parent | 15449745e5d181ae214ceaf0880350bb4e63512a (diff) |
net: Simplify vlan 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>
-rw-r--r-- | net/8021q/vlan.c | 33 |
1 files changed, 7 insertions, 26 deletions
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 225aa2fac0e3..91e9073e1995 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c | |||
@@ -686,47 +686,28 @@ out: | |||
686 | 686 | ||
687 | static int vlan_init_net(struct net *net) | 687 | static int vlan_init_net(struct net *net) |
688 | { | 688 | { |
689 | struct vlan_net *vn = net_generic(net, vlan_net_id); | ||
689 | int err; | 690 | int err; |
690 | struct vlan_net *vn; | ||
691 | |||
692 | err = -ENOMEM; | ||
693 | vn = kzalloc(sizeof(struct vlan_net), GFP_KERNEL); | ||
694 | if (vn == NULL) | ||
695 | goto err_alloc; | ||
696 | |||
697 | err = net_assign_generic(net, vlan_net_id, vn); | ||
698 | if (err < 0) | ||
699 | goto err_assign; | ||
700 | 691 | ||
701 | vn->name_type = VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD; | 692 | vn->name_type = VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD; |
702 | 693 | ||
703 | err = vlan_proc_init(net); | 694 | err = vlan_proc_init(net); |
704 | if (err < 0) | ||
705 | goto err_proc; | ||
706 | 695 | ||
707 | return 0; | ||
708 | |||
709 | err_proc: | ||
710 | /* nothing */ | ||
711 | err_assign: | ||
712 | kfree(vn); | ||
713 | err_alloc: | ||
714 | return err; | 696 | return err; |
715 | } | 697 | } |
716 | 698 | ||
717 | static void vlan_exit_net(struct net *net) | 699 | static void vlan_exit_net(struct net *net) |
718 | { | 700 | { |
719 | struct vlan_net *vn; | ||
720 | |||
721 | vn = net_generic(net, vlan_net_id); | ||
722 | rtnl_kill_links(net, &vlan_link_ops); | 701 | rtnl_kill_links(net, &vlan_link_ops); |
702 | |||
723 | vlan_proc_cleanup(net); | 703 | vlan_proc_cleanup(net); |
724 | kfree(vn); | ||
725 | } | 704 | } |
726 | 705 | ||
727 | static struct pernet_operations vlan_net_ops = { | 706 | static struct pernet_operations vlan_net_ops = { |
728 | .init = vlan_init_net, | 707 | .init = vlan_init_net, |
729 | .exit = vlan_exit_net, | 708 | .exit = vlan_exit_net, |
709 | .id = &vlan_net_id, | ||
710 | .size = sizeof(struct vlan_net), | ||
730 | }; | 711 | }; |
731 | 712 | ||
732 | static int __init vlan_proto_init(void) | 713 | static int __init vlan_proto_init(void) |
@@ -736,7 +717,7 @@ static int __init vlan_proto_init(void) | |||
736 | pr_info("%s v%s %s\n", vlan_fullname, vlan_version, vlan_copyright); | 717 | pr_info("%s v%s %s\n", vlan_fullname, vlan_version, vlan_copyright); |
737 | pr_info("All bugs added by %s\n", vlan_buggyright); | 718 | pr_info("All bugs added by %s\n", vlan_buggyright); |
738 | 719 | ||
739 | err = register_pernet_gen_device(&vlan_net_id, &vlan_net_ops); | 720 | err = register_pernet_device(&vlan_net_ops); |
740 | if (err < 0) | 721 | if (err < 0) |
741 | goto err0; | 722 | goto err0; |
742 | 723 | ||
@@ -761,7 +742,7 @@ err4: | |||
761 | err3: | 742 | err3: |
762 | unregister_netdevice_notifier(&vlan_notifier_block); | 743 | unregister_netdevice_notifier(&vlan_notifier_block); |
763 | err2: | 744 | err2: |
764 | unregister_pernet_gen_device(vlan_net_id, &vlan_net_ops); | 745 | unregister_pernet_device(&vlan_net_ops); |
765 | err0: | 746 | err0: |
766 | return err; | 747 | return err; |
767 | } | 748 | } |
@@ -781,7 +762,7 @@ static void __exit vlan_cleanup_module(void) | |||
781 | for (i = 0; i < VLAN_GRP_HASH_SIZE; i++) | 762 | for (i = 0; i < VLAN_GRP_HASH_SIZE; i++) |
782 | BUG_ON(!hlist_empty(&vlan_group_hash[i])); | 763 | BUG_ON(!hlist_empty(&vlan_group_hash[i])); |
783 | 764 | ||
784 | unregister_pernet_gen_device(vlan_net_id, &vlan_net_ops); | 765 | unregister_pernet_device(&vlan_net_ops); |
785 | rcu_barrier(); /* Wait for completion of call_rcu()'s */ | 766 | rcu_barrier(); /* Wait for completion of call_rcu()'s */ |
786 | 767 | ||
787 | vlan_gvrp_uninit(); | 768 | vlan_gvrp_uninit(); |