summaryrefslogtreecommitdiffstats
path: root/src/kernel
diff options
context:
space:
mode:
authorJohann Latocha2012-05-08 23:40:35 +0200
committerJohann Latocha2012-05-08 23:40:35 +0200
commite94396f4cf420642f551b8815e031c45bd0aaa7f (patch)
tree8d85c04413802fcdc338a50c864c84785bc3bc51 /src/kernel
parent[KERNEL] rtt measurement improved (diff)
downloaddnbd3-e94396f4cf420642f551b8815e031c45bd0aaa7f.tar.gz
dnbd3-e94396f4cf420642f551b8815e031c45bd0aaa7f.tar.xz
dnbd3-e94396f4cf420642f551b8815e031c45bd0aaa7f.zip
[KERNEL] Set proper exit status on connection
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/blk.c6
-rw-r--r--src/kernel/net.c13
-rw-r--r--src/kernel/net.h2
3 files changed, 10 insertions, 11 deletions
diff --git a/src/kernel/blk.c b/src/kernel/blk.c
index 7010ef7..369627f 100644
--- a/src/kernel/blk.c
+++ b/src/kernel/blk.c
@@ -112,8 +112,7 @@ int dnbd3_blk_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, u
dev->vid = msg->vid;
dev->rid = msg->rid;
blk_queue->backing_dev_info.ra_pages = (msg->read_ahead_kb * 1024)/ PAGE_CACHE_SIZE;
- dnbd3_net_connect(dev);
- break;
+ return dnbd3_net_connect(dev);
case IOCTL_CLOSE:
set_capacity(dev->disk, 0);
@@ -123,8 +122,7 @@ int dnbd3_blk_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, u
case IOCTL_SWITCH:
dnbd3_net_disconnect(dev);
strcpy(dev->cur_server.host, msg->host);
- dnbd3_net_connect(dev);
- break;
+ return dnbd3_net_connect(dev);
case BLKFLSBUF:
break;
diff --git a/src/kernel/net.c b/src/kernel/net.c
index bc2f510..0bfca6f 100644
--- a/src/kernel/net.c
+++ b/src/kernel/net.c
@@ -24,7 +24,7 @@
#include <linux/time.h>
-void dnbd3_net_connect(dnbd3_device_t *dev)
+int dnbd3_net_connect(dnbd3_device_t *dev)
{
struct sockaddr_in sin;
struct request *req0 = kmalloc(sizeof(struct request), GFP_ATOMIC);
@@ -39,18 +39,18 @@ void dnbd3_net_connect(dnbd3_device_t *dev)
{
printk("FATAL: Kmalloc failed.\n");
memset(dev->cur_server.host, '\0', sizeof(dev->cur_server.host));
- return;
+ return -1;
}
if (!dev->cur_server.host || !dev->cur_server.port || (dev->vid == 0))
{
printk("FATAL: Host, port or vid not set.\n");
memset(dev->cur_server.host, '\0', sizeof(dev->cur_server.host));
- return;
+ return -1;
}
if (dev->cur_server.sock)
{
printk("ERROR: Device %s is already connected to %s.\n", dev->disk->disk_name, dev->cur_server.host);
- return;
+ return -1;
}
printk("INFO: Connecting device %s to %s\n", dev->disk->disk_name, dev->cur_server.host);
@@ -61,7 +61,7 @@ void dnbd3_net_connect(dnbd3_device_t *dev)
printk("ERROR: Couldn't create socket.\n");
dev->cur_server.sock = NULL;
memset(dev->cur_server.host, '\0', sizeof(dev->cur_server.host));
- return;
+ return -1;
}
kernel_setsockopt(dev->cur_server.sock, SOL_SOCKET, SO_SNDTIMEO, (char *) &timeout, sizeof(timeout));
kernel_setsockopt(dev->cur_server.sock, SOL_SOCKET, SO_RCVTIMEO, (char *) &timeout, sizeof(timeout));
@@ -74,7 +74,7 @@ void dnbd3_net_connect(dnbd3_device_t *dev)
printk("ERROR: Couldn't connect to host %s:%s\n", dev->cur_server.host, dev->cur_server.port);
dev->cur_server.sock = NULL;
memset(dev->cur_server.host, '\0', sizeof(dev->cur_server.host));
- return;
+ return -1;
}
dev->panic = 0;
@@ -113,6 +113,7 @@ void dnbd3_net_connect(dnbd3_device_t *dev)
dev->hb_timer.expires = jiffies + TIMER_INTERVAL_HEARTBEAT;
add_timer(&dev->hb_timer);
+ return 0;
}
void dnbd3_net_disconnect(dnbd3_device_t *dev)
diff --git a/src/kernel/net.h b/src/kernel/net.h
index 5516b8f..3dfca41 100644
--- a/src/kernel/net.h
+++ b/src/kernel/net.h
@@ -30,7 +30,7 @@
h.msg_controllen = 0;\
h.msg_flags = MSG_WAITALL | MSG_NOSIGNAL;
-void dnbd3_net_connect(dnbd3_device_t *lo);
+int dnbd3_net_connect(dnbd3_device_t *lo);
void dnbd3_net_disconnect(dnbd3_device_t *lo);