CIFS: Gracefully handle QueryInfo errors during open
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>
This commit is contained in:
parent
cb248819d2
commit
30573a82fb
|
@ -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,
|
rc = cifs_get_inode_info(&inode, full_path, buf, inode->i_sb,
|
||||||
xid, fid);
|
xid, fid);
|
||||||
|
|
||||||
|
if (rc) {
|
||||||
|
server->ops->close(xid, tcon, fid);
|
||||||
|
if (rc == -ESTALE)
|
||||||
|
rc = -EOPENSTALE;
|
||||||
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
kfree(buf);
|
kfree(buf);
|
||||||
return rc;
|
return rc;
|
||||||
|
|
Loading…
Reference in New Issue