summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuiz Capitulino <lcapitulino@mandriva.com.br>2006-03-21 06:17:55 (GMT)
committerDavid S. Miller <davem@davemloft.net>2006-03-21 06:17:55 (GMT)
commit8024bb245408060bec8393469e945b541a9b0865 (patch)
treebe58db8760c3ca03fc3b71155cf0cd88849ee4be
parent12e1872328e7055d06e539f1b687dc3d0610855c (diff)
downloadlinux-8024bb245408060bec8393469e945b541a9b0865.tar.xz
[PKTGEN]: Fix Initialization fail leak.
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>
-rw-r--r--net/core/pktgen.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c
index eef1392..fda4034 100644
--- a/net/core/pktgen.c
+++ b/net/core/pktgen.c
@@ -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;
}