s3: modules: Fix *allocate* calls to follow POSIX error return convention.
authorJeremy Allison <jra@samba.org>
Fri, 5 Dec 2014 23:37:11 +0000 (15:37 -0800)
committerJeremy Allison <jra@samba.org>
Mon, 8 Dec 2014 01:59:43 +0000 (02:59 +0100)
Fix up the ceph, fruit, time_audit and streams_xattr modules to follow
the -1,errno convention for errors.

Reported by Jones <jones.kstw@gmail.com> who provided the
initial patch. This patch tested and confirmed working
by him as well.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: David Disseldorp <ddiss@suse.de>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Mon Dec  8 02:59:43 CET 2014 on sn-devel-104

source3/modules/vfs_ceph.c
source3/modules/vfs_fruit.c
source3/modules/vfs_streams_xattr.c
source3/modules/vfs_time_audit.c

index e402ff114130063349e8180dc860a7e57cfcc91d..b0a00249f16e0a48d9a47cd13fbeddcc55028ea3 100644 (file)
@@ -795,15 +795,14 @@ static int strict_allocate_ftruncate(struct vfs_handle_struct *handle, files_str
           return ENOTSUP or EINVAL in cases like that. */
        ret = SMB_VFS_FALLOCATE(fsp, VFS_FALLOCATE_EXTEND_SIZE,
                                pst->st_ex_size, space_to_write);
-       if (ret == ENOSPC) {
-               errno = ENOSPC;
+       if (ret == -1 && errno == ENOSPC) {
                return -1;
        }
        if (ret == 0) {
                return 0;
        }
        DEBUG(10,("[CEPH] strict_allocate_ftruncate: SMB_VFS_FALLOCATE failed with "
-               "error %d. Falling back to slow manual allocation\n", ret));
+               "error %d. Falling back to slow manual allocation\n", errno));
 
        /* available disk space is enough or not? */
        space_avail = get_dfree_info(fsp->conn,
@@ -817,13 +816,7 @@ static int strict_allocate_ftruncate(struct vfs_handle_struct *handle, files_str
        }
 
        /* Write out the real space on disk. */
-       ret = vfs_slow_fallocate(fsp, pst->st_ex_size, space_to_write);
-       if (ret != 0) {
-               errno = ret;
-               ret = -1;
-       }
-
-       return 0;
+       return vfs_slow_fallocate(fsp, pst->st_ex_size, space_to_write);
 }
 
 static int cephwrap_ftruncate(struct vfs_handle_struct *handle, files_struct *fsp, off_t len)
index 18a6823bb06a73cb8d1b5975d49350a63cc8a3c7..a8bf7b4fd6e62ea086f3c84c5d5f11c5bdc16265 100644 (file)
@@ -3050,11 +3050,12 @@ static int fruit_fallocate(struct vfs_handle_struct *handle,
        }
 
        if (!fruit_fsp_recheck(ad, fsp)) {
-               return errno;
+               return -1;
        }
 
        /* Let the pwrite code path handle it. */
-       return ENOSYS;
+       errno = ENOSYS;
+       return -1;
 }
 
 static int fruit_ftruncate(struct vfs_handle_struct *handle,
index f0ab7321e077a57fc6884707f6d4314220a37de7..5c5a9a17fa6947c9d53585b8f5912952390edde4 100644 (file)
@@ -1103,11 +1103,12 @@ static int streams_xattr_fallocate(struct vfs_handle_struct *handle,
        }
 
        if (!streams_xattr_recheck(sio)) {
-               return errno;
+               return -1;
        }
 
        /* Let the pwrite code path handle it. */
-       return ENOSYS;
+       errno = ENOSYS;
+       return -1;
 }
 
 
index 4ce9238a2c44061454931722954dd43a0c3a2843..a1e825aa09a9307afdda939ac01c4e0a17c5a6f9 100644 (file)
@@ -1216,18 +1216,24 @@ static int smb_time_audit_fallocate(vfs_handle_struct *handle,
                                    off_t len)
 {
        int result;
+       int saved_errno = 0;
        struct timespec ts1,ts2;
        double timediff;
 
        clock_gettime_mono(&ts1);
        result = SMB_VFS_NEXT_FALLOCATE(handle, fsp, mode, offset, len);
+       if (result == -1) {
+               saved_errno = errno;
+       }
        clock_gettime_mono(&ts2);
        timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
 
        if (timediff > audit_timeout) {
                smb_time_audit_log_fsp("fallocate", timediff, fsp);
        }
-
+       if (result == -1) {
+               errno = saved_errno;
+       }
        return result;
 }