[PATCH] vfs_ceph: add fs_capabilities hook to avoid local statvfs

Jeremy Allison jra at samba.org
Wed Jan 10 01:05:22 UTC 2018


On Wed, Jan 10, 2018 at 01:45:04AM +0100, David Disseldorp via samba-technical wrote:
> Patch attached. Feedback/push appreciated.

Oh, yes - sys_statvfs() against a ceph filesystem path isn't
good. RB+ and pushed.

As an additional patch, should we change vfswrap_fs_capabilities()
to go through SMB_VFS_STATVFS() instead of calling locally, or
is there a reason for calling the system function (I have a
vague recollection around this) ?

Jeremy.

> From 97335a18bac7cd2d1445b9de0358ceacdbb16a3f Mon Sep 17 00:00:00 2001
> From: David Disseldorp <ddiss at samba.org>
> Date: Wed, 10 Jan 2018 01:37:14 +0100
> Subject: [PATCH] vfs_ceph: add fs_capabilities hook to avoid local statvfs
> 
> 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 at samba.org>
> ---
>  source3/modules/vfs_ceph.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c
> index b4a7ceef105..d61213110e0 100644
> --- a/source3/modules/vfs_ceph.c
> +++ b/source3/modules/vfs_ceph.c
> @@ -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 */
>  
> -- 
> 2.13.6
> 




More information about the samba-technical mailing list