Skip to content

Commit

Permalink
[VLAN]: Clean up initialization code
Browse files Browse the repository at this point in the history
- move module init/exit functions to end of file, remove some now unnecessary
  forward declarations
- remove some obvious comments
- clean up proc init function and move a proc-related printk there

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Patrick McHardy authored and David S. Miller committed Jan 28, 2008
1 parent 198a291 commit 69ab4b7
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 92 deletions.
141 changes: 58 additions & 83 deletions net/8021q/vlan.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,16 +50,6 @@ static char vlan_version[] = DRV_VERSION;
static char vlan_copyright[] = "Ben Greear <greearb@candelatech.com>";
static char vlan_buggyright[] = "David S. Miller <davem@redhat.com>";

static int vlan_device_event(struct notifier_block *, unsigned long, void *);
static int vlan_ioctl_handler(struct net *net, void __user *);
static int unregister_vlan_dev(struct net_device *, unsigned short );

static struct notifier_block vlan_notifier_block = {
.notifier_call = vlan_device_event,
};

/* These may be changed at run-time through IOCTLs */

/* Determines interface naming scheme. */
unsigned short vlan_name_type = VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD;

Expand All @@ -70,79 +60,6 @@ static struct packet_type vlan_packet_type = {

/* End of global variables definitions. */

/*
* Function vlan_proto_init (pro)
*
* Initialize VLAN protocol layer,
*
*/
static int __init vlan_proto_init(void)
{
int err;

pr_info("%s v%s %s\n", vlan_fullname, vlan_version, vlan_copyright);
pr_info("All bugs added by %s\n", vlan_buggyright);

/* proc file system initialization */
err = vlan_proc_init();
if (err < 0) {
pr_err("%s: can't create entry in proc filesystem!\n",
__FUNCTION__);
return err;
}

dev_add_pack(&vlan_packet_type);

/* Register us to receive netdevice events */
err = register_netdevice_notifier(&vlan_notifier_block);
if (err < 0)
goto err1;

err = vlan_netlink_init();
if (err < 0)
goto err2;

vlan_ioctl_set(vlan_ioctl_handler);
return 0;

err2:
unregister_netdevice_notifier(&vlan_notifier_block);
err1:
vlan_proc_cleanup();
dev_remove_pack(&vlan_packet_type);
return err;
}

/*
* Module 'remove' entry point.
* o delete /proc/net/router directory and static entries.
*/
static void __exit vlan_cleanup_module(void)
{
int i;

vlan_ioctl_set(NULL);
vlan_netlink_fini();

/* Un-register us from receiving netdevice events */
unregister_netdevice_notifier(&vlan_notifier_block);

dev_remove_pack(&vlan_packet_type);

/* This table must be empty if there are no module
* references left.
*/
for (i = 0; i < VLAN_GRP_HASH_SIZE; i++) {
BUG_ON(!hlist_empty(&vlan_group_hash[i]));
}
vlan_proc_cleanup();

synchronize_net();
}

module_init(vlan_proto_init);
module_exit(vlan_cleanup_module);

/* Must be invoked with RCU read lock (no preempt) */
static struct vlan_group *__vlan_find_group(int real_dev_ifindex)
{
Expand Down Expand Up @@ -592,6 +509,10 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event,
return NOTIFY_DONE;
}

static struct notifier_block vlan_notifier_block __read_mostly = {
.notifier_call = vlan_device_event,
};

/*
* VLAN IOCTL handler.
* o execute requested action or pass command to the device driver
Expand Down Expand Up @@ -716,5 +637,59 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg)
return err;
}

static int __init vlan_proto_init(void)
{
int err;

pr_info("%s v%s %s\n", vlan_fullname, vlan_version, vlan_copyright);
pr_info("All bugs added by %s\n", vlan_buggyright);

err = vlan_proc_init();
if (err < 0)
goto err1;

err = register_netdevice_notifier(&vlan_notifier_block);
if (err < 0)
goto err2;

err = vlan_netlink_init();
if (err < 0)
goto err3;

dev_add_pack(&vlan_packet_type);
vlan_ioctl_set(vlan_ioctl_handler);
return 0;

err3:
unregister_netdevice_notifier(&vlan_notifier_block);
err2:
vlan_proc_cleanup();
err1:
return err;
}

static void __exit vlan_cleanup_module(void)
{
unsigned int i;

vlan_ioctl_set(NULL);
vlan_netlink_fini();

unregister_netdevice_notifier(&vlan_notifier_block);

dev_remove_pack(&vlan_packet_type);

/* This table must be empty if there are no module references left. */
for (i = 0; i < VLAN_GRP_HASH_SIZE; i++)
BUG_ON(!hlist_empty(&vlan_group_hash[i]));

vlan_proc_cleanup();

synchronize_net();
}

module_init(vlan_proto_init);
module_exit(vlan_cleanup_module);

MODULE_LICENSE("GPL");
MODULE_VERSION(DRV_VERSION);
21 changes: 12 additions & 9 deletions net/8021q/vlanproc.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,15 +158,18 @@ void vlan_proc_cleanup(void)
int __init vlan_proc_init(void)
{
proc_vlan_dir = proc_mkdir(name_root, init_net.proc_net);
if (proc_vlan_dir) {
proc_vlan_conf = create_proc_entry(name_conf,
S_IFREG|S_IRUSR|S_IWUSR,
proc_vlan_dir);
if (proc_vlan_conf) {
proc_vlan_conf->proc_fops = &vlan_fops;
return 0;
}
}
if (!proc_vlan_dir)
goto err;

proc_vlan_conf = create_proc_entry(name_conf, S_IFREG|S_IRUSR|S_IWUSR,
proc_vlan_dir);
if (!proc_vlan_conf)
goto err;
proc_vlan_conf->proc_fops = &vlan_fops;
return 0;

err:
pr_err("%s: can't create entry in proc filesystem!\n", __FUNCTION__);
vlan_proc_cleanup();
return -ENOBUFS;
}
Expand Down

0 comments on commit 69ab4b7

Please sign in to comment.