diff options
author | sr | 2012-09-09 23:01:00 +0200 |
---|---|---|
committer | sr | 2012-09-09 23:01:00 +0200 |
commit | 3e8cd5b2284fd68206cd7ea9943e892fcce037f8 (patch) | |
tree | 3b4a67620bf6bedf678b8b70bf4cf3e7822edf89 /src/server/net.c | |
parent | [SERVER] Automatically assign and connect a dnbd3 device to a relayed image (diff) | |
download | dnbd3-3e8cd5b2284fd68206cd7ea9943e892fcce037f8.tar.gz dnbd3-3e8cd5b2284fd68206cd7ea9943e892fcce037f8.tar.xz dnbd3-3e8cd5b2284fd68206cd7ea9943e892fcce037f8.zip |
[SERVER] Automatically connect a dnbd3 device for a relayed image
[SERVER] Automatically disconnect dnbd3 device if local cache copy is complete
[SERVER] Pre-allocate disk space for cache file
[KERNEL] Refuse connection if server reports disk size < 4096 bytes
Diffstat (limited to 'src/server/net.c')
-rw-r--r-- | src/server/net.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/server/net.c b/src/server/net.c index 425f23f..a895f85 100644 --- a/src/server/net.c +++ b/src/server/net.c @@ -206,12 +206,15 @@ void *dnbd3_handle_query(void *dnbd3_client) } else { - image_file = open(image->file, O_RDONLY); - if (image_file == -1) + if (image->file) { - image = NULL; + image_file = open(image->file, O_RDONLY); + if (image_file == -1) + { + image = NULL; + } } - else + if (image) { client->image = image; if (!client->is_server) @@ -219,6 +222,10 @@ void *dnbd3_handle_query(void *dnbd3_client) if (image->cache_map && image->cache_file) image_cache = open(image->cache_file, O_RDWR); + else if (image->cache_map) + printf("[BUG] Image has cache_map but no cache file!\n"); + else if (image->cache_file) + printf("[BUG] Image has cache_file but not cache map!\n"); } } } @@ -312,6 +319,8 @@ void *dnbd3_handle_query(void *dnbd3_client) lseek(image_cache, todo_offset, SEEK_SET); if (sendfile(image_cache, image_file, (off_t *) &todo_offset, todo_size) != todo_size) { + if (image->file == NULL) + printf("[ERROR] Device was closed when local copy was incomplete."); printf("[ERROR] sendfile failed (copy to cache 1)\n"); close(client->sock); client->sock = -1; |