summaryrefslogtreecommitdiffstats
path: root/src/server/net.c
diff options
context:
space:
mode:
authorsr2012-09-09 23:01:00 +0200
committersr2012-09-09 23:01:00 +0200
commit3e8cd5b2284fd68206cd7ea9943e892fcce037f8 (patch)
tree3b4a67620bf6bedf678b8b70bf4cf3e7822edf89 /src/server/net.c
parent[SERVER] Automatically assign and connect a dnbd3 device to a relayed image (diff)
downloaddnbd3-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.c17
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;