diff options
author | Sachin Prabhu <sprabhu@redhat.com> | 2017-11-14 15:51:44 +0530 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2018-01-17 06:09:29 +0100 |
commit | 0edce86e97a49f4bd79f4431015ac2b788105e46 (patch) | |
tree | baf18d3909811324315500788a11df4157d51485 /source3 | |
parent | e77f8e4628ba868f09cbcf2970caac6c69fe080c (diff) | |
download | samba-0edce86e97a49f4bd79f4431015ac2b788105e46.tar.gz |
vfs_glusterfs: Add fallocate support for vfs_glusterfs
Adds fallocate support to the vfs glusterfs plugin.
v2: Add check for glusterfs-api version.
RHBZ: 1478875
Signed-off-by: Sachin Prabhu <sprabhu@redhat.com>
Reviewed-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Wed Jan 17 06:09:29 CET 2018 on sn-devel-144
Diffstat (limited to 'source3')
-rw-r--r-- | source3/modules/vfs_glusterfs.c | 28 | ||||
-rw-r--r-- | source3/wscript | 4 |
2 files changed, 31 insertions, 1 deletions
diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c index 953c46af4cd..f9a96fa004d 100644 --- a/source3/modules/vfs_glusterfs.c +++ b/source3/modules/vfs_glusterfs.c @@ -464,6 +464,10 @@ static uint32_t vfs_gluster_fs_capabilities(struct vfs_handle_struct *handle, { uint32_t caps = FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES; +#ifdef HAVE_GFAPI_VER_6 + caps |= FILE_SUPPORTS_SPARSE_FILES; +#endif + #ifdef STAT_HAVE_NSEC *p_ts_res = TIMESTAMP_SET_NT_OR_BETTER; #endif @@ -1148,9 +1152,31 @@ static int vfs_gluster_fallocate(struct vfs_handle_struct *handle, uint32_t mode, off_t offset, off_t len) { - /* TODO: add support using glfs_fallocate() and glfs_zerofill() */ +#ifdef HAVE_GFAPI_VER_6 + int keep_size, punch_hole; + + keep_size = mode & VFS_FALLOCATE_FL_KEEP_SIZE; + punch_hole = mode & VFS_FALLOCATE_FL_PUNCH_HOLE; + + mode &= ~(VFS_FALLOCATE_FL_KEEP_SIZE|VFS_FALLOCATE_FL_PUNCH_HOLE); + if (mode != 0) { + errno = ENOTSUP; + return -1; + } + + if (punch_hole) { + return glfs_discard(*(glfs_fd_t **) + VFS_FETCH_FSP_EXTENSION(handle, fsp), + offset, len); + } + + return glfs_fallocate(*(glfs_fd_t **) + VFS_FETCH_FSP_EXTENSION(handle, fsp), + keep_size, offset, len); +#else errno = ENOTSUP; return -1; +#endif } static struct smb_filename *vfs_gluster_realpath(struct vfs_handle_struct *handle, diff --git a/source3/wscript b/source3/wscript index 0f8fe5452da..e81a212b448 100644 --- a/source3/wscript +++ b/source3/wscript @@ -1568,6 +1568,10 @@ main() { conf.undefine('HAVE_GLUSTERFS') else: conf.undefine('HAVE_GLUSTERFS') + + conf.CHECK_CFG(package='glusterfs-api', args='"glusterfs-api >= 6" --cflags --libs', + msg='Checking for glusterfs-api >= 6', + uselib_store="GFAPI_VER_6") else: conf.SET_TARGET_TYPE('gfapi', 'EMPTY') conf.undefine('HAVE_GLUSTERFS') |