Get rid of fallocate on Windows
authorJens Axboe <axboe@kernel.dk>
Wed, 6 Feb 2013 12:52:12 +0000 (13:52 +0100)
committerJens Axboe <axboe@kernel.dk>
Wed, 6 Feb 2013 12:52:12 +0000 (13:52 +0100)
Fallocate is only useful if it is a fast operation, helping the
file system allocate and setup meta data for the given size.
So don't punt to zero filling the entire thing.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
configure
os/windows/posix.c

index 258c805052fcd5450a481a2aa933363a8ae00445..d7ca77c8a3c66052166cd0ffe78bc4704d57403a 100755 (executable)
--- a/configure
+++ b/configure
@@ -200,7 +200,6 @@ CYGWIN*)
   fi
   output_sym "CONFIG_FADVISE"
   output_sym "CONFIG_SOCKLEN_T"
-  output_sym "CONFIG_POSIX_FALLOCATE"
   output_sym "CONFIG_FADVISE"
   output_sym "CONFIG_SFAA"
   output_sym "CONFIG_RUSAGE_THREAD"
index 05fa5a97a6e115c3c424563e8d832ef4761eeb1c..de679111aaa300e36918fe58aa35a263ccca0546 100755 (executable)
@@ -408,53 +408,6 @@ char *basename(char *path)
        return name;
 }
 
-int posix_fallocate(int fd, off_t offset, off_t len)
-{
-       const int BUFFER_SIZE = 256 * 1024;
-       int rc = 0;
-       char *buf;
-       unsigned int write_len;
-       unsigned int bytes_written;
-       off_t bytes_remaining = len;
-
-       if (len == 0 || offset < 0)
-               return EINVAL;
-
-       buf = malloc(BUFFER_SIZE);
-
-       if (buf == NULL)
-               return ENOMEM;
-
-       memset(buf, 0, BUFFER_SIZE);
-
-       int64_t prev_pos = _telli64(fd);
-
-       if (_lseeki64(fd, offset, SEEK_SET) == -1)
-               return errno;
-
-       while (bytes_remaining > 0) {
-               if (bytes_remaining < BUFFER_SIZE)
-                       write_len = (unsigned int)bytes_remaining;
-               else
-                       write_len = BUFFER_SIZE;
-
-               bytes_written = _write(fd, buf, write_len);
-               if (bytes_written == -1) {
-                       rc = errno;
-                       break;
-               }
-
-               /* Don't allow Windows to cache the write: flush it to disk */
-               _commit(fd);
-
-               bytes_remaining -= bytes_written;
-       }
-
-       free(buf);
-       _lseeki64(fd, prev_pos, SEEK_SET);
-       return rc;
-}
-
 int ftruncate(int fildes, off_t length)
 {
        BOOL bSuccess;