gpfs.so: Add gpfs:syncio option
[ira/wip.git] / source3 / modules / vfs_gpfs.c
index d52122c25b9d1c675ff5cbf6635efb95ea0065ed..0a684e0d8e5df2edcc9e9f6381a3edab07ef8360 100644 (file)
@@ -32,6 +32,7 @@
 #include <gpfs_gpl.h>
 #include "nfs4_acls.h"
 #include "vfs_gpfs.h"
+#include "system/filesys.h"
 
 struct gpfs_config_data {
        bool sharemodes;
@@ -1299,6 +1300,17 @@ static uint32_t vfs_gpfs_capabilities(struct vfs_handle_struct *handle,
        return next;
 }
 
+static int vfs_gpfs_open(struct vfs_handle_struct *handle,
+                        struct smb_filename *smb_fname, files_struct *fsp,
+                        int flags, mode_t mode)
+{
+       if (lp_parm_bool(fsp->conn->params->service, "gpfs", "syncio",
+                        false)) {
+               flags |= O_SYNC;
+       }
+       return SMB_VFS_NEXT_OPEN(handle, smb_fname, fsp, flags, mode);
+}
+
 
 static struct vfs_fn_pointers vfs_gpfs_fns = {
        .connect_fn = vfs_gpfs_connect,
@@ -1326,6 +1338,7 @@ static struct vfs_fn_pointers vfs_gpfs_fns = {
        .is_offline = vfs_gpfs_is_offline,
        .aio_force = vfs_gpfs_aio_force,
        .sendfile = vfs_gpfs_sendfile,
+       .open_fn = vfs_gpfs_open,
        .ftruncate = vfs_gpfs_ftruncate
 };