From cf279fbdd531d4cab9cb0e6b8341e6cb1bbd9978 Mon Sep 17 00:00:00 2001 From: David Disseldorp Date: Tue, 26 Feb 2019 21:26:27 +0100 Subject: vfs_ceph: add missing fallocate hook SMB_VFS_FALLOCATE() calls atop a vfs_ceph share currently fall through to vfs_default, which results in a local filesystem I/O attempt using a libcephfs file-descriptor. Add the missing fallocate hook to vfs_ceph. Bug: https://bugzilla.samba.org/show_bug.cgi?id=13807 Signed-off-by: David Disseldorp Reviewed-by: Guenther Deschner (cherry picked from commit 5a7e7280813559fb70a9fc8e4238cb6015ee3b53) --- source3/modules/vfs_ceph.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c index b6707458b77..f73a1f65187 100644 --- a/source3/modules/vfs_ceph.c +++ b/source3/modules/vfs_ceph.c @@ -1252,6 +1252,22 @@ static int cephwrap_ftruncate(struct vfs_handle_struct *handle, files_struct *fs return result; } +static int cephwrap_fallocate(struct vfs_handle_struct *handle, + struct files_struct *fsp, + uint32_t mode, + off_t offset, + off_t len) +{ + int result; + + DBG_DEBUG("[CEPH] fallocate(%p, %p, %u, %llu, %llu\n", + handle, fsp, mode, llu(offset), llu(len)); + /* unsupported mode flags are rejected by libcephfs */ + result = ceph_fallocate(handle->data, fsp->fh->fd, mode, offset, len); + DBG_DEBUG("[CEPH] fallocate(...) = %d\n", result); + WRAP_RETURN(result); +} + static bool cephwrap_lock(struct vfs_handle_struct *handle, files_struct *fsp, int op, off_t offset, off_t count, int type) { DBG_DEBUG("[CEPH] lock\n"); @@ -1613,6 +1629,7 @@ static struct vfs_fn_pointers ceph_fns = { .getwd_fn = cephwrap_getwd, .ntimes_fn = cephwrap_ntimes, .ftruncate_fn = cephwrap_ftruncate, + .fallocate_fn = cephwrap_fallocate, .lock_fn = cephwrap_lock, .kernel_flock_fn = cephwrap_kernel_flock, .linux_setlease_fn = cephwrap_linux_setlease, -- cgit v1.2.1