59 lines
2.1 KiB
Diff
59 lines
2.1 KiB
Diff
From: Steve French <stfrench@microsoft.com>
|
|
Date: Thu, 23 Jul 2020 14:41:29 -0500
|
|
Subject: Revert "cifs: Fix the target file was deleted when rename failed."
|
|
Origin: https://git.kernel.org/linus/0e6705182d4e1b77248a93470d6d7b3013d59b30
|
|
Bug-Debian: https://bugs.debian.org/966917
|
|
|
|
This reverts commit 9ffad9263b467efd8f8dc7ae1941a0a655a2bab2.
|
|
|
|
Upon additional testing with older servers, it was found that
|
|
the original commit introduced a regression when using the old SMB1
|
|
dialect and rsyncing over an existing file.
|
|
|
|
The patch will need to be respun to address this, likely including
|
|
a larger refactoring of the SMB1 and SMB3 rename code paths to make
|
|
it less confusing and also to address some additional rename error
|
|
cases that SMB3 may be able to workaround.
|
|
|
|
Signed-off-by: Steve French <stfrench@microsoft.com>
|
|
Reported-by: Patrick Fernie <patrick.fernie@gmail.com>
|
|
CC: Stable <stable@vger.kernel.org>
|
|
Acked-by: Ronnie Sahlberg <lsahlber@redhat.com>
|
|
Acked-by: Pavel Shilovsky <pshilov@microsoft.com>
|
|
Acked-by: Zhang Xiaoxu <zhangxiaoxu5@huawei.com>
|
|
---
|
|
fs/cifs/inode.c | 10 ++--------
|
|
1 file changed, 2 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
|
|
index 49c3ea8aa845..ce95801e9b66 100644
|
|
--- a/fs/cifs/inode.c
|
|
+++ b/fs/cifs/inode.c
|
|
@@ -2044,7 +2044,6 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry,
|
|
FILE_UNIX_BASIC_INFO *info_buf_target;
|
|
unsigned int xid;
|
|
int rc, tmprc;
|
|
- bool new_target = d_really_is_negative(target_dentry);
|
|
|
|
if (flags & ~RENAME_NOREPLACE)
|
|
return -EINVAL;
|
|
@@ -2121,13 +2120,8 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry,
|
|
*/
|
|
|
|
unlink_target:
|
|
- /*
|
|
- * If the target dentry was created during the rename, try
|
|
- * unlinking it if it's not negative
|
|
- */
|
|
- if (new_target &&
|
|
- d_really_is_positive(target_dentry) &&
|
|
- (rc == -EACCES || rc == -EEXIST)) {
|
|
+ /* Try unlinking the target dentry if it's not negative */
|
|
+ if (d_really_is_positive(target_dentry) && (rc == -EACCES || rc == -EEXIST)) {
|
|
if (d_is_dir(target_dentry))
|
|
tmprc = cifs_rmdir(target_dir, target_dentry);
|
|
else
|
|
--
|
|
2.28.0
|
|
|