vfs_ceph: fix strict_allocate_ftruncate()
authorDavid Disseldorp <ddiss@samba.org>
Tue, 26 Feb 2019 15:07:27 +0000 (16:07 +0100)
committerKarolin Seeger <kseeger@samba.org>
Tue, 5 Mar 2019 07:39:29 +0000 (07:39 +0000)
The vfs_ceph "strict allocate = yes" ftruncate wrapper may attempt
*local* filesystem ftruncate(). Fix this.

Bug: https://bugzilla.samba.org/show_bug.cgi?id=13807

Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
(cherry picked from commit 70329c36ed91dd0e50ff66f9b0a85c62ac8a621e)

source3/modules/vfs_ceph.c

index f73a1f651870ef1f5c3fdee8f0006308e6760f71..c68a98f97e8aa807dbf0d5779349b5350c96e0ee 100644 (file)
@@ -1145,8 +1145,10 @@ static int strict_allocate_ftruncate(struct vfs_handle_struct *handle, files_str
                return 0;
 
        /* Shrink - just ftruncate. */
-       if (pst->st_ex_size > len)
-               return ftruncate(fsp->fh->fd, len);
+       if (pst->st_ex_size > len) {
+               ret = ceph_ftruncate(handle->data, fsp->fh->fd, len);
+               WRAP_RETURN(ret);
+       }
 
        space_to_write = len - pst->st_ex_size;