summaryrefslogtreecommitdiff
path: root/source3/modules/gpfs.c
diff options
context:
space:
mode:
authorChristof Schmitt <christof.schmitt@us.ibm.com>2012-03-08 13:57:12 -0800
committerChristian Ambach <ambi@samba.org>2012-03-22 18:41:22 +0100
commit0a896094c61fa1eec7dbb5bb35485747cdc1549d (patch)
treeeb63f518b3742eefe802acf0fc987937c0a9a508 /source3/modules/gpfs.c
parent62616784ae5460bfd8f68ccfe596f80f55727b87 (diff)
downloadsamba-0a896094c61fa1eec7dbb5bb35485747cdc1549d.tar.gz
samba-0a896094c61fa1eec7dbb5bb35485747cdc1549d.tar.bz2
samba-0a896094c61fa1eec7dbb5bb35485747cdc1549d.zip
s3:vfs_gpfs: Implement fallocate callback for GPFS
GPFS provides the gpfs_prealloc call. Implement the fallocate callback with mode VFS_FALLOCATE_EXTEND_SIZE using this call. There is no support for VFS_FALLOCATE_KEEP_SIZE, so report this mode as not available.
Diffstat (limited to 'source3/modules/gpfs.c')
-rw-r--r--source3/modules/gpfs.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
index f17c6bb252..2cbf0b501a 100644
--- a/source3/modules/gpfs.c
+++ b/source3/modules/gpfs.c
@@ -35,6 +35,7 @@ static int (*gpfs_get_realfilename_path_fn)(char *pathname, char *filenamep,
static int (*gpfs_set_winattrs_path_fn)(char *pathname, int flags, struct gpfs_winattr *attrs);
static int (*gpfs_get_winattrs_path_fn)(char *pathname, struct gpfs_winattr *attrs);
static int (*gpfs_get_winattrs_fn)(int fd, struct gpfs_winattr *attrs);
+static int (*gpfs_prealloc_fn)(int fd, gpfs_off64_t startOffset, gpfs_off64_t bytesToPrealloc);
static int (*gpfs_ftruncate_fn)(int fd, gpfs_off64_t length);
static int (*gpfs_lib_init_fn)(int flags);
static int (*gpfs_quotactl_fn)(char *pathname, int cmd, int id, void *bufferP);
@@ -177,6 +178,16 @@ int smbd_fget_gpfs_winattrs(int fd, struct gpfs_winattr *attrs)
return gpfs_get_winattrs_fn(fd, attrs);
}
+int smbd_gpfs_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes)
+{
+ if (gpfs_prealloc_fn == NULL) {
+ errno = ENOSYS;
+ return -1;
+ }
+
+ return gpfs_prealloc_fn(fd, start, bytes);
+}
+
int set_gpfs_winattrs(char *pathname,int flags,struct gpfs_winattr *attrs)
{
if (gpfs_set_winattrs_path_fn == NULL) {
@@ -329,6 +340,7 @@ void init_gpfs(void)
init_gpfs_function(&gpfs_get_winattrs_path_fn,"gpfs_get_winattrs_path");
init_gpfs_function(&gpfs_set_winattrs_path_fn,"gpfs_set_winattrs_path");
init_gpfs_function(&gpfs_get_winattrs_fn,"gpfs_get_winattrs");
+ init_gpfs_function(&gpfs_prealloc_fn, "gpfs_prealloc");
init_gpfs_function(&gpfs_ftruncate_fn, "gpfs_ftruncate");
init_gpfs_function(&gpfs_lib_init_fn,"gpfs_lib_init");
init_gpfs_function(&gpfs_quotactl_fn, "gpfs_quotactl");