diff options
author | sr | 2012-08-27 21:02:49 +0200 |
---|---|---|
committer | sr | 2012-08-27 21:02:49 +0200 |
commit | de01183aa40dbbd274e18f681d8a255a886f493e (patch) | |
tree | f614e764704aec26df15df68c633178064c60a41 /src/kernel/blk.c | |
parent | [KERNEL] Make rtt threshold relative (diff) | |
download | dnbd3-de01183aa40dbbd274e18f681d8a255a886f493e.tar.gz dnbd3-de01183aa40dbbd274e18f681d8a255a886f493e.tar.xz dnbd3-de01183aa40dbbd274e18f681d8a255a886f493e.zip |
[KERNEL] Refactor and extend sysfs (add data the server will need in proxy mode)
[SERVER] Use MSG_MORE instead of cork/uncork to save two syscalls
[KERNEL] Fail-Counter for alt servers, ignore servers that fail too often
[KERNEL] Add new alt servers to list, instead of replacing the old list
[*] Add CMD_LATEST_RID to tell client about new revisions
Diffstat (limited to 'src/kernel/blk.c')
-rw-r--r-- | src/kernel/blk.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/kernel/blk.c b/src/kernel/blk.c index 70e8419..21a14f0 100644 --- a/src/kernel/blk.c +++ b/src/kernel/blk.c @@ -35,14 +35,14 @@ int dnbd3_blk_add_device(dnbd3_device_t *dev, int minor) INIT_LIST_HEAD(&dev->request_queue_send); INIT_LIST_HEAD(&dev->request_queue_receive); - memset(&dev->cur_server, 0, sizeof(dnbd3_server_t)); + memset(&dev->cur_server, 0, sizeof(dev->cur_server)); + memset(&dev->initial_server, 0, sizeof(dev->initial_server)); dev->better_sock = NULL; dev->imgname = NULL; dev->rid = 0; dev->update_available = 0; - dev->alt_servers_num = 0; - memset(dev->alt_servers, 0, sizeof(dnbd3_server_t)*NUMBER_SERVERS); + memset(dev->alt_servers, 0, sizeof(dev->alt_servers[0])*NUMBER_SERVERS); dev->thread_send = NULL; dev->thread_receive = NULL; dev->thread_discover = NULL; @@ -103,16 +103,16 @@ int dnbd3_blk_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, u dnbd3_device_t *dev = bdev->bd_disk->private_data; struct request_queue *blk_queue = dev->disk->queue; char *imgname = NULL; - dnbd3_ioctl_t *msg = kmalloc(sizeof(dnbd3_ioctl_t), GFP_KERNEL); + dnbd3_ioctl_t *msg = kmalloc(sizeof(*msg), GFP_KERNEL); if (msg == NULL) return -ENOMEM; copy_from_user((char *)msg, (char *)arg, 2); - if (msg->len != sizeof(dnbd3_ioctl_t)) + if (msg->len != sizeof(*msg)) { result = -ENOEXEC; goto cleanup_return; } - copy_from_user((char *)msg, (char *)arg, sizeof(dnbd3_ioctl_t)); + copy_from_user((char *)msg, (char *)arg, sizeof(*msg)); if (msg->imgname != NULL && msg->imgnamelen > 0) { imgname = kmalloc(msg->imgnamelen + 1, GFP_KERNEL); @@ -142,6 +142,7 @@ int dnbd3_blk_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, u memcpy(dev->cur_server.hostaddr, msg->addr, 16); dev->cur_server.port = msg->port; dev->cur_server.hostaddrtype = msg->addrtype; + dev->cur_server.failures = 0; memcpy(&dev->initial_server, &dev->cur_server, sizeof(dev->initial_server)); dev->imgname = imgname; dev->rid = msg->rid; |