summaryrefslogtreecommitdiffstats
path: root/src/kernel/blk.c
diff options
context:
space:
mode:
authorJohann Latocha2012-01-30 12:28:38 +0100
committerJohann Latocha2012-01-30 12:28:38 +0100
commit23c91a086d70898303ca3f8a0fb70a161b79bb37 (patch)
tree35b25a6578dd2c41357723109883aa04f0ab1c59 /src/kernel/blk.c
parent[SERVER] Reload configuration at runtime (diff)
downloaddnbd3-23c91a086d70898303ca3f8a0fb70a161b79bb37.tar.gz
dnbd3-23c91a086d70898303ca3f8a0fb70a161b79bb37.tar.xz
dnbd3-23c91a086d70898303ca3f8a0fb70a161b79bb37.zip
[KERNEL] Change server at runtime
[SERVER] Build error/warning on x64 fixed
Diffstat (limited to 'src/kernel/blk.c')
-rw-r--r--src/kernel/blk.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/kernel/blk.c b/src/kernel/blk.c
index 213ae23..c495205 100644
--- a/src/kernel/blk.c
+++ b/src/kernel/blk.c
@@ -64,7 +64,10 @@ int dnbd3_blk_add_device(struct dnbd3_device *dev, int minor)
int dnbd3_blk_del_device(struct dnbd3_device *dev)
{
if (dev->sock)
+ {
sock_release(dev->sock);
+ dev->sock = NULL;
+ }
del_gendisk(dev->disk);
put_disk(dev->disk);
@@ -83,17 +86,23 @@ int dnbd3_blk_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd,
switch (cmd)
{
case IOCTL_SET_HOST:
- lo->host = (char *) arg;
+ strcpy(lo->host, (char *) arg);
break;
case IOCTL_SET_PORT:
- lo->port = (char *) arg;
+ strcpy(lo->port, (char *) arg);
break;
case IOCTL_SET_IMAGE:
- lo->image_id = (char *) arg;
+ strcpy(lo->image_id, (char *) arg);
break;
case IOCTL_CONNECT:
- dnbd3_net_connect(lo);
+ if (lo->host && lo->port && lo->image_id)
+ dnbd3_net_connect(lo);
+ else
+ return -1;
+ break;
+ case IOCTL_DISCONNECT:
+ dnbd3_net_disconnect(lo);
break;
case BLKFLSBUF:
break;