]> git.baikalelectronics.ru Git - kernel.git/commitdiff
Revert "cifs: Fix the target file was deleted when rename failed."
authorSteve French <stfrench@microsoft.com>
Thu, 23 Jul 2020 19:41:29 +0000 (14:41 -0500)
committerSteve French <stfrench@microsoft.com>
Thu, 23 Jul 2020 20:44:11 +0000 (15:44 -0500)
This reverts commit cd0d4035f9db18de8f9b17ffe2ef9cb566d8078f.

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

index 49c3ea8aa84588d08c8e37671153fc0a40bc1519..ce95801e9b6644dcd8d6e8ae79bcc3308b5a4491 100644 (file)
@@ -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