aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Shilovsky <piastryyy@gmail.com>2019-09-30 10:06:18 -0700
committerPaul Gortmaker <paul.gortmaker@windriver.com>2019-11-09 19:33:43 -0500
commit43273ccd3283f77e8ed06bc511a8103ef4593413 (patch)
treea82d01a9cec9676a95604dd90e1b1bf99ed89491
parentca814325c659e831975537bea89efc4868dd1502 (diff)
downloadlinux-yocto-43273ccd3283f77e8ed06bc511a8103ef4593413.tar.gz
linux-yocto-43273ccd3283f77e8ed06bc511a8103ef4593413.tar.bz2
linux-yocto-43273ccd3283f77e8ed06bc511a8103ef4593413.zip
CIFS: Gracefully handle QueryInfo errors during open
commit 30573a82fb179420b8aac30a3a3595aa96a93156 upstream. Currently if the client identifies problems when processing metadata returned in CREATE response, the open handle is being leaked. This causes multiple problems like a file missing a lease break by that client which causes high latencies to other clients accessing the file. Another side-effect of this is that the file can't be deleted. Fix this by closing the file after the client hits an error after the file was opened and the open descriptor wasn't returned to the user space. Also convert -ESTALE to -EOPENSTALE to allow the VFS to revalidate a dentry and retry the open. Cc: <stable@vger.kernel.org> Signed-off-by: Pavel Shilovsky <pshilov@microsoft.com> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-rw-r--r--fs/cifs/file.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 97090693d182..168b76de193a 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -253,6 +253,12 @@ cifs_nt_open(char *full_path, struct inode *inode, struct cifs_sb_info *cifs_sb,
rc = cifs_get_inode_info(&inode, full_path, buf, inode->i_sb,
xid, fid);
+ if (rc) {
+ server->ops->close(xid, tcon, fid);
+ if (rc == -ESTALE)
+ rc = -EOPENSTALE;
+ }
+
out:
kfree(buf);
return rc;