vfs_ceph: add fs_capabilities hook to avoid local statvfs
authorDavid Disseldorp <ddiss@samba.org>
Wed, 10 Jan 2018 00:37:14 +0000 (01:37 +0100)
committerJeremy Allison <jra@samba.org>
Sat, 13 Jan 2018 02:03:46 +0000 (03:03 +0100)
Adding the fs_capabilities() hook to the CephFS VFS module avoids
fallback to the vfs_default code-path, which calls statvfs() against the
share path on the *local* filesystem.

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

Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/modules/vfs_ceph.c

index b4a7ceef105b00da4a37075d490b4c4581ce32a5..d61213110e01402aca3671cdcf1c0475eb7ff89d 100644 (file)
@@ -270,6 +270,20 @@ static int cephwrap_statvfs(struct vfs_handle_struct *handle,
        return ret;
 }
 
+static uint32_t cephwrap_fs_capabilities(struct vfs_handle_struct *handle,
+                                        enum timestamp_set_resolution *p_ts_res)
+{
+       uint32_t caps = FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES;
+
+#ifdef HAVE_CEPH_STATX
+       *p_ts_res = TIMESTAMP_SET_NT_OR_BETTER;
+#else
+       *p_ts_res = TIMESTAMP_SET_MSEC;
+#endif
+
+       return caps;
+}
+
 /* Directory operations */
 
 static DIR *cephwrap_opendir(struct vfs_handle_struct *handle,
@@ -1399,6 +1413,7 @@ static struct vfs_fn_pointers ceph_fns = {
        .get_quota_fn = cephwrap_get_quota,
        .set_quota_fn = cephwrap_set_quota,
        .statvfs_fn = cephwrap_statvfs,
+       .fs_capabilities_fn = cephwrap_fs_capabilities,
 
        /* Directory operations */