nfsd4: decoding errors can still be cached and require space
Currently a non-idempotent op reply may be cached if it fails in the proc code but not if it fails at xdr decoding. I doubt there are any xdr-decoding-time errors that would make this a problem in practice, so this probably isn't a serious bug. The space estimates should also take into account space required for encoding of error returns. Again, not a practical problem, though it would become one after future patches which will tighten the space estimates. Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
f34e432b67
commit
e372ba60de
|
@ -1215,6 +1215,8 @@ static inline struct nfsd4_operation *OPDESC(struct nfsd4_op *op)
|
|||
|
||||
bool nfsd4_cache_this_op(struct nfsd4_op *op)
|
||||
{
|
||||
if (op->opnum == OP_ILLEGAL)
|
||||
return false;
|
||||
return OPDESC(op)->op_flags & OP_CACHEME;
|
||||
}
|
||||
|
||||
|
|
|
@ -1677,11 +1677,6 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp)
|
|||
op->opnum = OP_ILLEGAL;
|
||||
op->status = nfserr_op_illegal;
|
||||
}
|
||||
|
||||
if (op->status) {
|
||||
argp->opcnt = i+1;
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* We'll try to cache the result in the DRC if any one
|
||||
* op in the compound wants to be cached:
|
||||
|
@ -1689,6 +1684,11 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp)
|
|||
cachethis |= nfsd4_cache_this_op(op);
|
||||
|
||||
max_reply = max(max_reply, nfsd4_max_reply(op->opnum));
|
||||
|
||||
if (op->status) {
|
||||
argp->opcnt = i+1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* Sessions make the DRC unnecessary: */
|
||||
if (argp->minorversion)
|
||||
|
|
Loading…
Reference in a new issue