NFSv4/pnfs: Don't switch off layoutget-on-open for transient errors
Ensure that we only switch off the LAYOUTGET operation in the OPEN compound when the server is truly broken, and/or it is complaining that the compound is too large. Currently, we end up turning off the functionality permanently, even for transient errors such as EACCES or ENOSPC. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
d49e0d5b99
commit
8dc96566c0
|
@ -2111,14 +2111,22 @@ void pnfs_parse_lgopen(struct inode *ino, struct nfs4_layoutget *lgp,
|
||||||
dprintk("%s: entered with status %i\n", __func__, lgp->res.status);
|
dprintk("%s: entered with status %i\n", __func__, lgp->res.status);
|
||||||
if (lgp->res.status) {
|
if (lgp->res.status) {
|
||||||
switch (lgp->res.status) {
|
switch (lgp->res.status) {
|
||||||
case -NFS4ERR_DELAY:
|
|
||||||
case -NFS4ERR_GRACE:
|
|
||||||
case -NFS4ERR_LAYOUTTRYLATER:
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
/* FIXME - Any error not listed above permanently
|
break;
|
||||||
* halts lgopen attempts.
|
/*
|
||||||
*/
|
* Halt lgopen attempts if the server doesn't recognise
|
||||||
|
* the "current stateid" value, the layout type, or the
|
||||||
|
* layoutget operation as being valid.
|
||||||
|
* Also if it complains about too many ops in the compound
|
||||||
|
* or of the request/reply being too big.
|
||||||
|
*/
|
||||||
|
case -NFS4ERR_BAD_STATEID:
|
||||||
|
case -NFS4ERR_NOTSUPP:
|
||||||
|
case -NFS4ERR_REP_TOO_BIG:
|
||||||
|
case -NFS4ERR_REP_TOO_BIG_TO_CACHE:
|
||||||
|
case -NFS4ERR_REQ_TOO_BIG:
|
||||||
|
case -NFS4ERR_TOO_MANY_OPS:
|
||||||
|
case -NFS4ERR_UNKNOWN_LAYOUTTYPE:
|
||||||
srv->caps &= ~NFS_CAP_LGOPEN;
|
srv->caps &= ~NFS_CAP_LGOPEN;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue