Commit 69ab4b7d authored by Patrick McHardy's avatar Patrick McHardy Committed by David S. Miller

[VLAN]: Clean up initialization code

- 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: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 198a291c
......@@ -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;
......@@ -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)
{
......@@ -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
......@@ -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);
......@@ -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;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment