summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohann Latocha2012-01-20 14:30:07 +0100
committerJohann Latocha2012-01-20 14:30:07 +0100
commiteeec0aa91fafefc3d55ebddf04b94a3bfc9e20bc (patch)
treeae486a7e58ab50a17909be5ae31809cc9ed3b613
parentFirst working version :) (diff)
downloaddnbd3-eeec0aa91fafefc3d55ebddf04b94a3bfc9e20bc.tar.gz
dnbd3-eeec0aa91fafefc3d55ebddf04b94a3bfc9e20bc.tar.xz
dnbd3-eeec0aa91fafefc3d55ebddf04b94a3bfc9e20bc.zip
Support files > 4GB
-rw-r--r--src/kernel/net.c3
-rw-r--r--src/server/server.c9
2 files changed, 6 insertions, 6 deletions
diff --git a/src/kernel/net.c b/src/kernel/net.c
index 0e7a871..1ec92ca 100644
--- a/src/kernel/net.c
+++ b/src/kernel/net.c
@@ -71,7 +71,6 @@ void dnbd3_net_connect(void)
kernel_recvmsg(_sock, &msg, &iov, 1, sizeof(dnbd3_reply), msg.msg_flags);
// set filesize
- // FIXME: files > 4GB
printk("INFO: dnbd3 filesize: %llu\n", dnbd3_reply.filesize);
set_capacity(disk, dnbd3_reply.filesize >> 9); /* 512 Byte blocks */
@@ -145,7 +144,7 @@ int dnbd3_net_receive(void *data)
sigset_t blocked, oldset;
struct request *tmp_request, *received_request;
void *kaddr;
- int size;
+ unsigned int size;
msg.msg_name = NULL;
msg.msg_namelen = 0;
diff --git a/src/server/server.c b/src/server/server.c
index dfa53d7..7f62a53 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -20,6 +20,7 @@
#include "../version.h"
int file;
+off_t filesize;
void print_help(char* argv_0)
{
@@ -50,10 +51,6 @@ void *handle_query(void *client_socket)
struct dnbd3_request request;
struct dnbd3_reply reply;
uint16_t cmd;
- off_t filesize;
- struct stat st;
- fstat(file, &st);
- filesize = st.st_size;
while (recv(sock, &request, sizeof(struct dnbd3_request), MSG_WAITALL) > 0)
{
@@ -107,6 +104,9 @@ int main(int argc, char* argv[])
{
case 'f':
file = open(optarg, O_RDONLY);
+ struct stat st;
+ fstat(file, &st);
+ filesize = st.st_size;
break;
case 'h':
print_help(argv[0]);
@@ -154,6 +154,7 @@ int main(int argc, char* argv[])
exit(EXIT_FAILURE);
}
+ printf("INFO: Filesize: %llu bytes\n", filesize);
printf("INFO: Server is ready...\n");
while (1)