s3: make sys_posix_fallocate more generic
authorBjörn Jacke <bj@sernet.de>
Tue, 8 Dec 2009 20:13:19 +0000 (21:13 +0100)
committerBjörn Jacke <bj@sernet.de>
Tue, 8 Dec 2009 20:19:35 +0000 (21:19 +0100)
this is in preparation for other preallocation methods to be introduced.

source3/lib/system.c
source3/modules/vfs_default.c

index a2dd89982e2bb83cc80ad5736a2d584115889a92..a58d9037a79dc54964c4c72b1688ae95152d501c 100644 (file)
@@ -621,16 +621,16 @@ int sys_lstat(const char *fname,SMB_STRUCT_STAT *sbuf,
 /*******************************************************************
  An posix_fallocate() wrapper that will deal with 64 bit filesizes.
 ********************************************************************/
-#if (defined(HAVE_POSIX_FALLOCATE64) || defined(HAVE_POSIX_FALLOCATE)) && !defined(HAVE_BROKEN_POSIX_FALLOCATE)
 int sys_posix_fallocate(int fd, SMB_OFF_T offset, SMB_OFF_T len)
 {
-#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(HAVE_POSIX_FALLOCATE64)
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(HAVE_POSIX_FALLOCATE64) && !defined(HAVE_BROKEN_POSIX_FALLOCATE)
        return posix_fallocate64(fd, offset, len);
-#else
+#elif defined(HAVE_POSIX_FALLOCATE) && !defined(HAVE_BROKEN_POSIX_FALLOCATE)
        return posix_fallocate(fd, offset, len);
+#else
+       return ENOSYS;
 #endif
 }
-#endif
 
 /*******************************************************************
  An ftruncate() wrapper that will deal with 64 bit filesizes.
index 9b842df93fa9c578f8e080f0282f128ea9cea454..ded4b1af27674ce91dc3d675977e1da7a8342271 100644 (file)
@@ -917,6 +917,7 @@ static int strict_allocate_ftruncate(vfs_handle_struct *handle, files_struct *fs
        SMB_OFF_T space_to_write;
        uint64_t space_avail;
        uint64_t bsize,dfree,dsize;
+       int ret;
 
        if (currpos == -1)
                return -1;
@@ -943,21 +944,17 @@ static int strict_allocate_ftruncate(vfs_handle_struct *handle, files_struct *fs
           emulation is being done by the libc (like on AIX with JFS1). In that
           case we do our own emulation. posix_fallocate implementations can
           return ENOTSUP or EINVAL in cases like that. */
-#if defined(HAVE_POSIX_FALLOCATE)
-       {
-               int ret = sys_posix_fallocate(fsp->fh->fd, st.st_ex_size, space_to_write);
-               if (ret == ENOSPC) {
-                       errno = ENOSPC;
-                       return -1;
-               }
-               if (ret == 0) {
-                       return 0;
-               }
-               DEBUG(10,("strict_allocate_ftruncate: sys_posix_fallocate "
-                       "failed with error %d. "
-                       "Falling back to slow manual allocation\n", ret));
+       ret = sys_posix_fallocate(fsp->fh->fd, st.st_ex_size, space_to_write);
+       if (ret == ENOSPC) {
+               errno = ENOSPC;
+               return -1;
        }
-#endif
+       if (ret == 0) {
+               return 0;
+       }
+       DEBUG(10,("strict_allocate_ftruncate: sys_posix_fallocate failed with "
+               "error %d. Falling back to slow manual allocation\n", ret));
+
        /* available disk space is enough or not? */
        space_avail = get_dfree_info(fsp->conn,
                                     fsp->fsp_name->base_name, false,