summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohann Latocha2012-02-22 17:43:47 +0100
committerJohann Latocha2012-02-22 17:43:47 +0100
commit385a52dbeafcb44db7a39d787eccee0bd6e7622c (patch)
treea038e5f8c08c88e08106d2d309e2031423a6feb9 /src
parent[ALL] Bugs, bugs, bugs... (diff)
downloaddnbd3-385a52dbeafcb44db7a39d787eccee0bd6e7622c.tar.gz
dnbd3-385a52dbeafcb44db7a39d787eccee0bd6e7622c.tar.xz
dnbd3-385a52dbeafcb44db7a39d787eccee0bd6e7622c.zip
[KERNEL] Ask alt servers on connect
Diffstat (limited to 'src')
-rw-r--r--src/kernel/net.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/kernel/net.c b/src/kernel/net.c
index a820a04..f8ff196 100644
--- a/src/kernel/net.c
+++ b/src/kernel/net.c
@@ -27,14 +27,15 @@
void dnbd3_net_connect(dnbd3_device_t *dev)
{
struct sockaddr_in sin;
- struct request *req = kmalloc(sizeof(struct request), GFP_ATOMIC);
+ struct request *req0 = kmalloc(sizeof(struct request), GFP_ATOMIC);
+ struct request *req1 = kmalloc(sizeof(struct request), GFP_ATOMIC);
struct timeval timeout;
timeout.tv_sec = SOCKET_TIMEOUT_CLIENT_DATA;
timeout.tv_usec = 0;
// do some checks before connecting
- if (!req)
+ if (!req0 || !req1)
{
printk("FATAL: Kmalloc failed.\n");
return;
@@ -75,10 +76,16 @@ void dnbd3_net_connect(dnbd3_device_t *dev)
dev->panic = 0;
dev->alt_servers_num = 0;
+
+ // enqueue request to request_queue_send (ask alt servers)
+ req1->cmd_type = REQ_TYPE_SPECIAL;
+ req1->cmd_flags = REQ_GET_SERVERS;
+ list_add(&req1->queuelist, &dev->request_queue_send);
+
// enqueue request to request_queue_send (ask file size)
- req->cmd_type = REQ_TYPE_SPECIAL;
- req->cmd_flags = REQ_GET_FILESIZE;
- list_add(&req->queuelist, &dev->request_queue_send);
+ req0->cmd_type = REQ_TYPE_SPECIAL;
+ req0->cmd_flags = REQ_GET_FILESIZE;
+ list_add(&req0->queuelist, &dev->request_queue_send);
// start sending thread
dev->thread_send = kthread_create(dnbd3_net_send, dev, dev->disk->disk_name);