xenpaging: make file_op largefile aware
authorOlaf Hering <olaf@aepfle.de>
Fri, 27 Jan 2012 19:03:37 +0000 (19:03 +0000)
committerOlaf Hering <olaf@aepfle.de>
Fri, 27 Jan 2012 19:03:37 +0000 (19:03 +0000)
lseek() takes an off_t, the used "int << shiftsize" does not automatically
convert the int into a larger type. This leads to write errors with pagefiles
larger than 2G. Fix this by shifting an off_t instead of an int.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/xenpaging/file_ops.c

index 079d2551a87d83978bc497faa8984496d75c2f0c..9351e168bdb3872dfa98011b32d36021432796ad 100644 (file)
 static int file_op(int fd, void *page, int i,
                    ssize_t (*fn)(int, void *, size_t))
 {
-    off_t seek_ret;
+    off_t offset = i;
     int total = 0;
     int bytes;
 
-    seek_ret = lseek(fd, i << PAGE_SHIFT, SEEK_SET);
-    if ( seek_ret == (off_t)-1 )
+    offset = lseek(fd, offset << PAGE_SHIFT, SEEK_SET);
+    if ( offset == (off_t)-1 )
         return -1;
 
     while ( total < PAGE_SIZE )