diff options
author | Simon Rettberg | 2013-08-01 19:35:48 +0200 |
---|---|---|
committer | Simon Rettberg | 2013-08-01 19:35:48 +0200 |
commit | e7ad62c1b1627f7bab2524a4c30f1833f6b6767d (patch) | |
tree | 090473456331c3fa25eafc2db60e4c2808d808a9 /src/server/helper.c | |
parent | [SERVER] Add command line options to create empty image of certain size with ... (diff) | |
download | dnbd3-e7ad62c1b1627f7bab2524a4c30f1833f6b6767d.tar.gz dnbd3-e7ad62c1b1627f7bab2524a4c30f1833f6b6767d.tar.xz dnbd3-e7ad62c1b1627f7bab2524a4c30f1833f6b6767d.zip |
[SERVER] Fix create_image() by adding fallback solutions for fallocate()
Diffstat (limited to 'src/server/helper.c')
-rw-r--r-- | src/server/helper.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/server/helper.c b/src/server/helper.c index b028ad1..65239ea 100644 --- a/src/server/helper.c +++ b/src/server/helper.c @@ -162,3 +162,12 @@ int mkdir_p(const char* path) if ( mkdir( buffer, 0750 ) != 0 && errno != EEXIST ) return FALSE; return TRUE; } + +int file_alloc(int fd, uint64_t offset, uint64_t size) +{ + if ( fallocate( fd, 0, offset, size ) == 0 ) return TRUE; // fast way + if ( posix_fallocate( fd, offset, size ) == 0 ) return TRUE; // slow way + if ( lseek( fd, offset + size - 1, SEEK_SET ) != offset ) return FALSE; // dumb way + if ( write( fd, "", 1 ) != 1 ) return FALSE; + return TRUE; +} |