Commit c1913ba0 authored by Steve French's avatar Steve French Committed by Greg Kroah-Hartman

Revert "cifs: Fix the target file was deleted when rename failed."

commit 0e670518 upstream.

This reverts commit 9ffad926.

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: default avatarSteve French <stfrench@microsoft.com>
Reported-by: default avatarPatrick Fernie <patrick.fernie@gmail.com>
CC: Stable <stable@vger.kernel.org>
Acked-by: default avatarRonnie Sahlberg <lsahlber@redhat.com>
Acked-by: default avatarPavel Shilovsky <pshilov@microsoft.com>
Acked-by: default avatarZhang Xiaoxu <zhangxiaoxu5@huawei.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent fffb773c
...@@ -1783,7 +1783,6 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry, ...@@ -1783,7 +1783,6 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry,
FILE_UNIX_BASIC_INFO *info_buf_target; FILE_UNIX_BASIC_INFO *info_buf_target;
unsigned int xid; unsigned int xid;
int rc, tmprc; int rc, tmprc;
bool new_target = d_really_is_negative(target_dentry);
if (flags & ~RENAME_NOREPLACE) if (flags & ~RENAME_NOREPLACE)
return -EINVAL; return -EINVAL;
...@@ -1860,13 +1859,8 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry, ...@@ -1860,13 +1859,8 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry,
*/ */
unlink_target: unlink_target:
/* /* Try unlinking the target dentry if it's not negative */
* If the target dentry was created during the rename, try if (d_really_is_positive(target_dentry) && (rc == -EACCES || rc == -EEXIST)) {
* unlinking it if it's not negative
*/
if (new_target &&
d_really_is_positive(target_dentry) &&
(rc == -EACCES || rc == -EEXIST)) {
if (d_is_dir(target_dentry)) if (d_is_dir(target_dentry))
tmprc = cifs_rmdir(target_dir, target_dentry); tmprc = cifs_rmdir(target_dir, target_dentry);
else else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment