[SCM] Samba Shared Repository - branch master updated

Ralph Böhme slow at samba.org
Thu Oct 6 08:35:02 UTC 2022


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 <anoopcs at 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 <anoopcs at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    
    Autobuild-User(master): Ralph Böhme <slow at 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



More information about the samba-cvs mailing list