summaryrefslogtreecommitdiffstats
path: root/src
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
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')
-rw-r--r--src/client/client.c12
-rw-r--r--src/kernel/blk.c6
-rw-r--r--src/kernel/net.c13
-rw-r--r--src/kernel/net.h2
4 files changed, 22 insertions, 11 deletions
diff --git a/src/client/client.c b/src/client/client.c
index 4810005..92f5127 100644
--- a/src/client/client.c
+++ b/src/client/client.c
@@ -158,7 +158,10 @@ int main(int argc, char *argv[])
printf("INFO: Closing device %s\n", dev);
if (ioctl(fd, IOCTL_CLOSE, &msg) < 0)
+ {
printf("ERROR: ioctl not successful\n");
+ exit(EXIT_FAILURE);
+ }
close(fd);
exit(EXIT_SUCCESS);
@@ -171,7 +174,10 @@ int main(int argc, char *argv[])
printf("INFO: Switching device %s to %s\n", dev, msg.host);
if (ioctl(fd, IOCTL_SWITCH, &msg) < 0)
+ {
printf("ERROR: ioctl not successful\n");
+ exit(EXIT_FAILURE);
+ }
close(fd);
exit(EXIT_SUCCESS);
@@ -184,7 +190,10 @@ int main(int argc, char *argv[])
printf("INFO: Connecting %s to %s:%s vid:%i rid:%i\n", dev, msg.host, msg.port, msg.vid, msg.rid);
if (ioctl(fd, IOCTL_OPEN, &msg) < 0)
+ {
printf("ERROR: ioctl not successful\n");
+ exit(EXIT_FAILURE);
+ }
close(fd);
exit(EXIT_SUCCESS);
@@ -218,7 +227,10 @@ int main(int argc, char *argv[])
printf("INFO: Connecting %s to %s:%s vid:%i rid:%i\n", dev, msg.host, msg.port, msg.vid, msg.rid);
if (ioctl(fd, IOCTL_OPEN, &msg) < 0)
+ {
printf("ERROR: ioctl not successful\n");
+ exit(EXIT_FAILURE);
+ }
close(fd);
}
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);