pktgen: refactor pg_init() code
authorWANG Cong <xiyou.wangcong@gmail.com>
Sun, 22 May 2011 00:52:08 +0000 (00:52 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 23 May 2011 01:01:22 +0000 (21:01 -0400)
This also shrinks the object size a little.

   text    data     bss     dec     hex filename
  28834     186       8   29028    7164 net/core/pktgen.o
  28816     186       8   29010    7152 net/core/pktgen.o.AFTER

Signed-off-by: WANG Cong <xiyou.wangcong@gmail.com>
Cc: "David Miller" <davem@davemloft.net>,
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/pktgen.c

index 3b85c0dffa619c583251c2c0e6bd57607b2baada..f76079cd750c618da16014b97a4d781bbc65e878 100644 (file)
@@ -3707,6 +3707,7 @@ static int __init pg_init(void)
 {
        int cpu;
        struct proc_dir_entry *pe;
+       int ret = 0;
 
        pr_info("%s", version);
 
@@ -3717,11 +3718,10 @@ static int __init pg_init(void)
        pe = proc_create(PGCTRL, 0600, pg_proc_dir, &pktgen_fops);
        if (pe == NULL) {
                pr_err("ERROR: cannot create %s procfs entry\n", PGCTRL);
-               proc_net_remove(&init_net, PG_PROC_DIR);
-               return -EINVAL;
+               ret = -EINVAL;
+               goto remove_dir;
        }
 
-       /* Register us to receive netdevice events */
        register_netdevice_notifier(&pktgen_notifier_block);
 
        for_each_online_cpu(cpu) {
@@ -3735,13 +3735,18 @@ static int __init pg_init(void)
 
        if (list_empty(&pktgen_threads)) {
                pr_err("ERROR: Initialization failed for all threads\n");
-               unregister_netdevice_notifier(&pktgen_notifier_block);
-               remove_proc_entry(PGCTRL, pg_proc_dir);
-               proc_net_remove(&init_net, PG_PROC_DIR);
-               return -ENODEV;
+               ret = -ENODEV;
+               goto unregister;
        }
 
        return 0;
+
+ unregister:
+       unregister_netdevice_notifier(&pktgen_notifier_block);
+       remove_proc_entry(PGCTRL, pg_proc_dir);
+ remove_dir:
+       proc_net_remove(&init_net, PG_PROC_DIR);
+       return ret;
 }
 
 static void __exit pg_cleanup(void)