[PKTGEN]: Fix Initialization fail leak.
authorLuiz Capitulino <lcapitulino@mandriva.com.br>
Tue, 21 Mar 2006 06:17:55 +0000 (22:17 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 21 Mar 2006 06:17:55 +0000 (22:17 -0800)
Even if pktgen's thread initialization fails for all CPUs, the module
will be successfully loaded.

This patch changes that behaivor, by returning an error on module load time,
and also freeing all the resources allocated. It also prints a warning if a
thread initialization has failed.

Signed-off-by: Luiz Capitulino <lcapitulino@mandriva.com.br>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/pktgen.c

index eef1392b7f8e3e62170ec0df8927dc6b5e1ae0ec..fda403419ff20c853c2abc73effc3222d3a09622 100644 (file)
@@ -3216,11 +3216,24 @@ static int __init pg_init(void)
        register_netdevice_notifier(&pktgen_notifier_block);
 
        for_each_online_cpu(cpu) {
+               int err;
                char buf[30];
 
                sprintf(buf, "kpktgend_%i", cpu);
-               pktgen_create_thread(buf, cpu);
+               err = pktgen_create_thread(buf, cpu);
+               if (err)
+                       printk("pktgen: WARNING: Cannot create thread for cpu %d (%d)\n",
+                                       cpu, err);
        }
+
+       if (list_empty(&pktgen_threads)) {
+               printk("pktgen: ERROR: Initialization failed for all threads\n");
+               unregister_netdevice_notifier(&pktgen_notifier_block);
+               remove_proc_entry(PGCTRL, pg_proc_dir);
+               proc_net_remove(PG_PROC_DIR);
+               return -ENODEV;
+       }
+
        return 0;
 }