summaryrefslogtreecommitdiffstats
path: root/fs/nfs
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2019-08-09 15:03:11 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-09-21 07:18:30 +0200
commitb8cb57c86f936b3a629d0e15819400a942c6831c (patch)
treeac797bcc4cd7523af934b9faba2fc54e95f8d25d /fs/nfs
parent7844dde203db2656bb32849764fb48dc140c4cd6 (diff)
downloadlinux-stable-b8cb57c86f936b3a629d0e15819400a942c6831c.tar.gz
linux-stable-b8cb57c86f936b3a629d0e15819400a942c6831c.tar.bz2
linux-stable-b8cb57c86f936b3a629d0e15819400a942c6831c.zip
NFSv4: Fix return values for nfs4_file_open()
[ Upstream commit 90cf500e338ab3f3c0f126ba37e36fb6a9058441 ] Currently, we are translating RPC level errors such as timeouts, as well as interrupts etc into EOPENSTALE, which forces a single replay of the open attempt. What we actually want to do is force the replay only in the cases where the returned error indicates that the file may have changed on the server. So the fix is to spell out the exact set of errors where we want to return EOPENSTALE. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'fs/nfs')
-rw-r--r--fs/nfs/nfs4file.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c
index 52dbd17e401e..336643b82188 100644
--- a/fs/nfs/nfs4file.c
+++ b/fs/nfs/nfs4file.c
@@ -73,13 +73,13 @@ nfs4_file_open(struct inode *inode, struct file *filp)
if (IS_ERR(inode)) {
err = PTR_ERR(inode);
switch (err) {
- case -EPERM:
- case -EACCES:
- case -EDQUOT:
- case -ENOSPC:
- case -EROFS:
- goto out_put_ctx;
default:
+ goto out_put_ctx;
+ case -ENOENT:
+ case -ESTALE:
+ case -EISDIR:
+ case -ENOTDIR:
+ case -ELOOP:
goto out_drop;
}
}