From 385a52dbeafcb44db7a39d787eccee0bd6e7622c Mon Sep 17 00:00:00 2001 From: Johann Latocha Date: Wed, 22 Feb 2012 17:43:47 +0100 Subject: [KERNEL] Ask alt servers on connect --- src/kernel/net.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src') 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); -- cgit v1.2.3-55-g7522