files_struct *dstfsp,
const struct smb_filename *smb_fname_dst)
{
+ struct smb_filename *full_fname_src = NULL;
+ struct smb_filename *full_fname_dst = NULL;
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;
+ if (fsp_get_pathref_fd(srcfsp) == AT_FDCWD ||
+ fsp_get_pathref_fd(dstfsp) == AT_FDCWD)
+ {
+ SMB_ASSERT(fsp_get_pathref_fd(srcfsp) == AT_FDCWD &&
+ fsp_get_pathref_fd(dstfsp) == AT_FDCWD);
+ goto do_rename;
}
- 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;
- }
+#ifdef HAVE_GFAPI_VER_7_11
+ {
+ glfs_fd_t *src_pglfd = NULL;
+ glfs_fd_t *dst_pglfd = NULL;
- 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;
+ 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;
+ }
- START_PROFILE(syscall_renameat);
+ 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);
+ END_PROFILE(syscall_renameat);
+ return ret;
+ }
+#endif
full_fname_src = full_path_from_dirfsp_atname(talloc_tos(),
srcfsp,
errno = ENOMEM;
return -1;
}
+ smb_fname_src = full_fname_src;
full_fname_dst = full_path_from_dirfsp_atname(talloc_tos(),
dstfsp,
errno = ENOMEM;
return -1;
}
+ smb_fname_dst = full_fname_dst;
+
+do_rename:
ret = glfs_rename(handle->data,
- full_fname_src->base_name,
- full_fname_dst->base_name);
+ smb_fname_src->base_name,
+ smb_fname_dst->base_name);
TALLOC_FREE(full_fname_src);
TALLOC_FREE(full_fname_dst);
-#endif
END_PROFILE(syscall_renameat);