1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-27 22:50:26 +03:00

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

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

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

(cherry picked from commit 0edce86e97a49f4bd79f4431015ac2b788105e46)
This commit is contained in:
Sachin Prabhu 2017-11-14 15:51:44 +05:30 committed by Stefan Metzmacher
parent a46dc61351
commit 4d47c72206
2 changed files with 31 additions and 1 deletions

View File

@ -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,

View File

@ -1575,6 +1575,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')