summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Disseldorp <ddiss@samba.org>2019-02-26 21:26:27 +0100
committerKarolin Seeger <kseeger@samba.org>2019-03-05 07:39:29 +0000
commitcf279fbdd531d4cab9cb0e6b8341e6cb1bbd9978 (patch)
tree7f594d8a21d4384914be353613d6154b5e085de6
parent03e4555f344e6806c80fefc8cf00a08d6ea2766e (diff)
downloadsamba-cf279fbdd531d4cab9cb0e6b8341e6cb1bbd9978.tar.gz
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 <ddiss@samba.org> Reviewed-by: Guenther Deschner <gd@samba.org> (cherry picked from commit 5a7e7280813559fb70a9fc8e4238cb6015ee3b53)
-rw-r--r--source3/modules/vfs_ceph.c17
1 files changed, 17 insertions, 0 deletions
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,