[PATCHES] Reorganize code for wrapping gpfs library

Christof Schmitt cs at samba.org
Wed Feb 18 16:45:04 MST 2015


FYI, i am working on an updated patch series, please do not push yet.

Christof

On Wed, Feb 11, 2015 at 04:11:48PM -0700, Christof Schmitt wrote:
> The attached patch series cleans up and reorganizes the wrapper around
> the gpfs library. The library is only dynamically loaded to avoid
> packaging dependencies between Samba and gpfs and to also allow the
> usage of one Samba build across different gpfs versions; missing
> functions are only a soft-error with fallback to the default code paths.
> 
> Currently, the various parts of the vfs_gpfs module are spread across
> the vfs_gpfs.c and gpfs.c files. After this patch series, the vfs_gpfs.c
> file contains all functionality and the (renamed) gpfswrap.c is only a
> thin wrapper around the gpfs library.
> 
> Regards,
> 
> Christof

> From 45c5aab47be03ddffbf5f4bdbdca90bd16a60cf3 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Fri, 5 Dec 2014 11:10:50 -0700
> Subject: [PATCH 01/32] gpfs: Always use gpfs_fcntl.h headerfile
> 
> gpfs_gpl.h no longer exists, everything from that header file has been
> merged to gpfs.h. gpfs_fcntl.h implicitly includes gpfs.h. Simplify the
> code by only looking for gpfs_fcntl.h and including that file.
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |    3 +--
>  source3/modules/vfs_gpfs.c |    2 +-
>  source3/wscript            |    2 +-
>  3 files changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index 284e65b..a9f267d 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -22,9 +22,8 @@
>  #include "smbd/smbd.h"
>  
>  #include <fcntl.h>
> +#include <gpfs_fcntl.h>
>  #include "libcli/security/security.h"
> -#include "gpfs_fcntl.h"
> -#include "gpfs_gpl.h"
>  #include "vfs_gpfs.h"
>  
>  static int (*gpfs_set_share_fn)(int fd, unsigned int allow, unsigned int deny);
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 6ead65b..83c5f5b 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -30,7 +30,7 @@
>  #undef DBGC_CLASS
>  #define DBGC_CLASS DBGC_VFS
>  
> -#include <gpfs_gpl.h>
> +#include <gpfs_fcntl.h>
>  #include "nfs4_acls.h"
>  #include "vfs_gpfs.h"
>  #include "system/filesys.h"
> diff --git a/source3/wscript b/source3/wscript
> index bb0f19d..f1dda51 100644
> --- a/source3/wscript
> +++ b/source3/wscript
> @@ -1492,7 +1492,7 @@ main() {
>              Logs.warn("pthreadpool support cannot be enabled when pthread support was not found")
>              conf.undefine('WITH_PTHREADPOOL')
>  
> -    if conf.CHECK_HEADERS('gpfs_gpl.h'):
> +    if conf.CHECK_HEADERS('gpfs_fcntl.h'):
>          conf.DEFINE('HAVE_GPFS', '1')
>  
>      if (conf.CHECK_HEADERS('linux/ioctl.h sys/ioctl.h linux/fs.h') and
> -- 
> 1.7.1
> 
> 
> From 3016551fe6010634cf507705893d59bbdd46f3ab Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Fri, 5 Dec 2014 11:42:30 -0700
> Subject: [PATCH 02/32] gpfs: Look for gpfs header files also in /usr/lpp/mmfs/include/
> 
> That is the default directory for the gpfs header files.
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/wscript_build |    3 ++-
>  source3/wscript               |    3 ++-
>  2 files changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/source3/modules/wscript_build b/source3/modules/wscript_build
> index e2d4fde..7fe66ec 100644
> --- a/source3/modules/wscript_build
> +++ b/source3/modules/wscript_build
> @@ -279,7 +279,8 @@ bld.SAMBA3_MODULE('vfs_gpfs',
>                   deps='NFS4_ACLS non_posix_acls',
>                   init_function='',
>                   internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_gpfs'),
> -                 enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_gpfs'))
> +                 enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_gpfs'),
> +                 includes=bld.CONFIG_GET('CPPPATH_GPFS'))
>  
>  vfs_notify_fam_deps='samba-util '
>  if bld.CONFIG_SET('SAMBA_FAM_LIBS'):
> diff --git a/source3/wscript b/source3/wscript
> index f1dda51..63bca9d 100644
> --- a/source3/wscript
> +++ b/source3/wscript
> @@ -1492,7 +1492,8 @@ main() {
>              Logs.warn("pthreadpool support cannot be enabled when pthread support was not found")
>              conf.undefine('WITH_PTHREADPOOL')
>  
> -    if conf.CHECK_HEADERS('gpfs_fcntl.h'):
> +    conf.env['CPPPATH_GPFS'] = '/usr/lpp/mmfs/include/'
> +    if conf.CHECK_HEADERS('gpfs_fcntl.h', False, False, "gpfs"):
>          conf.DEFINE('HAVE_GPFS', '1')
>  
>      if (conf.CHECK_HEADERS('linux/ioctl.h sys/ioctl.h linux/fs.h') and
> -- 
> 1.7.1
> 
> 
> From 5fdef746fa0711329c1620b328927e9ac623b536 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Fri, 5 Dec 2014 11:46:25 -0700
> Subject: [PATCH 03/32] gpfs: Remove search for libgpfs_gpl.so
> 
> Similar to the header files, libgpfs_gpl.so no longer exists. The
> library is now always called libgpfs.so.
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c |   12 ++----------
>  1 files changed, 2 insertions(+), 10 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index a9f267d..b2ca704 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -369,17 +369,9 @@ static bool init_gpfs_function_lib(void *plibhandle_pointer,
>  static bool init_gpfs_function(void *fn_pointer, const char *fn_name)
>  {
>  	static void *libgpfs_handle = NULL;
> -	static void *libgpfs_gpl_handle = NULL;
>  
> -	if (init_gpfs_function_lib(&libgpfs_handle, "libgpfs.so",
> -				   fn_pointer, fn_name)) {
> -		return true;
> -	}
> -	if (init_gpfs_function_lib(&libgpfs_gpl_handle, "libgpfs_gpl.so",
> -				   fn_pointer, fn_name)) {
> -		return true;
> -	}
> -	return false;
> +	return init_gpfs_function_lib(&libgpfs_handle, "libgpfs.so",
> +				      fn_pointer, fn_name);
>  }
>  
>  void init_gpfs(void)
> -- 
> 1.7.1
> 
> 
> From 03d0495f49ba43fa08810ac4ad5ebf38e900a0ed Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 14:45:20 -0700
> Subject: [PATCH 04/32] gpfs: Simplify initialization for gpfs library wrapper
> 
> Merge the code for initializing the function pointers in one function.
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   97 +++++++++++++++-----------------------------
>  source3/modules/vfs_gpfs.c |    7 +++-
>  source3/modules/vfs_gpfs.h |    2 +-
>  3 files changed, 40 insertions(+), 66 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index b2ca704..d2f032f 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -44,6 +44,39 @@ static int (*gpfs_quotactl_fn)(char *pathname, int cmd, int id, void *bufferP);
>  static int (*gpfs_fcntl_fn)(gpfs_file_t fileDesc, void *fcntlArgP);
>  static int (*gpfs_getfilesetid_fn)(char *pathname, char *name, int *idP);
>  
> +#define INIT_GPFS_FUNC(lib, name) { name ## _fn = dlsym(lib,  #name); }
> +
> +int gpfswrap_init(void)
> +{
> +	static void *lib;
> +
> +	if (lib == NULL) {
> +		lib = dlopen("libgpfs.so", RTLD_LAZY);
> +	}
> +
> +	if (lib == NULL) {
> +		return -1;
> +	}
> +
> +	INIT_GPFS_FUNC(lib, gpfs_set_share);
> +	INIT_GPFS_FUNC(lib, gpfs_set_lease);
> +	INIT_GPFS_FUNC(lib, gpfs_getacl);
> +	INIT_GPFS_FUNC(lib, gpfs_putacl);
> +	INIT_GPFS_FUNC(lib, gpfs_get_realfilename_path);
> +	INIT_GPFS_FUNC(lib, gpfs_set_winattrs_path);
> +	INIT_GPFS_FUNC(lib, gpfs_get_winattrs_path);
> +	INIT_GPFS_FUNC(lib, gpfs_get_winattrs);
> +	INIT_GPFS_FUNC(lib, gpfs_prealloc);
> +	INIT_GPFS_FUNC(lib, gpfs_ftruncate);
> +	INIT_GPFS_FUNC(lib, gpfs_lib_init);
> +	INIT_GPFS_FUNC(lib, gpfs_set_times_path);
> +	INIT_GPFS_FUNC(lib, gpfs_quotactl);
> +	INIT_GPFS_FUNC(lib, gpfs_fcntl);
> +	INIT_GPFS_FUNC(lib, gpfs_getfilesetid);
> +
> +	return 0;
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -331,67 +364,3 @@ int smbd_gpfs_set_times_path(char *path, struct smb_file_time *ft)
>  
>  	return rc;
>  }
> -
> -static bool init_gpfs_function_lib(void *plibhandle_pointer,
> -				   const char *libname,
> -				   void *pfn_pointer, const char *fn_name)
> -{
> -	bool did_open_here = false;
> -	void **libhandle_pointer = (void **)plibhandle_pointer;
> -	void **fn_pointer = (void **)pfn_pointer;
> -
> -	DEBUG(10, ("trying to load name %s from %s\n",
> -		   fn_name, libname));
> -
> -	if (*libhandle_pointer == NULL) {
> -		*libhandle_pointer = dlopen(libname, RTLD_LAZY);
> -		did_open_here = true;
> -	}
> -	if (*libhandle_pointer == NULL) {
> -		DEBUG(10, ("Could not open lib %s\n", libname));
> -		return false;
> -	}
> -
> -	*fn_pointer = dlsym(*libhandle_pointer, fn_name);
> -	if (*fn_pointer == NULL) {
> -		DEBUG(10, ("Did not find symbol %s in lib %s\n",
> -			   fn_name, libname));
> -		if (did_open_here) {
> -			dlclose(*libhandle_pointer);
> -			*libhandle_pointer = NULL;
> -		}
> -		return false;
> -	}
> -
> -	return true;
> -}
> -
> -static bool init_gpfs_function(void *fn_pointer, const char *fn_name)
> -{
> -	static void *libgpfs_handle = NULL;
> -
> -	return init_gpfs_function_lib(&libgpfs_handle, "libgpfs.so",
> -				      fn_pointer, fn_name);
> -}
> -
> -void init_gpfs(void)
> -{
> -	init_gpfs_function(&gpfs_set_share_fn, "gpfs_set_share");
> -	init_gpfs_function(&gpfs_set_lease_fn, "gpfs_set_lease");
> -	init_gpfs_function(&gpfs_getacl_fn, "gpfs_getacl");
> -	init_gpfs_function(&gpfs_putacl_fn, "gpfs_putacl");
> -	init_gpfs_function(&gpfs_get_realfilename_path_fn,
> -			   "gpfs_get_realfilename_path");
> -	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_set_times_path_fn, "gpfs_set_times_path");
> -	init_gpfs_function(&gpfs_quotactl_fn, "gpfs_quotactl");
> -	init_gpfs_function(&gpfs_fcntl_fn, "gpfs_fcntl");
> -	init_gpfs_function(&gpfs_getfilesetid_fn, "gpfs_getfilesetid");
> -
> -	return;
> -}
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 83c5f5b..4a488a3 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -2347,7 +2347,12 @@ static struct vfs_fn_pointers vfs_gpfs_fns = {
>  NTSTATUS vfs_gpfs_init(void);
>  NTSTATUS vfs_gpfs_init(void)
>  {
> -	init_gpfs();
> +	int ret;
> +
> +	ret = gpfswrap_init();
> +	if (ret != 0) {
> +		DEBUG(1, ("Could not initialize GPFS library wrapper\n"));
> +	}
>  
>  	return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "gpfs",
>  				&vfs_gpfs_fns);
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index 728231f..d0964da 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -44,5 +44,5 @@ int get_gpfs_quota(const char *pathname, int type, int id,
>  int get_gpfs_fset_id(const char *pathname, int *fset_id);
>  int smbd_gpfs_set_times_path(char *path, struct smb_file_time *ft);
>  
> -void init_gpfs(void);
>  void smbd_gpfs_lib_init(void);
> +int gpfswrap_init(void);
> -- 
> 1.7.1
> 
> 
> From ef4038aeea3bb92387f1e817b45a8ae1871f06c0 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 14:52:15 -0700
> Subject: [PATCH 05/32] gpfs: Add helper macro for calling library functions
> 
> The check whether the function is available is always the same, the
> macro avoids some duplicated code.
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c |    9 +++++++++
>  1 files changed, 9 insertions(+), 0 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index d2f032f..4aea812 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -77,6 +77,15 @@ int gpfswrap_init(void)
>  	return 0;
>  }
>  
> +#define GPFS_CALL_LIB_FN(fn, ...)				\
> +	{							\
> +		if (fn == NULL) {				\
> +			errno = ENOSYS;			\
> +			return -1;				\
> +		}						\
> +		return fn ## _fn(__VA_ARGS__);			\
> +	}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> -- 
> 1.7.1
> 
> 
> From d806b857094bd7bab4849d223d9e92f5b0171c50 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:01:00 -0700
> Subject: [PATCH 06/32] gpfs: Introduce wrapper for gpfs_set_share
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   16 +++++++++-------
>  source3/modules/vfs_gpfs.h |    1 +
>  2 files changed, 10 insertions(+), 7 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index 4aea812..c696eca 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -86,6 +86,11 @@ int gpfswrap_init(void)
>  		return fn ## _fn(__VA_ARGS__);			\
>  	}
>  
> +int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_set_share, fd, allow, deny);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -93,10 +98,6 @@ bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  	unsigned int deny = GPFS_DENY_NONE;
>  	int result;
>  
> -	if (gpfs_set_share_fn == NULL) {
> -		return False;
> -	}
> -
>  	if ((fsp == NULL) || (fsp->fh == NULL) || (fsp->fh->fd < 0)) {
>  		/* No real file, don't disturb */
>  		return True;
> @@ -119,11 +120,12 @@ bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  	DEBUG(10, ("am=%x, allow=%d, sa=%x, deny=%d\n",
>  		   access_mask, allow, share_access, deny));
>  
> -	result = gpfs_set_share_fn(fsp->fh->fd, allow, deny);
> +	result = gpfswrap_set_share(fsp->fh->fd, allow, deny);
>  	if (result != 0) {
>  		if (errno == ENOSYS) {
> -			DEBUG(5, ("VFS module vfs_gpfs loaded, but no gpfs "
> -				  "support has been compiled into Samba. Allowing access\n"));
> +			DEBUG(5, ("VFS module vfs_gpfs loaded, but gpfs "
> +				  "set_share function support not available. "
> +				  "Allowing access\n"));
>  			return True;
>  		} else {
>  			DEBUG(10, ("gpfs_set_share failed: %s\n",
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index d0964da..b348c69 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -27,6 +27,7 @@
>  #define GPFS_GETACL_NATIVE 0x00000004
>  #endif
>  
> +int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
> -- 
> 1.7.1
> 
> 
> From c39bed2f0e20dcdb486db78aab5e91e507019724 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:06:02 -0700
> Subject: [PATCH 07/32] gpfs: Introduce wrapper for gpfs_set_lease
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   14 +++++++-------
>  source3/modules/vfs_gpfs.h |    1 +
>  2 files changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index c696eca..4913de8 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -27,7 +27,7 @@
>  #include "vfs_gpfs.h"
>  
>  static int (*gpfs_set_share_fn)(int fd, unsigned int allow, unsigned int deny);
> -static int (*gpfs_set_lease_fn)(int fd, unsigned int leaseType);
> +static int (*gpfs_set_lease_fn)(int fd, unsigned int type);
>  static int (*gpfs_getacl_fn)(char *pathname, int flags, void *acl);
>  static int (*gpfs_putacl_fn)(char *pathname, int flags, void *acl);
>  static int (*gpfs_get_realfilename_path_fn)(char *pathname, char *filenamep,
> @@ -91,6 +91,11 @@ int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny)
>  	GPFS_CALL_LIB_FN(gpfs_set_share, fd, allow, deny);
>  }
>  
> +int gpfswrap_set_lease(int fd, unsigned int type)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_set_lease, fd, type);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -140,11 +145,6 @@ int set_gpfs_lease(int fd, int leasetype)
>  {
>  	int gpfs_type = GPFS_LEASE_NONE;
>  
> -	if (gpfs_set_lease_fn == NULL) {
> -		errno = EINVAL;
> -		return -1;
> -	}
> -
>  	if (leasetype == F_RDLCK) {
>  		gpfs_type = GPFS_LEASE_READ;
>  	}
> @@ -158,7 +158,7 @@ int set_gpfs_lease(int fd, int leasetype)
>  	   each time we try this with the wrong capabilities set
>  	*/
>  	linux_set_lease_capability();
> -	return gpfs_set_lease_fn(fd, gpfs_type);
> +	return gpfswrap_set_lease(fd, gpfs_type);
>  }
>  
>  int smbd_gpfs_getacl(char *pathname, int flags, void *acl)
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index b348c69..b85282e 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -28,6 +28,7 @@
>  #endif
>  
>  int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny);
> +int gpfswrap_set_lease(int fd, unsigned int type);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
> -- 
> 1.7.1
> 
> 
> From 89819ba28121c7de7d011c830c3ea1a93d616030 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:09:07 -0700
> Subject: [PATCH 08/32] gpfs: Rename wrapper for gpfs_getacl
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   15 +++++----------
>  source3/modules/vfs_gpfs.c |    2 +-
>  source3/modules/vfs_gpfs.h |    2 +-
>  3 files changed, 7 insertions(+), 12 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index 4913de8..413421f 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -96,6 +96,11 @@ int gpfswrap_set_lease(int fd, unsigned int type)
>  	GPFS_CALL_LIB_FN(gpfs_set_lease, fd, type);
>  }
>  
> +int gpfswrap_getacl(char *pathname, int flags, void *acl)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_getacl, pathname, flags, acl);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -161,16 +166,6 @@ int set_gpfs_lease(int fd, int leasetype)
>  	return gpfswrap_set_lease(fd, gpfs_type);
>  }
>  
> -int smbd_gpfs_getacl(char *pathname, int flags, void *acl)
> -{
> -	if (gpfs_getacl_fn == NULL) {
> -		errno = ENOSYS;
> -		return -1;
> -	}
> -
> -	return gpfs_getacl_fn(pathname, flags, acl);
> -}
> -
>  int smbd_gpfs_putacl(char *pathname, int flags, void *acl)
>  {
>  	if (gpfs_putacl_fn == NULL) {
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 4a488a3..19ee6b5 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -327,7 +327,7 @@ again:
>  	*len = size;
>  
>  	errno = 0;
> -	ret = smbd_gpfs_getacl(discard_const_p(char, fname), flags, aclbuf);
> +	ret = gpfswrap_getacl(discard_const_p(char, fname), flags, aclbuf);
>  	if ((ret != 0) && (errno == ENOSPC)) {
>  		/*
>  		 * get the size needed to accommodate the complete buffer
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index b85282e..5b70c4c 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -29,10 +29,10 @@
>  
>  int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny);
>  int gpfswrap_set_lease(int fd, unsigned int type);
> +int gpfswrap_getacl(char *pathname, int flags, void *acl);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
> -int smbd_gpfs_getacl(char *pathname, int flags, void *acl);
>  int smbd_gpfs_putacl(char *pathname, int flags, void *acl);
>  int smbd_gpfs_get_realfilename_path(char *pathname, char *filenamep,
>  				    int *buflen);
> -- 
> 1.7.1
> 
> 
> From 5ae72990795ef0558b672a191a1e8994270b1ed9 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:11:18 -0700
> Subject: [PATCH 09/32] gpfs: Rename wrapper for gpfs_putacl
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   15 +++++----------
>  source3/modules/vfs_gpfs.c |   14 +++++++-------
>  source3/modules/vfs_gpfs.h |    2 +-
>  3 files changed, 13 insertions(+), 18 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index 413421f..57860e2 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -101,6 +101,11 @@ int gpfswrap_getacl(char *pathname, int flags, void *acl)
>  	GPFS_CALL_LIB_FN(gpfs_getacl, pathname, flags, acl);
>  }
>  
> +int gpfswrap_putacl(char *pathname, int flags, void *acl)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_putacl, pathname, flags, acl);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -166,16 +171,6 @@ int set_gpfs_lease(int fd, int leasetype)
>  	return gpfswrap_set_lease(fd, gpfs_type);
>  }
>  
> -int smbd_gpfs_putacl(char *pathname, int flags, void *acl)
> -{
> -	if (gpfs_putacl_fn == NULL) {
> -		errno = ENOSYS;
> -		return -1;
> -	}
> -
> -	return gpfs_putacl_fn(pathname, flags, acl);
> -}
> -
>  int smbd_gpfs_ftruncate(int fd, gpfs_off64_t length)
>  {
>  	if (gpfs_ftruncate_fn == NULL) {
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 19ee6b5..dcd866a 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -646,8 +646,8 @@ static bool gpfsacl_process_smbacl(vfs_handle_struct *handle,
>  	if (gacl == NULL) { /* out of memory */
>  		return False;
>  	}
> -	ret = smbd_gpfs_putacl(fsp->fsp_name->base_name,
> -			       GPFS_PUTACL_STRUCT | GPFS_ACL_SAMBA, gacl);
> +	ret = gpfswrap_putacl(fsp->fsp_name->base_name,
> +			      GPFS_PUTACL_STRUCT | GPFS_ACL_SAMBA, gacl);
>  
>  	if ((ret != 0) && (errno == EINVAL)) {
>  		DEBUG(10, ("Retry without nfs41 control flags\n"));
> @@ -656,9 +656,9 @@ static bool gpfsacl_process_smbacl(vfs_handle_struct *handle,
>  		if (gacl == NULL) { /* out of memory */
>  			return False;
>  		}
> -		ret = smbd_gpfs_putacl(fsp->fsp_name->base_name,
> -				       GPFS_PUTACL_STRUCT | GPFS_ACL_SAMBA,
> -				       gacl);
> +		ret = gpfswrap_putacl(fsp->fsp_name->base_name,
> +				      GPFS_PUTACL_STRUCT | GPFS_ACL_SAMBA,
> +				      gacl);
>  	}
>  
>  	if (ret != 0) {
> @@ -1127,8 +1127,8 @@ static int gpfsacl_sys_acl_set_file(vfs_handle_struct *handle,
>  		return -1;
>  	}
>  
> -	result = smbd_gpfs_putacl(discard_const_p(char, name),
> -				  GPFS_PUTACL_STRUCT|GPFS_ACL_SAMBA, gpfs_acl);
> +	result = gpfswrap_putacl(discard_const_p(char, name),
> +				 GPFS_PUTACL_STRUCT|GPFS_ACL_SAMBA, gpfs_acl);
>  
>  	SAFE_FREE(gpfs_acl);
>  	return result;
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index 5b70c4c..8e630f5 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -30,10 +30,10 @@
>  int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny);
>  int gpfswrap_set_lease(int fd, unsigned int type);
>  int gpfswrap_getacl(char *pathname, int flags, void *acl);
> +int gpfswrap_putacl(char *pathname, int flags, void *acl);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
> -int smbd_gpfs_putacl(char *pathname, int flags, void *acl);
>  int smbd_gpfs_get_realfilename_path(char *pathname, char *filenamep,
>  				    int *buflen);
>  int smbd_fget_gpfs_winattrs(int fd, struct gpfs_winattr *attrs);
> -- 
> 1.7.1
> 
> 
> From 71e957887b7e919b8041d6065b535bb66cc7a6a4 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:15:53 -0700
> Subject: [PATCH 10/32] gpfs: Rename wrapper for gpfs_get_realfilename_path
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   18 ++++++------------
>  source3/modules/vfs_gpfs.c |    4 ++--
>  source3/modules/vfs_gpfs.h |    3 +--
>  3 files changed, 9 insertions(+), 16 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index 57860e2..b36f736 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -31,7 +31,7 @@ static int (*gpfs_set_lease_fn)(int fd, unsigned int type);
>  static int (*gpfs_getacl_fn)(char *pathname, int flags, void *acl);
>  static int (*gpfs_putacl_fn)(char *pathname, int flags, void *acl);
>  static int (*gpfs_get_realfilename_path_fn)(char *pathname, char *filenamep,
> -					    int *buflen);
> +					    int *len);
>  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);
> @@ -106,6 +106,11 @@ int gpfswrap_putacl(char *pathname, int flags, void *acl)
>  	GPFS_CALL_LIB_FN(gpfs_putacl, pathname, flags, acl);
>  }
>  
> +int gpfswrap_get_realfilename_path(char *pathname, char *filenamep, int *len)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_get_realfilename_path, pathname, filenamep, len);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -181,17 +186,6 @@ int smbd_gpfs_ftruncate(int fd, gpfs_off64_t length)
>  	return gpfs_ftruncate_fn(fd, length);
>  }
>  
> -int smbd_gpfs_get_realfilename_path(char *pathname, char *filenamep,
> -				    int *buflen)
> -{
> -	if (gpfs_get_realfilename_path_fn == NULL) {
> -		errno = ENOSYS;
> -		return -1;
> -	}
> -
> -	return gpfs_get_realfilename_path_fn(pathname, filenamep, buflen);
> -}
> -
>  int get_gpfs_winattrs(char *pathname,struct gpfs_winattr *attrs)
>  {
>  	if (gpfs_get_winattrs_path_fn == NULL) {
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index dcd866a..92af873 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -181,8 +181,8 @@ static int vfs_gpfs_get_real_filename(struct vfs_handle_struct *handle,
>  
>  	buflen = sizeof(real_pathname) - 1;
>  
> -	result = smbd_gpfs_get_realfilename_path(full_path, real_pathname,
> -						 &buflen);
> +	result = gpfswrap_get_realfilename_path(full_path, real_pathname,
> +						&buflen);
>  
>  	TALLOC_FREE(full_path);
>  
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index 8e630f5..e788956 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -31,11 +31,10 @@ int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny);
>  int gpfswrap_set_lease(int fd, unsigned int type);
>  int gpfswrap_getacl(char *pathname, int flags, void *acl);
>  int gpfswrap_putacl(char *pathname, int flags, void *acl);
> +int gpfswrap_get_realfilename_path(char *pathname, char *filenamep, int *len);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
> -int smbd_gpfs_get_realfilename_path(char *pathname, char *filenamep,
> -				    int *buflen);
>  int smbd_fget_gpfs_winattrs(int fd, struct gpfs_winattr *attrs);
>  int get_gpfs_winattrs(char * pathname,struct gpfs_winattr *attrs);
>  int set_gpfs_winattrs(char * pathname,int flags,struct gpfs_winattr *attrs);
> -- 
> 1.7.1
> 
> 
> From 2509bc553f965544f40b0d4d21d4e72cf8a90678 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:22:27 -0700
> Subject: [PATCH 11/32] gpfs: Rename wrapper for gpfs_set_winattrs_path
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   20 ++++++++------------
>  source3/modules/vfs_gpfs.c |    9 +++++----
>  source3/modules/vfs_gpfs.h |    3 ++-
>  3 files changed, 15 insertions(+), 17 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index b36f736..e1fb26d 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -32,7 +32,8 @@ static int (*gpfs_getacl_fn)(char *pathname, int flags, void *acl);
>  static int (*gpfs_putacl_fn)(char *pathname, int flags, void *acl);
>  static int (*gpfs_get_realfilename_path_fn)(char *pathname, char *filenamep,
>  					    int *len);
> -static int (*gpfs_set_winattrs_path_fn)(char *pathname, int flags, struct gpfs_winattr *attrs);
> +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);
> @@ -111,6 +112,12 @@ int gpfswrap_get_realfilename_path(char *pathname, char *filenamep, int *len)
>  	GPFS_CALL_LIB_FN(gpfs_get_realfilename_path, pathname, filenamep, len);
>  }
>  
> +int gpfswrap_set_winattrs_path(char *pathname, int flags,
> +			       struct gpfs_winattr *attrs)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_set_winattrs_path, pathname, flags, attrs);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -216,17 +223,6 @@ int smbd_gpfs_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes)
>  	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) {
> -                errno = ENOSYS;
> -                return -1;
> -        }
> -
> -        DEBUG(10, ("gpfs_set_winattrs_path:open call %s\n",pathname));
> -        return gpfs_set_winattrs_path_fn(pathname,flags, attrs);
> -}
> -
>  int get_gpfs_quota(const char *pathname, int type, int id,
>  		   struct gpfs_quotaInfo *qi)
>  {
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 92af873..8214352 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -1425,8 +1425,8 @@ static int gpfs_set_xattr(struct vfs_handle_struct *handle,  const char *path,
>  	}
>  
>  
> -        ret = set_gpfs_winattrs(discard_const_p(char, path),
> -				GPFS_WINATTR_SET_ATTRS, &attrs);
> +	ret = gpfswrap_set_winattrs_path(discard_const_p(char, path),
> +					 GPFS_WINATTR_SET_ATTRS, &attrs);
>          if ( ret == -1){
>  		if (errno == ENOSYS) {
>  			return SMB_VFS_NEXT_SETXATTR(handle, path, name, value,
> @@ -1726,8 +1726,9 @@ static int vfs_gpfs_ntimes(struct vfs_handle_struct *handle,
>          attrs.creationTime.tv_sec = ft->create_time.tv_sec;
>          attrs.creationTime.tv_nsec = ft->create_time.tv_nsec;
>  
> -        ret = set_gpfs_winattrs(discard_const_p(char, path),
> -                                GPFS_WINATTR_SET_CREATION_TIME, &attrs);
> +	ret = gpfswrap_set_winattrs_path(discard_const_p(char, path),
> +					 GPFS_WINATTR_SET_CREATION_TIME,
> +					 &attrs);
>          if(ret == -1 && errno != ENOSYS){
>                  DEBUG(1,("vfs_gpfs_ntimes: set GPFS ntimes failed %d\n",ret));
>  	        return -1;
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index e788956..9db3d9d 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -32,12 +32,13 @@ int gpfswrap_set_lease(int fd, unsigned int type);
>  int gpfswrap_getacl(char *pathname, int flags, void *acl);
>  int gpfswrap_putacl(char *pathname, int flags, void *acl);
>  int gpfswrap_get_realfilename_path(char *pathname, char *filenamep, int *len);
> +int gpfswrap_set_winattrs_path(char *pathname, int flags,
> +			       struct gpfs_winattr *attrs);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
>  int smbd_fget_gpfs_winattrs(int fd, struct gpfs_winattr *attrs);
>  int get_gpfs_winattrs(char * pathname,struct gpfs_winattr *attrs);
> -int set_gpfs_winattrs(char * pathname,int flags,struct gpfs_winattr *attrs);
>  int smbd_gpfs_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes);
>  int smbd_gpfs_ftruncate(int fd, gpfs_off64_t length);
>  int get_gpfs_quota(const char *pathname, int type, int id,
> -- 
> 1.7.1
> 
> 
> From 334b2d64dea85949fcf16fb1c19d284c7ff010a7 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:27:05 -0700
> Subject: [PATCH 12/32] gpfs: Rename wrapper for gpfs_get_winattrs_path
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   18 +++++++-----------
>  source3/modules/vfs_gpfs.c |    8 ++++----
>  source3/modules/vfs_gpfs.h |    2 +-
>  3 files changed, 12 insertions(+), 16 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index e1fb26d..87f4168 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -34,7 +34,8 @@ static int (*gpfs_get_realfilename_path_fn)(char *pathname, char *filenamep,
>  					    int *len);
>  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_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);
> @@ -118,6 +119,11 @@ int gpfswrap_set_winattrs_path(char *pathname, int flags,
>  	GPFS_CALL_LIB_FN(gpfs_set_winattrs_path, pathname, flags, attrs);
>  }
>  
> +int gpfswrap_get_winattrs_path(char *pathname, struct gpfs_winattr *attrs)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_get_winattrs_path, pathname, attrs);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -193,16 +199,6 @@ int smbd_gpfs_ftruncate(int fd, gpfs_off64_t length)
>  	return gpfs_ftruncate_fn(fd, length);
>  }
>  
> -int get_gpfs_winattrs(char *pathname,struct gpfs_winattr *attrs)
> -{
> -	if (gpfs_get_winattrs_path_fn == NULL) {
> -                errno = ENOSYS;
> -                return -1;
> -        }
> -        DEBUG(10, ("gpfs_get_winattrs_path:open call %s\n",pathname));
> -        return gpfs_get_winattrs_path_fn(pathname, attrs);
> -}
> -
>  int smbd_fget_gpfs_winattrs(int fd, struct gpfs_winattr *attrs)
>  {
>  	if (gpfs_get_winattrs_fn == NULL) {
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 8214352..0ea72e9 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -1466,7 +1466,7 @@ static ssize_t gpfs_get_xattr(struct vfs_handle_struct *handle,  const char *pat
>                  return SMB_VFS_NEXT_GETXATTR(handle,path,name,value,size);
>          }
>  
> -        ret = get_gpfs_winattrs(discard_const_p(char, path), &attrs);
> +	ret = gpfswrap_get_winattrs_path(discard_const_p(char, path), &attrs);
>          if ( ret == -1){
>  		int dbg_lvl;
>  
> @@ -1584,7 +1584,7 @@ static int vfs_gpfs_stat(struct vfs_handle_struct *handle,
>  		errno = map_errno_from_nt_status(status);
>  		return -1;
>  	}
> -	ret = get_gpfs_winattrs(discard_const_p(char, fname), &attrs);
> +	ret = gpfswrap_get_winattrs_path(discard_const_p(char, fname), &attrs);
>  	TALLOC_FREE(fname);
>  	if (ret == 0) {
>  		smb_fname->st.st_ex_calculated_birthtime = false;
> @@ -1660,7 +1660,7 @@ static int vfs_gpfs_lstat(struct vfs_handle_struct *handle,
>  		errno = map_errno_from_nt_status(status);
>  		return -1;
>  	}
> -	ret = get_gpfs_winattrs(discard_const_p(char, path), &attrs);
> +	ret = gpfswrap_get_winattrs_path(discard_const_p(char, path), &attrs);
>  	TALLOC_FREE(path);
>  	if (ret == 0) {
>  		smb_fname->st.st_ex_calculated_birthtime = false;
> @@ -1818,7 +1818,7 @@ static bool vfs_gpfs_is_offline(struct vfs_handle_struct *handle,
>  		return -1;
>  	}
>  
> -	ret = get_gpfs_winattrs(path, &attrs);
> +	ret = gpfswrap_get_winattrs_path(path, &attrs);
>  	if (ret == -1) {
>  		TALLOC_FREE(path);
>  		return false;
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index 9db3d9d..afb8884 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -34,11 +34,11 @@ int gpfswrap_putacl(char *pathname, int flags, void *acl);
>  int gpfswrap_get_realfilename_path(char *pathname, char *filenamep, int *len);
>  int gpfswrap_set_winattrs_path(char *pathname, int flags,
>  			       struct gpfs_winattr *attrs);
> +int gpfswrap_get_winattrs_path(char *pathname, struct gpfs_winattr *attrs);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
>  int smbd_fget_gpfs_winattrs(int fd, struct gpfs_winattr *attrs);
> -int get_gpfs_winattrs(char * pathname,struct gpfs_winattr *attrs);
>  int smbd_gpfs_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes);
>  int smbd_gpfs_ftruncate(int fd, gpfs_off64_t length);
>  int get_gpfs_quota(const char *pathname, int type, int id,
> -- 
> 1.7.1
> 
> 
> From 5d260a3ba7b1b5777a206845beb59290d58e07ed Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:29:19 -0700
> Subject: [PATCH 13/32] gpfs: Rename wrapper for gpfs_get_winattrs
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   15 +++++----------
>  source3/modules/vfs_gpfs.c |    2 +-
>  source3/modules/vfs_gpfs.h |    2 +-
>  3 files changed, 7 insertions(+), 12 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index 87f4168..0b18cb3 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -124,6 +124,11 @@ int gpfswrap_get_winattrs_path(char *pathname, struct gpfs_winattr *attrs)
>  	GPFS_CALL_LIB_FN(gpfs_get_winattrs_path, pathname, attrs);
>  }
>  
> +int gpfswrap_get_winattrs(int fd, struct gpfs_winattr *attrs)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_get_winattrs, fd, attrs);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -199,16 +204,6 @@ int smbd_gpfs_ftruncate(int fd, gpfs_off64_t length)
>  	return gpfs_ftruncate_fn(fd, length);
>  }
>  
> -int smbd_fget_gpfs_winattrs(int fd, struct gpfs_winattr *attrs)
> -{
> -	if (gpfs_get_winattrs_fn == NULL) {
> -                errno = ENOSYS;
> -                return -1;
> -        }
> -        DEBUG(10, ("gpfs_get_winattrs:open call %d\n", fd));
> -        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) {
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 0ea72e9..4e3ea95 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -1616,7 +1616,7 @@ static int vfs_gpfs_fstat(struct vfs_handle_struct *handle,
>  		return 0;
>  	}
>  
> -	ret = smbd_fget_gpfs_winattrs(fsp->fh->fd, &attrs);
> +	ret = gpfswrap_get_winattrs(fsp->fh->fd, &attrs);
>  	if (ret == 0) {
>  		sbuf->st_ex_calculated_birthtime = false;
>  		sbuf->st_ex_btime.tv_sec = attrs.creationTime.tv_sec;
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index afb8884..c5e0a20 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -35,10 +35,10 @@ int gpfswrap_get_realfilename_path(char *pathname, char *filenamep, int *len);
>  int gpfswrap_set_winattrs_path(char *pathname, int flags,
>  			       struct gpfs_winattr *attrs);
>  int gpfswrap_get_winattrs_path(char *pathname, struct gpfs_winattr *attrs);
> +int gpfswrap_get_winattrs(int fd, struct gpfs_winattr *attrs);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
> -int smbd_fget_gpfs_winattrs(int fd, struct gpfs_winattr *attrs);
>  int smbd_gpfs_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes);
>  int smbd_gpfs_ftruncate(int fd, gpfs_off64_t length);
>  int get_gpfs_quota(const char *pathname, int type, int id,
> -- 
> 1.7.1
> 
> 
> From 582e63a2b44cb544500d03d1e3a8da32c00b366e Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:31:42 -0700
> Subject: [PATCH 14/32] gpfs: Rename wrapper for gpfs_prealloc
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   17 ++++++-----------
>  source3/modules/vfs_gpfs.c |    2 +-
>  source3/modules/vfs_gpfs.h |    2 +-
>  3 files changed, 8 insertions(+), 13 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index 0b18cb3..e6b0c17 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -37,7 +37,7 @@ static int (*gpfs_set_winattrs_path_fn)(char *pathname, int flags,
>  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_prealloc_fn)(int fd, gpfs_off64_t start, gpfs_off64_t bytes);
>  static int (*gpfs_ftruncate_fn)(int fd, gpfs_off64_t length);
>  static int (*gpfs_lib_init_fn)(int flags);
>  static int (*gpfs_set_times_path_fn)(char *pathname, int flags,
> @@ -129,6 +129,11 @@ int gpfswrap_get_winattrs(int fd, struct gpfs_winattr *attrs)
>  	GPFS_CALL_LIB_FN(gpfs_get_winattrs, fd, attrs);
>  }
>  
> +int gpfswrap_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_prealloc, fd, start, bytes);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -204,16 +209,6 @@ int smbd_gpfs_ftruncate(int fd, gpfs_off64_t length)
>  	return gpfs_ftruncate_fn(fd, length);
>  }
>  
> -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 get_gpfs_quota(const char *pathname, int type, int id,
>  		   struct gpfs_quotaInfo *qi)
>  {
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 4e3ea95..99b2121 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -1760,7 +1760,7 @@ static int vfs_gpfs_fallocate(struct vfs_handle_struct *handle,
>  		return -1;
>  	}
>  
> -	ret = smbd_gpfs_prealloc(fsp->fh->fd, offset, len);
> +	ret = gpfswrap_prealloc(fsp->fh->fd, offset, len);
>  
>  	if (ret == -1 && errno != ENOSYS) {
>  		DEBUG(0, ("GPFS prealloc failed: %s\n", strerror(errno)));
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index c5e0a20..9c87b59 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -36,10 +36,10 @@ int gpfswrap_set_winattrs_path(char *pathname, int flags,
>  			       struct gpfs_winattr *attrs);
>  int gpfswrap_get_winattrs_path(char *pathname, struct gpfs_winattr *attrs);
>  int gpfswrap_get_winattrs(int fd, struct gpfs_winattr *attrs);
> +int gpfswrap_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
> -int smbd_gpfs_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes);
>  int smbd_gpfs_ftruncate(int fd, gpfs_off64_t length);
>  int get_gpfs_quota(const char *pathname, int type, int id,
>  		   struct gpfs_quotaInfo *qi);
> -- 
> 1.7.1
> 
> 
> From 90d029ea2438c03d02334f45f27e96879a571da5 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:33:23 -0700
> Subject: [PATCH 15/32] gpfs: Rename wrapper for gpfs_ftruncate
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   15 +++++----------
>  source3/modules/vfs_gpfs.c |    2 +-
>  source3/modules/vfs_gpfs.h |    2 +-
>  3 files changed, 7 insertions(+), 12 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index e6b0c17..e80f02d 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -134,6 +134,11 @@ int gpfswrap_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes)
>  	GPFS_CALL_LIB_FN(gpfs_prealloc, fd, start, bytes);
>  }
>  
> +int gpfswrap_ftruncate(int fd, gpfs_off64_t length)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_ftruncate, fd, length);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -199,16 +204,6 @@ int set_gpfs_lease(int fd, int leasetype)
>  	return gpfswrap_set_lease(fd, gpfs_type);
>  }
>  
> -int smbd_gpfs_ftruncate(int fd, gpfs_off64_t length)
> -{
> -	if (gpfs_ftruncate_fn == NULL) {
> -		errno = ENOSYS;
> -		return -1;
> -	}
> -
> -	return gpfs_ftruncate_fn(fd, length);
> -}
> -
>  int get_gpfs_quota(const char *pathname, int type, int id,
>  		   struct gpfs_quotaInfo *qi)
>  {
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 99b2121..25910ad 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -1787,7 +1787,7 @@ static int vfs_gpfs_ftruncate(vfs_handle_struct *handle, files_struct *fsp,
>  		return SMB_VFS_NEXT_FTRUNCATE(handle, fsp, len);
>  	}
>  
> -	result = smbd_gpfs_ftruncate(fsp->fh->fd, len);
> +	result = gpfswrap_ftruncate(fsp->fh->fd, len);
>  	if ((result == -1) && (errno == ENOSYS)) {
>  		return SMB_VFS_NEXT_FTRUNCATE(handle, fsp, len);
>  	}
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index 9c87b59..dfe149d 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -37,10 +37,10 @@ int gpfswrap_set_winattrs_path(char *pathname, int flags,
>  int gpfswrap_get_winattrs_path(char *pathname, struct gpfs_winattr *attrs);
>  int gpfswrap_get_winattrs(int fd, struct gpfs_winattr *attrs);
>  int gpfswrap_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes);
> +int gpfswrap_ftruncate(int fd, gpfs_off64_t length);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
> -int smbd_gpfs_ftruncate(int fd, gpfs_off64_t length);
>  int get_gpfs_quota(const char *pathname, int type, int id,
>  		   struct gpfs_quotaInfo *qi);
>  int get_gpfs_fset_id(const char *pathname, int *fset_id);
> -- 
> 1.7.1
> 
> 
> From 61110fbf0919fb822ba40ca021544112944b4d0d Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:34:59 -0700
> Subject: [PATCH 16/32] gpfs: Rename wrapper for gpfs_lib_init
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   16 +++++-----------
>  source3/modules/vfs_gpfs.c |    2 +-
>  source3/modules/vfs_gpfs.h |    2 +-
>  3 files changed, 7 insertions(+), 13 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index e80f02d..cc881a2 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -139,6 +139,11 @@ int gpfswrap_ftruncate(int fd, gpfs_off64_t length)
>  	GPFS_CALL_LIB_FN(gpfs_ftruncate, fd, length);
>  }
>  
> +int gpfswrap_lib_init(int flags)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_lib_init, flags);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -283,17 +288,6 @@ int get_gpfs_fset_id(const char *pathname, int *fset_id)
>  	return err;
>  }
>  
> -void smbd_gpfs_lib_init()
> -{
> -	if (gpfs_lib_init_fn) {
> -		int rc = gpfs_lib_init_fn(0);
> -		DEBUG(10, ("gpfs_lib_init() finished with rc %d "
> -			   "and errno %d\n", rc, errno));
> -	} else {
> -		DEBUG(10, ("libgpfs lacks gpfs_lib_init\n"));
> -	}
> -}
> -
>  static void timespec_to_gpfs_time(struct timespec ts, gpfs_timestruc_t *gt,
>  				  int idx, int *flags)
>  {
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 25910ad..46cfde6 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -1858,7 +1858,7 @@ static int vfs_gpfs_connect(struct vfs_handle_struct *handle,
>  	struct gpfs_config_data *config;
>  	int ret;
>  
> -	smbd_gpfs_lib_init();
> +	gpfswrap_lib_init(0);
>  
>  	config = talloc_zero(handle->conn, struct gpfs_config_data);
>  	if (!config) {
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index dfe149d..d3496fa 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -38,6 +38,7 @@ int gpfswrap_get_winattrs_path(char *pathname, struct gpfs_winattr *attrs);
>  int gpfswrap_get_winattrs(int fd, struct gpfs_winattr *attrs);
>  int gpfswrap_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes);
>  int gpfswrap_ftruncate(int fd, gpfs_off64_t length);
> +int gpfswrap_lib_init(int flags);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
> @@ -46,5 +47,4 @@ int get_gpfs_quota(const char *pathname, int type, int id,
>  int get_gpfs_fset_id(const char *pathname, int *fset_id);
>  int smbd_gpfs_set_times_path(char *path, struct smb_file_time *ft);
>  
> -void smbd_gpfs_lib_init(void);
>  int gpfswrap_init(void);
> -- 
> 1.7.1
> 
> 
> From 41da34e5a62798a617a5cf495f473da144bd9ee6 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:40:16 -0700
> Subject: [PATCH 17/32] gpfs: Introduce wrapper for gpfs_set_times_path
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   15 ++++++++-------
>  source3/modules/vfs_gpfs.h |    2 ++
>  2 files changed, 10 insertions(+), 7 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index cc881a2..d58ab47 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -144,6 +144,12 @@ int gpfswrap_lib_init(int flags)
>  	GPFS_CALL_LIB_FN(gpfs_lib_init, flags);
>  }
>  
> +int gpfswrap_set_times_path(char *pathname, int flags,
> +			    gpfs_timestruc_t times[4])
> +{
> +	GPFS_CALL_LIB_FN(gpfs_set_times_path, pathname, flags, times);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -305,11 +311,6 @@ int smbd_gpfs_set_times_path(char *path, struct smb_file_time *ft)
>  	int flags = 0;
>  	int rc;
>  
> -	if (!gpfs_set_times_path_fn) {
> -		errno = ENOSYS;
> -		return -1;
> -	}
> -
>  	ZERO_ARRAY(gpfs_times);
>  	timespec_to_gpfs_time(ft->atime, gpfs_times, 0, &flags);
>  	timespec_to_gpfs_time(ft->mtime, gpfs_times, 1, &flags);
> @@ -321,9 +322,9 @@ int smbd_gpfs_set_times_path(char *path, struct smb_file_time *ft)
>  		return 0;
>  	}
>  
> -	rc = gpfs_set_times_path_fn(path, flags, gpfs_times);
> +	rc = gpfswrap_set_times_path(path, flags, gpfs_times);
>  
> -	if (rc != 0) {
> +	if (rc != 0 && errno != ENOSYS) {
>  		DEBUG(1,("gpfs_set_times() returned with error %s\n",
>  			strerror(errno)));
>  	}
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index d3496fa..583cff3 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -39,6 +39,8 @@ int gpfswrap_get_winattrs(int fd, struct gpfs_winattr *attrs);
>  int gpfswrap_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes);
>  int gpfswrap_ftruncate(int fd, gpfs_off64_t length);
>  int gpfswrap_lib_init(int flags);
> +int gpfswrap_set_times_path(char *pathname, int flags,
> +			    gpfs_timestruc_t times[4]);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
> -- 
> 1.7.1
> 
> 
> From 2e1f78dd516cfc56306e5f6b9034efc52620611b Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:42:32 -0700
> Subject: [PATCH 18/32] gpfs: Introduce wrapper for gpfs_quotactl
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   18 +++++++++---------
>  source3/modules/vfs_gpfs.h |    1 +
>  2 files changed, 10 insertions(+), 9 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index d58ab47..733de00 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -42,7 +42,7 @@ static int (*gpfs_ftruncate_fn)(int fd, gpfs_off64_t length);
>  static int (*gpfs_lib_init_fn)(int flags);
>  static int (*gpfs_set_times_path_fn)(char *pathname, int flags,
>  				     gpfs_timestruc_t times[4]);
> -static int (*gpfs_quotactl_fn)(char *pathname, int cmd, int id, void *bufferP);
> +static int (*gpfs_quotactl_fn)(char *pathname, int cmd, int id, void *bufp);
>  static int (*gpfs_fcntl_fn)(gpfs_file_t fileDesc, void *fcntlArgP);
>  static int (*gpfs_getfilesetid_fn)(char *pathname, char *name, int *idP);
>  
> @@ -150,6 +150,11 @@ int gpfswrap_set_times_path(char *pathname, int flags,
>  	GPFS_CALL_LIB_FN(gpfs_set_times_path, pathname, flags, times);
>  }
>  
> +int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_quotactl, pathname, cmd, id, bufp);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -220,19 +225,14 @@ int get_gpfs_quota(const char *pathname, int type, int id,
>  {
>  	int ret;
>  
> -	if (!gpfs_quotactl_fn) {
> -		errno = ENOSYS;
> -		return -1;
> -	}
> -
>  	ZERO_STRUCTP(qi);
> -	ret = gpfs_quotactl_fn(discard_const_p(char, pathname),
> -			       GPFS_QCMD(Q_GETQUOTA, type), id, qi);
> +	ret = gpfswrap_quotactl(discard_const_p(char, pathname),
> +				GPFS_QCMD(Q_GETQUOTA, type), id, qi);
>  
>  	if (ret) {
>  		if (errno == GPFS_E_NO_QUOTA_INST) {
>  			DEBUG(10, ("Quotas disabled on GPFS filesystem.\n"));
> -		} else {
> +		} else if (errno != ENOSYS) {
>  			DEBUG(0, ("Get quota failed, type %d, id, %d, "
>  				  "errno %d.\n", type, id, errno));
>  		}
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index 583cff3..56c3a42 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -41,6 +41,7 @@ int gpfswrap_ftruncate(int fd, gpfs_off64_t length);
>  int gpfswrap_lib_init(int flags);
>  int gpfswrap_set_times_path(char *pathname, int flags,
>  			    gpfs_timestruc_t times[4]);
> +int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
> -- 
> 1.7.1
> 
> 
> From 27d25d52e8d80dac8e19fb1c5456cc3067896b2a Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:46:07 -0700
> Subject: [PATCH 19/32] gpfs: Introduce wrapper for gpfs_fcntl
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   17 ++++++++++++-----
>  source3/modules/vfs_gpfs.h |    1 +
>  2 files changed, 13 insertions(+), 5 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index 733de00..020e138 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -43,7 +43,7 @@ static int (*gpfs_lib_init_fn)(int flags);
>  static int (*gpfs_set_times_path_fn)(char *pathname, int flags,
>  				     gpfs_timestruc_t times[4]);
>  static int (*gpfs_quotactl_fn)(char *pathname, int cmd, int id, void *bufp);
> -static int (*gpfs_fcntl_fn)(gpfs_file_t fileDesc, void *fcntlArgP);
> +static int (*gpfs_fcntl_fn)(int fd, void *argp);
>  static int (*gpfs_getfilesetid_fn)(char *pathname, char *name, int *idP);
>  
>  #define INIT_GPFS_FUNC(lib, name) { name ## _fn = dlsym(lib,  #name); }
> @@ -155,6 +155,11 @@ int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp)
>  	GPFS_CALL_LIB_FN(gpfs_quotactl, pathname, cmd, id, bufp);
>  }
>  
> +int gpfswrap_fcntl(int fd, void *argp)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_fcntl, fd, argp);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -256,7 +261,7 @@ int get_gpfs_fset_id(const char *pathname, int *fset_id)
>  		gpfsGetFilesetName_t fsn;
>  	} arg;
>  
> -	if (!gpfs_fcntl_fn || !gpfs_getfilesetid_fn) {
> +	if (!gpfs_getfilesetid_fn) {
>  		errno = ENOSYS;
>  		return -1;
>  	}
> @@ -274,14 +279,16 @@ int get_gpfs_fset_id(const char *pathname, int *fset_id)
>  		return fd;
>  	}
>  
> -	err = gpfs_fcntl_fn(fd, &arg);
> +	err = gpfswrap_fcntl(fd, &arg);
>  	errno_fcntl = errno;
>  	close(fd);
>  
>  	if (err) {
>  		errno = errno_fcntl;
> -		DEBUG(1, ("GPFS_FCNTL_GET_FILESETNAME for %s failed: %s\n",
> -			  pathname, strerror(errno)));
> +		if (errno != ENOSYS) {
> +			DEBUG(1, ("GPFS_FCNTL_GET_FILESETNAME for %s failed: "
> +				  "%s\n", pathname, strerror(errno)));
> +		}
>  		return err;
>  	}
>  
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index 56c3a42..baf96b3 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -42,6 +42,7 @@ int gpfswrap_lib_init(int flags);
>  int gpfswrap_set_times_path(char *pathname, int flags,
>  			    gpfs_timestruc_t times[4]);
>  int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp);
> +int gpfswrap_fcntl(int fd, void *argp);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
> -- 
> 1.7.1
> 
> 
> From a04fd403a1b8be0c4807b80e110d814386134eff Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:47:46 -0700
> Subject: [PATCH 20/32] gpfs: Introduce wrapper for gpfs_getfilesetid
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   18 +++++++++---------
>  source3/modules/vfs_gpfs.h |    1 +
>  2 files changed, 10 insertions(+), 9 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index 020e138..b04f1be 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -44,7 +44,7 @@ static int (*gpfs_set_times_path_fn)(char *pathname, int flags,
>  				     gpfs_timestruc_t times[4]);
>  static int (*gpfs_quotactl_fn)(char *pathname, int cmd, int id, void *bufp);
>  static int (*gpfs_fcntl_fn)(int fd, void *argp);
> -static int (*gpfs_getfilesetid_fn)(char *pathname, char *name, int *idP);
> +static int (*gpfs_getfilesetid_fn)(char *pathname, char *name, int *idp);
>  
>  #define INIT_GPFS_FUNC(lib, name) { name ## _fn = dlsym(lib,  #name); }
>  
> @@ -160,6 +160,11 @@ int gpfswrap_fcntl(int fd, void *argp)
>  	GPFS_CALL_LIB_FN(gpfs_fcntl, fd, argp);
>  }
>  
> +int gpfswrap_getfilesetid(char *pathname, char *name, int *idp)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_getfilesetid, pathname, name, idp);
> +}
> +
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access)
>  {
> @@ -261,11 +266,6 @@ int get_gpfs_fset_id(const char *pathname, int *fset_id)
>  		gpfsGetFilesetName_t fsn;
>  	} arg;
>  
> -	if (!gpfs_getfilesetid_fn) {
> -		errno = ENOSYS;
> -		return -1;
> -	}
> -
>  	arg.hdr.totalLength = sizeof(arg);
>  	arg.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
>  	arg.hdr.fcntlReserved = 0;
> @@ -292,9 +292,9 @@ int get_gpfs_fset_id(const char *pathname, int *fset_id)
>  		return err;
>  	}
>  
> -	err = gpfs_getfilesetid_fn(discard_const_p(char, pathname),
> -				   arg.fsn.buffer, fset_id);
> -	if (err) {
> +	err = gpfswrap_getfilesetid(discard_const_p(char, pathname),
> +				    arg.fsn.buffer, fset_id);
> +	if (err && errno != ENOSYS) {
>  		DEBUG(1, ("gpfs_getfilesetid for %s failed: %s\n",
>  			  pathname, strerror(errno)));
>  	}
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index baf96b3..dcae142 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -43,6 +43,7 @@ int gpfswrap_set_times_path(char *pathname, int flags,
>  			    gpfs_timestruc_t times[4]);
>  int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp);
>  int gpfswrap_fcntl(int fd, void *argp);
> +int gpfswrap_getfilesetid(char *pathname, char *name, int *idp);
>  bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
>  			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
> -- 
> 1.7.1
> 
> 
> From 748652469c58cbb82ba439f10fc200cf8a834e45 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:49:25 -0700
> Subject: [PATCH 21/32] gpfs: Move set_gpfs_sharemode to vfs_gpfs.c
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   46 --------------------------------------------
>  source3/modules/vfs_gpfs.c |   46 ++++++++++++++++++++++++++++++++++++++++++++
>  source3/modules/vfs_gpfs.h |    2 -
>  3 files changed, 46 insertions(+), 48 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index b04f1be..e816295 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -23,7 +23,6 @@
>  
>  #include <fcntl.h>
>  #include <gpfs_fcntl.h>
> -#include "libcli/security/security.h"
>  #include "vfs_gpfs.h"
>  
>  static int (*gpfs_set_share_fn)(int fd, unsigned int allow, unsigned int deny);
> @@ -165,51 +164,6 @@ int gpfswrap_getfilesetid(char *pathname, char *name, int *idp)
>  	GPFS_CALL_LIB_FN(gpfs_getfilesetid, pathname, name, idp);
>  }
>  
> -bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
> -			uint32 share_access)
> -{
> -	unsigned int allow = GPFS_SHARE_NONE;
> -	unsigned int deny = GPFS_DENY_NONE;
> -	int result;
> -
> -	if ((fsp == NULL) || (fsp->fh == NULL) || (fsp->fh->fd < 0)) {
> -		/* No real file, don't disturb */
> -		return True;
> -	}
> -
> -	allow |= (access_mask & (FILE_WRITE_DATA|FILE_APPEND_DATA|
> -				 DELETE_ACCESS)) ? GPFS_SHARE_WRITE : 0;
> -	allow |= (access_mask & (FILE_READ_DATA|FILE_EXECUTE)) ?
> -		GPFS_SHARE_READ : 0;
> -
> -	if (allow == GPFS_SHARE_NONE) {
> -		DEBUG(10, ("special case am=no_access:%x\n",access_mask));
> -	}
> -	else {	
> -		deny |= (share_access & FILE_SHARE_WRITE) ?
> -			0 : GPFS_DENY_WRITE;
> -		deny |= (share_access & (FILE_SHARE_READ)) ?
> -			0 : GPFS_DENY_READ;
> -	}
> -	DEBUG(10, ("am=%x, allow=%d, sa=%x, deny=%d\n",
> -		   access_mask, allow, share_access, deny));
> -
> -	result = gpfswrap_set_share(fsp->fh->fd, allow, deny);
> -	if (result != 0) {
> -		if (errno == ENOSYS) {
> -			DEBUG(5, ("VFS module vfs_gpfs loaded, but gpfs "
> -				  "set_share function support not available. "
> -				  "Allowing access\n"));
> -			return True;
> -		} else {
> -			DEBUG(10, ("gpfs_set_share failed: %s\n",
> -				   strerror(errno)));
> -		}
> -	}
> -
> -	return (result == 0);
> -}
> -
>  int set_gpfs_lease(int fd, int leasetype)
>  {
>  	int gpfs_type = GPFS_LEASE_NONE;
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 46cfde6..a0532e2 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -26,6 +26,7 @@
>  #include "librpc/gen_ndr/ndr_xattr.h"
>  #include "include/smbprofile.h"
>  #include "modules/non_posix_acls.h"
> +#include "libcli/security/security.h"
>  
>  #undef DBGC_CLASS
>  #define DBGC_CLASS DBGC_VFS
> @@ -71,6 +72,51 @@ static inline gpfs_ace_v4_t *gpfs_ace_ptr(gpfs_acl_t *gacl, unsigned int i)
>  	return &gacl->ace_v4[i];
>  }
>  
> +static bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
> +			       uint32 share_access)
> +{
> +	unsigned int allow = GPFS_SHARE_NONE;
> +	unsigned int deny = GPFS_DENY_NONE;
> +	int result;
> +
> +	if ((fsp == NULL) || (fsp->fh == NULL) || (fsp->fh->fd < 0)) {
> +		/* No real file, don't disturb */
> +		return True;
> +	}
> +
> +	allow |= (access_mask & (FILE_WRITE_DATA|FILE_APPEND_DATA|
> +				 DELETE_ACCESS)) ? GPFS_SHARE_WRITE : 0;
> +	allow |= (access_mask & (FILE_READ_DATA|FILE_EXECUTE)) ?
> +		GPFS_SHARE_READ : 0;
> +
> +	if (allow == GPFS_SHARE_NONE) {
> +		DEBUG(10, ("special case am=no_access:%x\n",access_mask));
> +	}
> +	else {
> +		deny |= (share_access & FILE_SHARE_WRITE) ?
> +			0 : GPFS_DENY_WRITE;
> +		deny |= (share_access & (FILE_SHARE_READ)) ?
> +			0 : GPFS_DENY_READ;
> +	}
> +	DEBUG(10, ("am=%x, allow=%d, sa=%x, deny=%d\n",
> +		   access_mask, allow, share_access, deny));
> +
> +	result = gpfswrap_set_share(fsp->fh->fd, allow, deny);
> +	if (result != 0) {
> +		if (errno == ENOSYS) {
> +			DEBUG(5, ("VFS module vfs_gpfs loaded, but gpfs "
> +				  "set_share function support not available. "
> +				  "Allowing access\n"));
> +			return True;
> +		} else {
> +			DEBUG(10, ("gpfs_set_share failed: %s\n",
> +				   strerror(errno)));
> +		}
> +	}
> +
> +	return (result == 0);
> +}
> +
>  static int vfs_gpfs_kernel_flock(vfs_handle_struct *handle, files_struct *fsp,
>  				 uint32 share_mode, uint32 access_mask)
>  {
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index dcae142..9c58b2f 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -44,8 +44,6 @@ int gpfswrap_set_times_path(char *pathname, int flags,
>  int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp);
>  int gpfswrap_fcntl(int fd, void *argp);
>  int gpfswrap_getfilesetid(char *pathname, char *name, int *idp);
> -bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
> -			uint32 share_access);
>  int set_gpfs_lease(int fd, int leasetype);
>  int get_gpfs_quota(const char *pathname, int type, int id,
>  		   struct gpfs_quotaInfo *qi);
> -- 
> 1.7.1
> 
> 
> From 492d505ddcbc43e0826ac38f3de847cfb8c2b870 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:50:14 -0700
> Subject: [PATCH 22/32] gpfs: Move set_gpfs_lease to vfs_gpfs.c
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   20 --------------------
>  source3/modules/vfs_gpfs.c |   20 ++++++++++++++++++++
>  source3/modules/vfs_gpfs.h |    1 -
>  3 files changed, 20 insertions(+), 21 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index e816295..5c4e809 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -164,26 +164,6 @@ int gpfswrap_getfilesetid(char *pathname, char *name, int *idp)
>  	GPFS_CALL_LIB_FN(gpfs_getfilesetid, pathname, name, idp);
>  }
>  
> -int set_gpfs_lease(int fd, int leasetype)
> -{
> -	int gpfs_type = GPFS_LEASE_NONE;
> -
> -	if (leasetype == F_RDLCK) {
> -		gpfs_type = GPFS_LEASE_READ;
> -	}
> -	if (leasetype == F_WRLCK) {
> -		gpfs_type = GPFS_LEASE_WRITE;
> -	}
> -
> -	/* we unconditionally set CAP_LEASE, rather than looking for
> -	   -1/EACCES as there is a bug in some versions of
> -	   libgpfs_gpl.so which results in a leaked fd on /dev/ss0
> -	   each time we try this with the wrong capabilities set
> -	*/
> -	linux_set_lease_capability();
> -	return gpfswrap_set_lease(fd, gpfs_type);
> -}
> -
>  int get_gpfs_quota(const char *pathname, int type, int id,
>  		   struct gpfs_quotaInfo *qi)
>  {
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index a0532e2..8fae8ca 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -161,6 +161,26 @@ static int vfs_gpfs_close(vfs_handle_struct *handle, files_struct *fsp)
>  	return SMB_VFS_NEXT_CLOSE(handle, fsp);
>  }
>  
> +static int set_gpfs_lease(int fd, int leasetype)
> +{
> +	int gpfs_type = GPFS_LEASE_NONE;
> +
> +	if (leasetype == F_RDLCK) {
> +		gpfs_type = GPFS_LEASE_READ;
> +	}
> +	if (leasetype == F_WRLCK) {
> +		gpfs_type = GPFS_LEASE_WRITE;
> +	}
> +
> +	/* we unconditionally set CAP_LEASE, rather than looking for
> +	   -1/EACCES as there is a bug in some versions of
> +	   libgpfs_gpl.so which results in a leaked fd on /dev/ss0
> +	   each time we try this with the wrong capabilities set
> +	*/
> +	linux_set_lease_capability();
> +	return gpfswrap_set_lease(fd, gpfs_type);
> +}
> +
>  static int vfs_gpfs_setlease(vfs_handle_struct *handle, files_struct *fsp, 
>  			     int leasetype)
>  {
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index 9c58b2f..fb41d2f 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -44,7 +44,6 @@ int gpfswrap_set_times_path(char *pathname, int flags,
>  int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp);
>  int gpfswrap_fcntl(int fd, void *argp);
>  int gpfswrap_getfilesetid(char *pathname, char *name, int *idp);
> -int set_gpfs_lease(int fd, int leasetype);
>  int get_gpfs_quota(const char *pathname, int type, int id,
>  		   struct gpfs_quotaInfo *qi);
>  int get_gpfs_fset_id(const char *pathname, int *fset_id);
> -- 
> 1.7.1
> 
> 
> From fe7d1be954b87093da6506d23d89088432585ce0 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:51:17 -0700
> Subject: [PATCH 23/32] gpfs: Move get_gpfs_quota to vfs_gpfs.c
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   27 ---------------------------
>  source3/modules/vfs_gpfs.c |   27 +++++++++++++++++++++++++++
>  source3/modules/vfs_gpfs.h |    2 --
>  3 files changed, 27 insertions(+), 29 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index 5c4e809..3815eaf 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -164,33 +164,6 @@ int gpfswrap_getfilesetid(char *pathname, char *name, int *idp)
>  	GPFS_CALL_LIB_FN(gpfs_getfilesetid, pathname, name, idp);
>  }
>  
> -int get_gpfs_quota(const char *pathname, int type, int id,
> -		   struct gpfs_quotaInfo *qi)
> -{
> -	int ret;
> -
> -	ZERO_STRUCTP(qi);
> -	ret = gpfswrap_quotactl(discard_const_p(char, pathname),
> -				GPFS_QCMD(Q_GETQUOTA, type), id, qi);
> -
> -	if (ret) {
> -		if (errno == GPFS_E_NO_QUOTA_INST) {
> -			DEBUG(10, ("Quotas disabled on GPFS filesystem.\n"));
> -		} else if (errno != ENOSYS) {
> -			DEBUG(0, ("Get quota failed, type %d, id, %d, "
> -				  "errno %d.\n", type, id, errno));
> -		}
> -
> -		return ret;
> -	}
> -
> -	DEBUG(10, ("quota type %d, id %d, blk u:%lld h:%lld s:%lld gt:%u\n",
> -		   type, id, qi->blockUsage, qi->blockHardLimit,
> -		   qi->blockSoftLimit, qi->blockGraceTime));
> -
> -	return ret;
> -}
> -
>  int get_gpfs_fset_id(const char *pathname, int *fset_id)
>  {
>  	int err, fd, errno_fcntl;
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 8fae8ca..6674c5e 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -2005,6 +2005,33 @@ static int vfs_gpfs_connect(struct vfs_handle_struct *handle,
>  	return 0;
>  }
>  
> +static int get_gpfs_quota(const char *pathname, int type, int id,
> +			  struct gpfs_quotaInfo *qi)
> +{
> +	int ret;
> +
> +	ZERO_STRUCTP(qi);
> +	ret = gpfswrap_quotactl(discard_const_p(char, pathname),
> +				GPFS_QCMD(Q_GETQUOTA, type), id, qi);
> +
> +	if (ret) {
> +		if (errno == GPFS_E_NO_QUOTA_INST) {
> +			DEBUG(10, ("Quotas disabled on GPFS filesystem.\n"));
> +		} else if (errno != ENOSYS) {
> +			DEBUG(0, ("Get quota failed, type %d, id, %d, "
> +				  "errno %d.\n", type, id, errno));
> +		}
> +
> +		return ret;
> +	}
> +
> +	DEBUG(10, ("quota type %d, id %d, blk u:%lld h:%lld s:%lld gt:%u\n",
> +		   type, id, qi->blockUsage, qi->blockHardLimit,
> +		   qi->blockSoftLimit, qi->blockGraceTime));
> +
> +	return ret;
> +}
> +
>  static int vfs_gpfs_get_quotas(const char *path, uid_t uid, gid_t gid,
>  			       int *fset_id,
>  			       struct gpfs_quotaInfo *qi_user,
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index fb41d2f..4996992 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -44,8 +44,6 @@ int gpfswrap_set_times_path(char *pathname, int flags,
>  int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp);
>  int gpfswrap_fcntl(int fd, void *argp);
>  int gpfswrap_getfilesetid(char *pathname, char *name, int *idp);
> -int get_gpfs_quota(const char *pathname, int type, int id,
> -		   struct gpfs_quotaInfo *qi);
>  int get_gpfs_fset_id(const char *pathname, int *fset_id);
>  int smbd_gpfs_set_times_path(char *path, struct smb_file_time *ft);
>  
> -- 
> 1.7.1
> 
> 
> From 80a0bf05ddc616d89961c726cbb927dfc935b560 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:55:19 -0700
> Subject: [PATCH 24/32] gpfs: Move get_gpfs_fset_id to vfs_gpfs.c
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   44 --------------------------------------------
>  source3/modules/vfs_gpfs.c |   44 ++++++++++++++++++++++++++++++++++++++++++++
>  source3/modules/vfs_gpfs.h |    1 -
>  3 files changed, 44 insertions(+), 45 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index 3815eaf..e88f3c8 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -164,50 +164,6 @@ int gpfswrap_getfilesetid(char *pathname, char *name, int *idp)
>  	GPFS_CALL_LIB_FN(gpfs_getfilesetid, pathname, name, idp);
>  }
>  
> -int get_gpfs_fset_id(const char *pathname, int *fset_id)
> -{
> -	int err, fd, errno_fcntl;
> -
> -	struct {
> -		gpfsFcntlHeader_t hdr;
> -		gpfsGetFilesetName_t fsn;
> -	} arg;
> -
> -	arg.hdr.totalLength = sizeof(arg);
> -	arg.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
> -	arg.hdr.fcntlReserved = 0;
> -	arg.fsn.structLen = sizeof(arg.fsn);
> -	arg.fsn.structType = GPFS_FCNTL_GET_FILESETNAME;
> -
> -	fd = open(pathname, O_RDONLY);
> -	if (fd == -1) {
> -		DEBUG(1, ("Could not open %s: %s\n",
> -			  pathname, strerror(errno)));
> -		return fd;
> -	}
> -
> -	err = gpfswrap_fcntl(fd, &arg);
> -	errno_fcntl = errno;
> -	close(fd);
> -
> -	if (err) {
> -		errno = errno_fcntl;
> -		if (errno != ENOSYS) {
> -			DEBUG(1, ("GPFS_FCNTL_GET_FILESETNAME for %s failed: "
> -				  "%s\n", pathname, strerror(errno)));
> -		}
> -		return err;
> -	}
> -
> -	err = gpfswrap_getfilesetid(discard_const_p(char, pathname),
> -				    arg.fsn.buffer, fset_id);
> -	if (err && errno != ENOSYS) {
> -		DEBUG(1, ("gpfs_getfilesetid for %s failed: %s\n",
> -			  pathname, strerror(errno)));
> -	}
> -	return err;
> -}
> -
>  static void timespec_to_gpfs_time(struct timespec ts, gpfs_timestruc_t *gt,
>  				  int idx, int *flags)
>  {
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 6674c5e..e17eafc 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -2005,6 +2005,50 @@ static int vfs_gpfs_connect(struct vfs_handle_struct *handle,
>  	return 0;
>  }
>  
> +static int get_gpfs_fset_id(const char *pathname, int *fset_id)
> +{
> +	int err, fd, errno_fcntl;
> +
> +	struct {
> +		gpfsFcntlHeader_t hdr;
> +		gpfsGetFilesetName_t fsn;
> +	} arg;
> +
> +	arg.hdr.totalLength = sizeof(arg);
> +	arg.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
> +	arg.hdr.fcntlReserved = 0;
> +	arg.fsn.structLen = sizeof(arg.fsn);
> +	arg.fsn.structType = GPFS_FCNTL_GET_FILESETNAME;
> +
> +	fd = open(pathname, O_RDONLY);
> +	if (fd == -1) {
> +		DEBUG(1, ("Could not open %s: %s\n",
> +			  pathname, strerror(errno)));
> +		return fd;
> +	}
> +
> +	err = gpfswrap_fcntl(fd, &arg);
> +	errno_fcntl = errno;
> +	close(fd);
> +
> +	if (err) {
> +		errno = errno_fcntl;
> +		if (errno != ENOSYS) {
> +			DEBUG(1, ("GPFS_FCNTL_GET_FILESETNAME for %s failed: "
> +				  "%s\n", pathname, strerror(errno)));
> +		}
> +		return err;
> +	}
> +
> +	err = gpfswrap_getfilesetid(discard_const_p(char, pathname),
> +				    arg.fsn.buffer, fset_id);
> +	if (err && errno != ENOSYS) {
> +		DEBUG(1, ("gpfs_getfilesetid for %s failed: %s\n",
> +			  pathname, strerror(errno)));
> +	}
> +	return err;
> +}
> +
>  static int get_gpfs_quota(const char *pathname, int type, int id,
>  			  struct gpfs_quotaInfo *qi)
>  {
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index 4996992..8878955 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -44,7 +44,6 @@ int gpfswrap_set_times_path(char *pathname, int flags,
>  int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp);
>  int gpfswrap_fcntl(int fd, void *argp);
>  int gpfswrap_getfilesetid(char *pathname, char *name, int *idp);
> -int get_gpfs_fset_id(const char *pathname, int *fset_id);
>  int smbd_gpfs_set_times_path(char *path, struct smb_file_time *ft);
>  
>  int gpfswrap_init(void);
> -- 
> 1.7.1
> 
> 
> From e106989717fbea6a158027c045b210ed962a965b Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:56:30 -0700
> Subject: [PATCH 25/32] gpfs: Move smbd_gpfs_set_times_path to vfs_gpfs.c
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |   38 --------------------------------------
>  source3/modules/vfs_gpfs.c |   38 ++++++++++++++++++++++++++++++++++++++
>  source3/modules/vfs_gpfs.h |    2 --
>  3 files changed, 38 insertions(+), 40 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index e88f3c8..ae32318 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -163,41 +163,3 @@ int gpfswrap_getfilesetid(char *pathname, char *name, int *idp)
>  {
>  	GPFS_CALL_LIB_FN(gpfs_getfilesetid, pathname, name, idp);
>  }
> -
> -static void timespec_to_gpfs_time(struct timespec ts, gpfs_timestruc_t *gt,
> -				  int idx, int *flags)
> -{
> -	if (!null_timespec(ts)) {
> -		*flags |= 1 << idx;
> -		gt[idx].tv_sec = ts.tv_sec;
> -		gt[idx].tv_nsec = ts.tv_nsec;
> -		DEBUG(10, ("Setting GPFS time %d, flags 0x%x\n", idx, *flags));
> -	}
> -}
> -
> -int smbd_gpfs_set_times_path(char *path, struct smb_file_time *ft)
> -{
> -	gpfs_timestruc_t gpfs_times[4];
> -	int flags = 0;
> -	int rc;
> -
> -	ZERO_ARRAY(gpfs_times);
> -	timespec_to_gpfs_time(ft->atime, gpfs_times, 0, &flags);
> -	timespec_to_gpfs_time(ft->mtime, gpfs_times, 1, &flags);
> -	/* No good mapping from LastChangeTime to ctime, not storing */
> -	timespec_to_gpfs_time(ft->create_time, gpfs_times, 3, &flags);
> -
> -	if (!flags) {
> -		DEBUG(10, ("nothing to do, return to avoid EINVAL\n"));
> -		return 0;
> -	}
> -
> -	rc = gpfswrap_set_times_path(path, flags, gpfs_times);
> -
> -	if (rc != 0 && errno != ENOSYS) {
> -		DEBUG(1,("gpfs_set_times() returned with error %s\n",
> -			strerror(errno)));
> -	}
> -
> -	return rc;
> -}
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index e17eafc..0c69908 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -1736,6 +1736,44 @@ static int vfs_gpfs_lstat(struct vfs_handle_struct *handle,
>  	return 0;
>  }
>  
> +static void timespec_to_gpfs_time(struct timespec ts, gpfs_timestruc_t *gt,
> +				  int idx, int *flags)
> +{
> +	if (!null_timespec(ts)) {
> +		*flags |= 1 << idx;
> +		gt[idx].tv_sec = ts.tv_sec;
> +		gt[idx].tv_nsec = ts.tv_nsec;
> +		DEBUG(10, ("Setting GPFS time %d, flags 0x%x\n", idx, *flags));
> +	}
> +}
> +
> +static int smbd_gpfs_set_times_path(char *path, struct smb_file_time *ft)
> +{
> +	gpfs_timestruc_t gpfs_times[4];
> +	int flags = 0;
> +	int rc;
> +
> +	ZERO_ARRAY(gpfs_times);
> +	timespec_to_gpfs_time(ft->atime, gpfs_times, 0, &flags);
> +	timespec_to_gpfs_time(ft->mtime, gpfs_times, 1, &flags);
> +	/* No good mapping from LastChangeTime to ctime, not storing */
> +	timespec_to_gpfs_time(ft->create_time, gpfs_times, 3, &flags);
> +
> +	if (!flags) {
> +		DEBUG(10, ("nothing to do, return to avoid EINVAL\n"));
> +		return 0;
> +	}
> +
> +	rc = gpfswrap_set_times_path(path, flags, gpfs_times);
> +
> +	if (rc != 0 && errno != ENOSYS) {
> +		DEBUG(1,("gpfs_set_times() returned with error %s\n",
> +			strerror(errno)));
> +	}
> +
> +	return rc;
> +}
> +
>  static int vfs_gpfs_ntimes(struct vfs_handle_struct *handle,
>                          const struct smb_filename *smb_fname,
>  			struct smb_file_time *ft)
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index 8878955..6d244e8 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -44,6 +44,4 @@ int gpfswrap_set_times_path(char *pathname, int flags,
>  int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp);
>  int gpfswrap_fcntl(int fd, void *argp);
>  int gpfswrap_getfilesetid(char *pathname, char *name, int *idp);
> -int smbd_gpfs_set_times_path(char *path, struct smb_file_time *ft);
> -
>  int gpfswrap_init(void);
> -- 
> 1.7.1
> 
> 
> From 801067e744f572eccbb666338fd576231085a413 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 15:57:22 -0700
> Subject: [PATCH 26/32] gpfs: Move definition of GPFS_GETACL_NATIVE to vfs_gpfs.c
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/vfs_gpfs.c |    4 ++++
>  source3/modules/vfs_gpfs.h |    4 ----
>  2 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 0c69908..cde3e88 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -38,6 +38,10 @@
>  #include "auth.h"
>  #include "lib/util/tevent_unix.h"
>  
> +#ifndef GPFS_GETACL_NATIVE
> +#define GPFS_GETACL_NATIVE 0x00000004
> +#endif
> +
>  struct gpfs_config_data {
>  	bool sharemodes;
>  	bool leases;
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index 6d244e8..cd6d393 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -23,10 +23,6 @@
>  
>  */
>  
> -#ifndef GPFS_GETACL_NATIVE
> -#define GPFS_GETACL_NATIVE 0x00000004
> -#endif
> -
>  int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny);
>  int gpfswrap_set_lease(int fd, unsigned int type);
>  int gpfswrap_getacl(char *pathname, int flags, void *acl);
> -- 
> 1.7.1
> 
> 
> From 783a9e8d182963e1b3e6032037873800883670a0 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 11 Feb 2015 14:09:10 -0700
> Subject: [PATCH 27/32] gpfs: Include gpfs_fcntl.h only from vfs_gpfs header file
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |    1 -
>  source3/modules/vfs_gpfs.c |    1 -
>  source3/modules/vfs_gpfs.h |    2 ++
>  3 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index ae32318..f0f863e 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -22,7 +22,6 @@
>  #include "smbd/smbd.h"
>  
>  #include <fcntl.h>
> -#include <gpfs_fcntl.h>
>  #include "vfs_gpfs.h"
>  
>  static int (*gpfs_set_share_fn)(int fd, unsigned int allow, unsigned int deny);
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index cde3e88..abba9cc 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -31,7 +31,6 @@
>  #undef DBGC_CLASS
>  #define DBGC_CLASS DBGC_VFS
>  
> -#include <gpfs_fcntl.h>
>  #include "nfs4_acls.h"
>  #include "vfs_gpfs.h"
>  #include "system/filesys.h"
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index cd6d393..ac18fdb 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -23,6 +23,8 @@
>  
>  */
>  
> +#include <gpfs_fcntl.h>
> +
>  int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny);
>  int gpfswrap_set_lease(int fd, unsigned int type);
>  int gpfswrap_getacl(char *pathname, int flags, void *acl);
> -- 
> 1.7.1
> 
> 
> From cfb36f4543e5698028f460c2d3b2eb72ba5f93b6 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 11 Feb 2015 14:22:07 -0700
> Subject: [PATCH 28/32] gpfs: Move DBGC_CLASS definition below includes
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/vfs_gpfs.c |    7 +++----
>  1 files changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index abba9cc..2e4a98f 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -27,16 +27,15 @@
>  #include "include/smbprofile.h"
>  #include "modules/non_posix_acls.h"
>  #include "libcli/security/security.h"
> -
> -#undef DBGC_CLASS
> -#define DBGC_CLASS DBGC_VFS
> -
>  #include "nfs4_acls.h"
>  #include "vfs_gpfs.h"
>  #include "system/filesys.h"
>  #include "auth.h"
>  #include "lib/util/tevent_unix.h"
>  
> +#undef DBGC_CLASS
> +#define DBGC_CLASS DBGC_VFS
> +
>  #ifndef GPFS_GETACL_NATIVE
>  #define GPFS_GETACL_NATIVE 0x00000004
>  #endif
> -- 
> 1.7.1
> 
> 
> From 6b2c3c69f0446e2fb891902456edf4920cf7b47e Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 11 Feb 2015 14:22:50 -0700
> Subject: [PATCH 29/32] gpfs: Remove unncessary includes from gpfs.c
> 
> replace.h provides everything that is required (errno and ENOSYS).
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c |    6 +-----
>  1 files changed, 1 insertions(+), 5 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index f0f863e..189a914 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -17,11 +17,7 @@
>   *  along with this program; if not, see <http://www.gnu.org/licenses/>.
>   */
>  
> -#include "includes.h"
> -#include "system/filesys.h"
> -#include "smbd/smbd.h"
> -
> -#include <fcntl.h>
> +#include "replace.h"
>  #include "vfs_gpfs.h"
>  
>  static int (*gpfs_set_share_fn)(int fd, unsigned int allow, unsigned int deny);
> -- 
> 1.7.1
> 
> 
> From b78865a440f451f58812175ca7941ff28200e839 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 16:02:37 -0700
> Subject: [PATCH 30/32] gpfs: Update file headers
> 
> Update file headers to reflect the new code organization and reformat
> for consistency.
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c     |    3 ++-
>  source3/modules/vfs_gpfs.c |   41 ++++++++++++++++++++---------------------
>  source3/modules/vfs_gpfs.h |   44 +++++++++++++++++++++-----------------------
>  3 files changed, 43 insertions(+), 45 deletions(-)
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> index 189a914..2af4891 100644
> --- a/source3/modules/gpfs.c
> +++ b/source3/modules/gpfs.c
> @@ -1,7 +1,8 @@
>  /*
>   *  Unix SMB/CIFS implementation.
> - *  Provide a connection to GPFS specific features
> + *  Wrapper for GPFS library
>   *  Copyright (C) Volker Lendecke 2005
> + *  Copyright (C) Christof Schmitt 2015
>   *
>   *  This program is free software; you can redistribute it and/or modify
>   *  it under the terms of the GNU General Public License as published by
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 2e4a98f..6bacac5 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -1,25 +1,24 @@
>  /*
> -   Unix SMB/CIFS implementation.
> -   Wrap gpfs calls in vfs functions.
> -
> -   Copyright (C) Christian Ambach <cambach1 at de.ibm.com> 2006
> -
> -   Major code contributions by Chetan Shringarpure <chetan.sh at in.ibm.com>
> -                            and Gomati Mohanan <gomati.mohanan at in.ibm.com>
> -
> -   This program is free software; you can redistribute it and/or modify
> -   it under the terms of the GNU General Public License as published by
> -   the Free Software Foundation; either version 3 of the License, or
> -   (at your option) any later version.
> -
> -   This program is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -   GNU General Public License for more details.
> -
> -   You should have received a copy of the GNU General Public License
> -   along with this program.  If not, see <http://www.gnu.org/licenses/>.
> -*/
> + *  Unix SMB/CIFS implementation.
> + *  Samba VFS module for GPFS filesystem
> + *  Copyright (C) Christian Ambach <cambach1 at de.ibm.com> 2006
> + *  Copyright (C) Christof Schmitt 2015
> + *  Major code contributions by Chetan Shringarpure <chetan.sh at in.ibm.com>
> + *                           and Gomati Mohanan <gomati.mohanan at in.ibm.com>
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as published by
> + *  the Free Software Foundation; either version 3 of the License, or
> + *  (at your option) any later version.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, see <http://www.gnu.org/licenses/>.
> + */
>  
>  #include "includes.h"
>  #include "smbd/smbd.h"
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> index ac18fdb..efe69c7 100644
> --- a/source3/modules/vfs_gpfs.h
> +++ b/source3/modules/vfs_gpfs.h
> @@ -1,27 +1,25 @@
>  /*
> -   Unix SMB/CIFS implementation.
> -   Wrap gpfs calls in vfs functions.
> -
> -   Copyright (C) Christian Ambach <cambach1 at de.ibm.com> 2006
> -
> -   Major code contributions by Chetan Shringarpure <chetan.sh at in.ibm.com>
> -                            and Gomati Mohanan <gomati.mohanan at in.ibm.com>
> -
> -   This program is free software; you can redistribute it and/or modify
> -   it under the terms of the GNU General Public License as published by
> -   the Free Software Foundation; either version 2 of the License, or
> -   (at your option) any later version.
> -
> -   This program is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -   GNU General Public License for more details.
> -
> -   You should have received a copy of the GNU General Public License
> -   along with this program; if not, write to the Free Software
> -   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> -
> -*/
> + *  Unix SMB/CIFS implementation.
> + *  Wrapper for GPFS library
> + *  Copyright (C) Christian Ambach <cambach1 at de.ibm.com> 2006
> + *  Copyright (C) Christof Schmitt 2015
> + *
> + *  Major code contributions by Chetan Shringarpure <chetan.sh at in.ibm.com>
> + *                           and Gomati Mohanan <gomati.mohanan at in.ibm.com>
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as published by
> + *  the Free Software Foundation; either version 3 of the License, or
> + *  (at your option) any later version.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, see <http://www.gnu.org/licenses/>.
> + */
>  
>  #include <gpfs_fcntl.h>
>  
> -- 
> 1.7.1
> 
> 
> From 99ecc780eaf407bedcb4127c2c2bd69fca135405 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Dec 2014 16:05:16 -0700
> Subject: [PATCH 31/32] gpfs: Rename library wrapper to gpfswrap
> 
> The code in gpfs.c and vfs_gpfs.h now only wraps the gpfs library.
> Rename the files to gpfswrap to make it clear that this is the only
> purpose of that file.
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfs.c        |  161 -----------------------------------------
>  source3/modules/gpfswrap.c    |  161 +++++++++++++++++++++++++++++++++++++++++
>  source3/modules/gpfswrap.h    |   43 +++++++++++
>  source3/modules/vfs_gpfs.c    |    2 +-
>  source3/modules/vfs_gpfs.h    |   43 -----------
>  source3/modules/wscript_build |    2 +-
>  6 files changed, 206 insertions(+), 206 deletions(-)
>  delete mode 100644 source3/modules/gpfs.c
>  create mode 100644 source3/modules/gpfswrap.c
>  create mode 100644 source3/modules/gpfswrap.h
>  delete mode 100644 source3/modules/vfs_gpfs.h
> 
> diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
> deleted file mode 100644
> index 2af4891..0000000
> --- a/source3/modules/gpfs.c
> +++ /dev/null
> @@ -1,161 +0,0 @@
> -/*
> - *  Unix SMB/CIFS implementation.
> - *  Wrapper for GPFS library
> - *  Copyright (C) Volker Lendecke 2005
> - *  Copyright (C) Christof Schmitt 2015
> - *
> - *  This program is free software; you can redistribute it and/or modify
> - *  it under the terms of the GNU General Public License as published by
> - *  the Free Software Foundation; either version 3 of the License, or
> - *  (at your option) any later version.
> - *
> - *  This program is distributed in the hope that it will be useful,
> - *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - *  GNU General Public License for more details.
> - *
> - *  You should have received a copy of the GNU General Public License
> - *  along with this program; if not, see <http://www.gnu.org/licenses/>.
> - */
> -
> -#include "replace.h"
> -#include "vfs_gpfs.h"
> -
> -static int (*gpfs_set_share_fn)(int fd, unsigned int allow, unsigned int deny);
> -static int (*gpfs_set_lease_fn)(int fd, unsigned int type);
> -static int (*gpfs_getacl_fn)(char *pathname, int flags, void *acl);
> -static int (*gpfs_putacl_fn)(char *pathname, int flags, void *acl);
> -static int (*gpfs_get_realfilename_path_fn)(char *pathname, char *filenamep,
> -					    int *len);
> -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 start, gpfs_off64_t bytes);
> -static int (*gpfs_ftruncate_fn)(int fd, gpfs_off64_t length);
> -static int (*gpfs_lib_init_fn)(int flags);
> -static int (*gpfs_set_times_path_fn)(char *pathname, int flags,
> -				     gpfs_timestruc_t times[4]);
> -static int (*gpfs_quotactl_fn)(char *pathname, int cmd, int id, void *bufp);
> -static int (*gpfs_fcntl_fn)(int fd, void *argp);
> -static int (*gpfs_getfilesetid_fn)(char *pathname, char *name, int *idp);
> -
> -#define INIT_GPFS_FUNC(lib, name) { name ## _fn = dlsym(lib,  #name); }
> -
> -int gpfswrap_init(void)
> -{
> -	static void *lib;
> -
> -	if (lib == NULL) {
> -		lib = dlopen("libgpfs.so", RTLD_LAZY);
> -	}
> -
> -	if (lib == NULL) {
> -		return -1;
> -	}
> -
> -	INIT_GPFS_FUNC(lib, gpfs_set_share);
> -	INIT_GPFS_FUNC(lib, gpfs_set_lease);
> -	INIT_GPFS_FUNC(lib, gpfs_getacl);
> -	INIT_GPFS_FUNC(lib, gpfs_putacl);
> -	INIT_GPFS_FUNC(lib, gpfs_get_realfilename_path);
> -	INIT_GPFS_FUNC(lib, gpfs_set_winattrs_path);
> -	INIT_GPFS_FUNC(lib, gpfs_get_winattrs_path);
> -	INIT_GPFS_FUNC(lib, gpfs_get_winattrs);
> -	INIT_GPFS_FUNC(lib, gpfs_prealloc);
> -	INIT_GPFS_FUNC(lib, gpfs_ftruncate);
> -	INIT_GPFS_FUNC(lib, gpfs_lib_init);
> -	INIT_GPFS_FUNC(lib, gpfs_set_times_path);
> -	INIT_GPFS_FUNC(lib, gpfs_quotactl);
> -	INIT_GPFS_FUNC(lib, gpfs_fcntl);
> -	INIT_GPFS_FUNC(lib, gpfs_getfilesetid);
> -
> -	return 0;
> -}
> -
> -#define GPFS_CALL_LIB_FN(fn, ...)				\
> -	{							\
> -		if (fn == NULL) {				\
> -			errno = ENOSYS;			\
> -			return -1;				\
> -		}						\
> -		return fn ## _fn(__VA_ARGS__);			\
> -	}
> -
> -int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_set_share, fd, allow, deny);
> -}
> -
> -int gpfswrap_set_lease(int fd, unsigned int type)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_set_lease, fd, type);
> -}
> -
> -int gpfswrap_getacl(char *pathname, int flags, void *acl)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_getacl, pathname, flags, acl);
> -}
> -
> -int gpfswrap_putacl(char *pathname, int flags, void *acl)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_putacl, pathname, flags, acl);
> -}
> -
> -int gpfswrap_get_realfilename_path(char *pathname, char *filenamep, int *len)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_get_realfilename_path, pathname, filenamep, len);
> -}
> -
> -int gpfswrap_set_winattrs_path(char *pathname, int flags,
> -			       struct gpfs_winattr *attrs)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_set_winattrs_path, pathname, flags, attrs);
> -}
> -
> -int gpfswrap_get_winattrs_path(char *pathname, struct gpfs_winattr *attrs)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_get_winattrs_path, pathname, attrs);
> -}
> -
> -int gpfswrap_get_winattrs(int fd, struct gpfs_winattr *attrs)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_get_winattrs, fd, attrs);
> -}
> -
> -int gpfswrap_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_prealloc, fd, start, bytes);
> -}
> -
> -int gpfswrap_ftruncate(int fd, gpfs_off64_t length)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_ftruncate, fd, length);
> -}
> -
> -int gpfswrap_lib_init(int flags)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_lib_init, flags);
> -}
> -
> -int gpfswrap_set_times_path(char *pathname, int flags,
> -			    gpfs_timestruc_t times[4])
> -{
> -	GPFS_CALL_LIB_FN(gpfs_set_times_path, pathname, flags, times);
> -}
> -
> -int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_quotactl, pathname, cmd, id, bufp);
> -}
> -
> -int gpfswrap_fcntl(int fd, void *argp)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_fcntl, fd, argp);
> -}
> -
> -int gpfswrap_getfilesetid(char *pathname, char *name, int *idp)
> -{
> -	GPFS_CALL_LIB_FN(gpfs_getfilesetid, pathname, name, idp);
> -}
> diff --git a/source3/modules/gpfswrap.c b/source3/modules/gpfswrap.c
> new file mode 100644
> index 0000000..618f083
> --- /dev/null
> +++ b/source3/modules/gpfswrap.c
> @@ -0,0 +1,161 @@
> +/*
> + *  Unix SMB/CIFS implementation.
> + *  Wrapper for GPFS library
> + *  Copyright (C) Volker Lendecke 2005
> + *  Copyright (C) Christof Schmitt 2015
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as published by
> + *  the Free Software Foundation; either version 3 of the License, or
> + *  (at your option) any later version.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#include "replace.h"
> +#include "gpfswrap.h"
> +
> +static int (*gpfs_set_share_fn)(int fd, unsigned int allow, unsigned int deny);
> +static int (*gpfs_set_lease_fn)(int fd, unsigned int type);
> +static int (*gpfs_getacl_fn)(char *pathname, int flags, void *acl);
> +static int (*gpfs_putacl_fn)(char *pathname, int flags, void *acl);
> +static int (*gpfs_get_realfilename_path_fn)(char *pathname, char *filenamep,
> +					    int *len);
> +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 start, gpfs_off64_t bytes);
> +static int (*gpfs_ftruncate_fn)(int fd, gpfs_off64_t length);
> +static int (*gpfs_lib_init_fn)(int flags);
> +static int (*gpfs_set_times_path_fn)(char *pathname, int flags,
> +				     gpfs_timestruc_t times[4]);
> +static int (*gpfs_quotactl_fn)(char *pathname, int cmd, int id, void *bufp);
> +static int (*gpfs_fcntl_fn)(int fd, void *argp);
> +static int (*gpfs_getfilesetid_fn)(char *pathname, char *name, int *idp);
> +
> +#define INIT_GPFS_FUNC(lib, name) { name ## _fn = dlsym(lib,  #name); }
> +
> +int gpfswrap_init(void)
> +{
> +	static void *lib;
> +
> +	if (lib == NULL) {
> +		lib = dlopen("libgpfs.so", RTLD_LAZY);
> +	}
> +
> +	if (lib == NULL) {
> +		return -1;
> +	}
> +
> +	INIT_GPFS_FUNC(lib, gpfs_set_share);
> +	INIT_GPFS_FUNC(lib, gpfs_set_lease);
> +	INIT_GPFS_FUNC(lib, gpfs_getacl);
> +	INIT_GPFS_FUNC(lib, gpfs_putacl);
> +	INIT_GPFS_FUNC(lib, gpfs_get_realfilename_path);
> +	INIT_GPFS_FUNC(lib, gpfs_set_winattrs_path);
> +	INIT_GPFS_FUNC(lib, gpfs_get_winattrs_path);
> +	INIT_GPFS_FUNC(lib, gpfs_get_winattrs);
> +	INIT_GPFS_FUNC(lib, gpfs_prealloc);
> +	INIT_GPFS_FUNC(lib, gpfs_ftruncate);
> +	INIT_GPFS_FUNC(lib, gpfs_lib_init);
> +	INIT_GPFS_FUNC(lib, gpfs_set_times_path);
> +	INIT_GPFS_FUNC(lib, gpfs_quotactl);
> +	INIT_GPFS_FUNC(lib, gpfs_fcntl);
> +	INIT_GPFS_FUNC(lib, gpfs_getfilesetid);
> +
> +	return 0;
> +}
> +
> +#define GPFS_CALL_LIB_FN(fn, ...)				\
> +	{							\
> +		if (fn == NULL) {				\
> +			errno = ENOSYS;			\
> +			return -1;				\
> +		}						\
> +		return fn ## _fn(__VA_ARGS__);			\
> +	}
> +
> +int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_set_share, fd, allow, deny);
> +}
> +
> +int gpfswrap_set_lease(int fd, unsigned int type)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_set_lease, fd, type);
> +}
> +
> +int gpfswrap_getacl(char *pathname, int flags, void *acl)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_getacl, pathname, flags, acl);
> +}
> +
> +int gpfswrap_putacl(char *pathname, int flags, void *acl)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_putacl, pathname, flags, acl);
> +}
> +
> +int gpfswrap_get_realfilename_path(char *pathname, char *filenamep, int *len)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_get_realfilename_path, pathname, filenamep, len);
> +}
> +
> +int gpfswrap_set_winattrs_path(char *pathname, int flags,
> +			       struct gpfs_winattr *attrs)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_set_winattrs_path, pathname, flags, attrs);
> +}
> +
> +int gpfswrap_get_winattrs_path(char *pathname, struct gpfs_winattr *attrs)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_get_winattrs_path, pathname, attrs);
> +}
> +
> +int gpfswrap_get_winattrs(int fd, struct gpfs_winattr *attrs)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_get_winattrs, fd, attrs);
> +}
> +
> +int gpfswrap_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_prealloc, fd, start, bytes);
> +}
> +
> +int gpfswrap_ftruncate(int fd, gpfs_off64_t length)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_ftruncate, fd, length);
> +}
> +
> +int gpfswrap_lib_init(int flags)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_lib_init, flags);
> +}
> +
> +int gpfswrap_set_times_path(char *pathname, int flags,
> +			    gpfs_timestruc_t times[4])
> +{
> +	GPFS_CALL_LIB_FN(gpfs_set_times_path, pathname, flags, times);
> +}
> +
> +int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_quotactl, pathname, cmd, id, bufp);
> +}
> +
> +int gpfswrap_fcntl(int fd, void *argp)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_fcntl, fd, argp);
> +}
> +
> +int gpfswrap_getfilesetid(char *pathname, char *name, int *idp)
> +{
> +	GPFS_CALL_LIB_FN(gpfs_getfilesetid, pathname, name, idp);
> +}
> diff --git a/source3/modules/gpfswrap.h b/source3/modules/gpfswrap.h
> new file mode 100644
> index 0000000..efe69c7
> --- /dev/null
> +++ b/source3/modules/gpfswrap.h
> @@ -0,0 +1,43 @@
> +/*
> + *  Unix SMB/CIFS implementation.
> + *  Wrapper for GPFS library
> + *  Copyright (C) Christian Ambach <cambach1 at de.ibm.com> 2006
> + *  Copyright (C) Christof Schmitt 2015
> + *
> + *  Major code contributions by Chetan Shringarpure <chetan.sh at in.ibm.com>
> + *                           and Gomati Mohanan <gomati.mohanan at in.ibm.com>
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as published by
> + *  the Free Software Foundation; either version 3 of the License, or
> + *  (at your option) any later version.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#include <gpfs_fcntl.h>
> +
> +int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny);
> +int gpfswrap_set_lease(int fd, unsigned int type);
> +int gpfswrap_getacl(char *pathname, int flags, void *acl);
> +int gpfswrap_putacl(char *pathname, int flags, void *acl);
> +int gpfswrap_get_realfilename_path(char *pathname, char *filenamep, int *len);
> +int gpfswrap_set_winattrs_path(char *pathname, int flags,
> +			       struct gpfs_winattr *attrs);
> +int gpfswrap_get_winattrs_path(char *pathname, struct gpfs_winattr *attrs);
> +int gpfswrap_get_winattrs(int fd, struct gpfs_winattr *attrs);
> +int gpfswrap_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes);
> +int gpfswrap_ftruncate(int fd, gpfs_off64_t length);
> +int gpfswrap_lib_init(int flags);
> +int gpfswrap_set_times_path(char *pathname, int flags,
> +			    gpfs_timestruc_t times[4]);
> +int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp);
> +int gpfswrap_fcntl(int fd, void *argp);
> +int gpfswrap_getfilesetid(char *pathname, char *name, int *idp);
> +int gpfswrap_init(void);
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index 6bacac5..0af90b2 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -27,10 +27,10 @@
>  #include "modules/non_posix_acls.h"
>  #include "libcli/security/security.h"
>  #include "nfs4_acls.h"
> -#include "vfs_gpfs.h"
>  #include "system/filesys.h"
>  #include "auth.h"
>  #include "lib/util/tevent_unix.h"
> +#include "gpfswrap.h"
>  
>  #undef DBGC_CLASS
>  #define DBGC_CLASS DBGC_VFS
> diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h
> deleted file mode 100644
> index efe69c7..0000000
> --- a/source3/modules/vfs_gpfs.h
> +++ /dev/null
> @@ -1,43 +0,0 @@
> -/*
> - *  Unix SMB/CIFS implementation.
> - *  Wrapper for GPFS library
> - *  Copyright (C) Christian Ambach <cambach1 at de.ibm.com> 2006
> - *  Copyright (C) Christof Schmitt 2015
> - *
> - *  Major code contributions by Chetan Shringarpure <chetan.sh at in.ibm.com>
> - *                           and Gomati Mohanan <gomati.mohanan at in.ibm.com>
> - *
> - *  This program is free software; you can redistribute it and/or modify
> - *  it under the terms of the GNU General Public License as published by
> - *  the Free Software Foundation; either version 3 of the License, or
> - *  (at your option) any later version.
> - *
> - *  This program is distributed in the hope that it will be useful,
> - *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - *  GNU General Public License for more details.
> - *
> - *  You should have received a copy of the GNU General Public License
> - *  along with this program; if not, see <http://www.gnu.org/licenses/>.
> - */
> -
> -#include <gpfs_fcntl.h>
> -
> -int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny);
> -int gpfswrap_set_lease(int fd, unsigned int type);
> -int gpfswrap_getacl(char *pathname, int flags, void *acl);
> -int gpfswrap_putacl(char *pathname, int flags, void *acl);
> -int gpfswrap_get_realfilename_path(char *pathname, char *filenamep, int *len);
> -int gpfswrap_set_winattrs_path(char *pathname, int flags,
> -			       struct gpfs_winattr *attrs);
> -int gpfswrap_get_winattrs_path(char *pathname, struct gpfs_winattr *attrs);
> -int gpfswrap_get_winattrs(int fd, struct gpfs_winattr *attrs);
> -int gpfswrap_prealloc(int fd, gpfs_off64_t start, gpfs_off64_t bytes);
> -int gpfswrap_ftruncate(int fd, gpfs_off64_t length);
> -int gpfswrap_lib_init(int flags);
> -int gpfswrap_set_times_path(char *pathname, int flags,
> -			    gpfs_timestruc_t times[4]);
> -int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp);
> -int gpfswrap_fcntl(int fd, void *argp);
> -int gpfswrap_getfilesetid(char *pathname, char *name, int *idp);
> -int gpfswrap_init(void);
> diff --git a/source3/modules/wscript_build b/source3/modules/wscript_build
> index 7fe66ec..a4afcd7 100644
> --- a/source3/modules/wscript_build
> +++ b/source3/modules/wscript_build
> @@ -275,7 +275,7 @@ bld.SAMBA3_MODULE('vfs_commit',
>  
>  bld.SAMBA3_MODULE('vfs_gpfs',
>                   subsystem='vfs',
> -                 source='vfs_gpfs.c gpfs.c',
> +                 source='vfs_gpfs.c gpfswrap.c',
>                   deps='NFS4_ACLS non_posix_acls',
>                   init_function='',
>                   internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_gpfs'),
> -- 
> 1.7.1
> 
> 
> From 12954be667508c42de0f1e043e639db8e931f087 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 11 Feb 2015 13:28:08 -0700
> Subject: [PATCH 32/32] gpfs: Add include guard to gpfswrap.h
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/gpfswrap.h |    5 +++++
>  1 files changed, 5 insertions(+), 0 deletions(-)
> 
> diff --git a/source3/modules/gpfswrap.h b/source3/modules/gpfswrap.h
> index efe69c7..f34b1ca 100644
> --- a/source3/modules/gpfswrap.h
> +++ b/source3/modules/gpfswrap.h
> @@ -21,6 +21,9 @@
>   *  along with this program; if not, see <http://www.gnu.org/licenses/>.
>   */
>  
> +#ifndef __GPFSWRAP_H__
> +#define __GPFSWRAP_H__
> +
>  #include <gpfs_fcntl.h>
>  
>  int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny);
> @@ -41,3 +44,5 @@ int gpfswrap_quotactl(char *pathname, int cmd, int id, void *bufp);
>  int gpfswrap_fcntl(int fd, void *argp);
>  int gpfswrap_getfilesetid(char *pathname, char *name, int *idp);
>  int gpfswrap_init(void);
> +
> +#endif
> -- 
> 1.7.1
> 



More information about the samba-technical mailing list