summaryrefslogtreecommitdiffstats
path: root/source3/modules/gpfs.c
diff options
context:
space:
mode:
authorChristian Ambach <christian.ambach@de.ibm.com>2011-02-21 18:25:36 +0100
committerVolker Lendecke <vlendec@samba.org>2011-04-26 20:52:36 +0200
commit7a4cff842d342d77631912fdcee05521506eec52 (patch)
treedd2e26fbecf4c3ca78e4e03e5d2633ce3138bebc /source3/modules/gpfs.c
parent633dbabe912f43fd4199453720fab299ccfefe03 (diff)
downloadsamba-7a4cff842d342d77631912fdcee05521506eec52.tar.gz
samba-7a4cff842d342d77631912fdcee05521506eec52.tar.xz
samba-7a4cff842d342d77631912fdcee05521506eec52.zip
s3:vfs use gpfs_lib_init
With newer GPFS releases, libgpfs contains a function gpfs_lib_init(). It marks the pseudo-device the lib uses as interface to the GPFS kernel module to not be to destroyed after each call to GPFS. This saves us some microseconds creating and removing the device each time we do a call to libgpfs. Autobuild-User: Volker Lendecke <vlendec@samba.org> Autobuild-Date: Tue Apr 26 20:52:36 CEST 2011 on sn-devel-104
Diffstat (limited to 'source3/modules/gpfs.c')
-rw-r--r--source3/modules/gpfs.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c
index ef77099548..d690199e9b 100644
--- a/source3/modules/gpfs.c
+++ b/source3/modules/gpfs.c
@@ -40,6 +40,7 @@ static int (*gpfs_set_winattrs_path_fn)(char *pathname, int flags, struct gpfs_w
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_ftruncate_fn)(int fd, gpfs_off64_t length);
+static int (*gpfs_lib_init_fn)(int flags);
bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
uint32 share_access)
@@ -189,6 +190,17 @@ int set_gpfs_winattrs(char *pathname,int flags,struct gpfs_winattr *attrs)
return gpfs_set_winattrs_path_fn(pathname,flags, attrs);
}
+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 bool init_gpfs_function_lib(void *plibhandle_pointer,
const char *libname,
void *pfn_pointer, const char *fn_name)
@@ -251,6 +263,7 @@ void init_gpfs(void)
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_ftruncate_fn, "gpfs_ftruncate");
+ init_gpfs_function(&gpfs_lib_init_fn,"gpfs_lib_init");
gpfs_getrealfilename = lp_parm_bool(-1, "gpfs", "getrealfilename",
True);
@@ -311,6 +324,11 @@ int get_gpfs_winattrs(char *pathname,struct gpfs_winattr *attrs)
return -1;
}
+void smbd_gpfs_lib_init()
+{
+ return;
+}
+
void init_gpfs(void)
{
return;