summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohann Latocha2012-02-22 23:29:45 +0100
committerJohann Latocha2012-02-22 23:29:45 +0100
commit489f4b6fe496d8bdb34784291b3d08d17cace29e (patch)
treed31a5255fd73b4aee0a829d587a415bac877d688
parent[KERNEL] Minor bugfix (diff)
downloaddnbd3-489f4b6fe496d8bdb34784291b3d08d17cace29e.tar.gz
dnbd3-489f4b6fe496d8bdb34784291b3d08d17cace29e.tar.xz
dnbd3-489f4b6fe496d8bdb34784291b3d08d17cace29e.zip
[KERNEL] One more KP fixed
-rw-r--r--dnbd3-server.conf.example6
-rw-r--r--src/kernel/net.c21
2 files changed, 17 insertions, 10 deletions
diff --git a/dnbd3-server.conf.example b/dnbd3-server.conf.example
index 3f7a0e2..d04aea0 100644
--- a/dnbd3-server.conf.example
+++ b/dnbd3-server.conf.example
@@ -8,18 +8,18 @@ rid=3
[Ubuntu 10.10]
file=/home/jjl/Data/ISOs/Ubuntu/ubuntu-10.10-desktop-i386.iso
-servers=132.230.4.29;132.230.8.96
+servers=132.230.4.29;132.230.4.220;132.230.8.96
vid=2
rid=1
[Ubuntu 11.04]
file=/home/jjl/Data/ISOs/Ubuntu/ubuntu-11.04-desktop-i386.iso
-servers=132.230.4.29;132.230.8.96
+servers=132.230.4.29;132.230.4.220;132.230.8.96
vid=3
rid=1
[Ubuntu 11.10]
file=/home/jjl/Data/ISOs/Ubuntu/ubuntu-11.10-desktop-i386.iso
-servers=132.230.4.29;132.230.8.96
+servers=132.230.4.29;132.230.4.220;132.230.8.96
vid=4
rid=1
diff --git a/src/kernel/net.c b/src/kernel/net.c
index e331177..74cd500 100644
--- a/src/kernel/net.c
+++ b/src/kernel/net.c
@@ -120,22 +120,29 @@ void dnbd3_net_disconnect(dnbd3_device_t *dev)
// kill sending and receiving threads
if (dev->thread_send)
+ {
kthread_stop(dev->thread_send);
+ dev->thread_send = NULL;
+ }
if (dev->thread_receive)
+ {
kthread_stop(dev->thread_receive);
+ dev->thread_receive = NULL;
+ }
if (dev->thread_discover)
+ {
kthread_stop(dev->thread_discover);
+ dev->thread_discover = NULL;
+ }
// clear socket
if (dev->cur_server.sock)
+ {
sock_release(dev->cur_server.sock);
-
- dev->thread_send = NULL;
- dev->thread_receive = NULL;
- dev->thread_discover = NULL;
- dev->cur_server.sock = NULL;
+ dev->cur_server.sock = NULL;
+ }
}
void dnbd3_net_heartbeat(unsigned long arg)
@@ -317,9 +324,9 @@ int dnbd3_net_discover(void *data)
continue;
// take server with lowest rtt
- if (num > 1 && strcmp(dev->cur_server.host, best_server))
+ if (num > 1 && strcmp(dev->cur_server.host, best_server) && !kthread_should_stop())
{
- printk("INFO: Server %s on %s is faster (%lluus), switching\n", best_server, dev->disk->disk_name, best_rtt);
+ printk("INFO: Server %s on %s is faster (%lluus)\n", best_server, dev->disk->disk_name, best_rtt);
kfree(buf);
dev->thread_discover = NULL;
dnbd3_net_disconnect(dev);