summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohann Latocha2012-02-22 23:29:45 +0100
committerJohann Latocha2012-02-22 23:29:45 +0100
commit489f4b6fe496d8bdb34784291b3d08d17cace29e (patch)
treed31a5255fd73b4aee0a829d587a415bac877d688 /src
parent[KERNEL] Minor bugfix (diff)
downloaddnbd3-489f4b6fe496d8bdb34784291b3d08d17cace29e.tar.gz
dnbd3-489f4b6fe496d8bdb34784291b3d08d17cace29e.tar.xz
dnbd3-489f4b6fe496d8bdb34784291b3d08d17cace29e.zip
[KERNEL] One more KP fixed
Diffstat (limited to 'src')
-rw-r--r--src/kernel/net.c21
1 files changed, 14 insertions, 7 deletions
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);