| From b64e789f75978be456dd1a8d85f1b6682ad67006 Mon Sep 17 00:00:00 2001 |
| From: Steve French <stfrench@microsoft.com> |
| Date: Thu, 23 Jul 2020 14:41:29 -0500 |
| Subject: [PATCH] Revert "cifs: Fix the target file was deleted when rename |
| failed." |
| |
| commit 0e6705182d4e1b77248a93470d6d7b3013d59b30 upstream. |
| |
| 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> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c |
| index ddfde6cc0c2c..97d826a26478 100644 |
| --- a/fs/cifs/inode.c |
| +++ b/fs/cifs/inode.c |
| @@ -1783,7 +1783,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; |
| @@ -1860,13 +1859,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.27.0 |
| |