]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
vfs_glusterfs: Use glfs_renameat() for SMB_VFS_RENAMEAT
authorAnoop C S <anoopcs@samba.org>
Fri, 19 Aug 2022 06:41:02 +0000 (12:11 +0530)
committerJeremy Allison <jra@samba.org>
Fri, 26 Aug 2022 16:31:38 +0000 (16:31 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15157

Signed-off-by: Anoop C S <anoopcs@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/modules/vfs_glusterfs.c

index ae11e81ad17e86509e57c6fbfebd841ce6d5be9a..3d4a0af93b2028c132475fbdf6fc9601d751c318 100644 (file)
@@ -1305,9 +1305,33 @@ static int vfs_gluster_renameat(struct vfs_handle_struct *handle,
                        files_struct *dstfsp,
                        const struct smb_filename *smb_fname_dst)
 {
+       int ret;
+
+#ifdef HAVE_GFAPI_VER_7_11
+       glfs_fd_t *src_pglfd = NULL;
+       glfs_fd_t *dst_pglfd = NULL;
+
+       START_PROFILE(syscall_renameat);
+
+       src_pglfd = vfs_gluster_fetch_glfd(handle, srcfsp);
+       if (src_pglfd == NULL) {
+               END_PROFILE(syscall_renameat);
+               DBG_ERR("Failed to fetch gluster fd\n");
+               return -1;
+       }
+
+       dst_pglfd = vfs_gluster_fetch_glfd(handle, dstfsp);
+       if (dst_pglfd == NULL) {
+               END_PROFILE(syscall_renameat);
+               DBG_ERR("Failed to fetch gluster fd\n");
+               return -1;
+       }
+
+       ret = glfs_renameat(src_pglfd, smb_fname_src->base_name,
+                           dst_pglfd, smb_fname_dst->base_name);
+#else
        struct smb_filename *full_fname_src = NULL;
        struct smb_filename *full_fname_dst = NULL;
-       int ret;
 
        START_PROFILE(syscall_renameat);
 
@@ -1315,24 +1339,28 @@ static int vfs_gluster_renameat(struct vfs_handle_struct *handle,
                                                      srcfsp,
                                                      smb_fname_src);
        if (full_fname_src == NULL) {
-               errno = ENOMEM;
                END_PROFILE(syscall_renameat);
+               errno = ENOMEM;
                return -1;
        }
+
        full_fname_dst = full_path_from_dirfsp_atname(talloc_tos(),
                                                      dstfsp,
                                                      smb_fname_dst);
        if (full_fname_dst == NULL) {
+               END_PROFILE(syscall_renameat);
                TALLOC_FREE(full_fname_src);
                errno = ENOMEM;
-               END_PROFILE(syscall_renameat);
                return -1;
        }
        ret = glfs_rename(handle->data,
                          full_fname_src->base_name,
                          full_fname_dst->base_name);
+
        TALLOC_FREE(full_fname_src);
        TALLOC_FREE(full_fname_dst);
+#endif
+
        END_PROFILE(syscall_renameat);
 
        return ret;