The branch, master has been updated
       via  9a8bc67f4a5 vfs_glusterfs: Remove special handling of O_CREAT flag
      from  3ad0fa69255 pyldb: Fix typos in function names

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 9a8bc67f4a5e4afecd648523f43a8e97584fcfd0
Author: Anoop C S <anoo...@samba.org>
Date:   Mon Oct 3 15:36:13 2022 +0530

    vfs_glusterfs: Remove special handling of O_CREAT flag
    
    Special handling of O_CREAT flag in SMB_VFS_OPENAT code path was the
    only option to ensure correctness due to a bug in libgfapi as detailed
    in issue #3838[1] from GlusterFS upstream. This has been fixed recently
    so that O_CREAT is handled correctly within glfs_openat() enbaling us to
    remove the corresponding special case from vfs_gluster_openat().
    
    [1] https://github.com/gluster/glusterfs/issues/3838
    
    Signed-off-by: Anoop C S <anoo...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>
    
    Autobuild-User(master): Ralph Böhme <s...@samba.org>
    Autobuild-Date(master): Thu Oct  6 08:34:56 UTC 2022 on sn-devel-184

-----------------------------------------------------------------------

Summary of changes:
 source3/modules/vfs_glusterfs.c | 78 ++++++++++++++++-------------------------
 1 file changed, 30 insertions(+), 48 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c
index 33f941aaca9..4284d7dea1d 100644
--- a/source3/modules/vfs_glusterfs.c
+++ b/source3/modules/vfs_glusterfs.c
@@ -825,61 +825,43 @@ static int vfs_gluster_openat(struct vfs_handle_struct 
*handle,
                became_root = true;
        }
 
-       /*
-        * O_CREAT flag in open is handled differently in a way which is *NOT*
-        * safe against symlink race situations. We use glfs_creat() instead
-        * for correctness as glfs_openat() is broken with O_CREAT present
-        * in open flags.
-        */
-       if (flags & O_CREAT) {
-               if (fsp_get_pathref_fd(dirfsp) != AT_FDCWD) {
-                       /*
-                        * Replace smb_fname with full_path constructed above.
-                        */
-                       smb_fname = full_fname;
+       if (fsp_get_pathref_fd(dirfsp) != AT_FDCWD) {
+#ifdef HAVE_GFAPI_VER_7_11
+               /*
+                * Fetch Gluster fd for parent directory using dirfsp
+                * before calling glfs_openat();
+                */
+               pglfd = vfs_gluster_fetch_glfd(handle, dirfsp);
+               if (pglfd == NULL) {
+                       END_PROFILE(syscall_openat);
+                       DBG_ERR("Failed to fetch gluster fd\n");
+                       return -1;
                }
 
+               glfd = glfs_openat(pglfd,
+                                  smb_fname->base_name,
+                                  flags,
+                                  how->mode);
+#else
+               /*
+                * Replace smb_fname with full_path constructed above.
+                */
+               smb_fname = full_fname;
+#endif
+       }
+
+       if (pglfd == NULL) {
                /*
                 * smb_fname can either be a full_path or the same one
                 * as received from the caller. In the latter case we
                 * are operating at current working directory.
                 */
-               glfd = glfs_creat(handle->data,
-                                 smb_fname->base_name,
-                                 flags,
-                                 how->mode);
-       } else {
-               if (fsp_get_pathref_fd(dirfsp) != AT_FDCWD) {
-#ifdef HAVE_GFAPI_VER_7_11
-                       /*
-                        * Fetch Gluster fd for parent directory using dirfsp
-                        * before calling glfs_openat();
-                        */
-                       pglfd = vfs_gluster_fetch_glfd(handle, dirfsp);
-                       if (pglfd == NULL) {
-                               END_PROFILE(syscall_openat);
-                               DBG_ERR("Failed to fetch gluster fd\n");
-                               return -1;
-                       }
-
-                       glfd = glfs_openat(pglfd,
-                                          smb_fname->base_name,
-                                          flags,
-                                          how->mode);
-#else
-                       /*
-                        * Replace smb_fname with full_path constructed above.
-                        */
-                       smb_fname = full_fname;
-#endif
-               }
-
-               if (pglfd == NULL) {
-                       /*
-                        * smb_fname can either be a full_path or the same one
-                        * as received from the caller. In the latter case we
-                        * are operating at current working directory.
-                        */
+               if (flags & O_CREAT) {
+                       glfd = glfs_creat(handle->data,
+                                         smb_fname->base_name,
+                                         flags,
+                                         how->mode);
+               } else {
                        glfd = glfs_open(handle->data,
                                         smb_fname->base_name,
                                         flags);


-- 
Samba Shared Repository

Reply via email to