nfsd4: really fix nfs4err_resource in 4.1 case
encode_getattr, for example, can return nfserr_resource to indicate it ran out of buffer space. That's not a legal error in the 4.1 case. And in the 4.1 case, if we ran out of buffer space, we should have exceeded a session limit too. (Note in1bc49d83c3
"nfsd4: fix nfs4err_resource in 4.1 case" we originally tried fixing this error return before fixing the problem that we could error out while we still had lots of available space. The result was to trade one illegal error for another in those cases. We decided that was helpful, so reverted the change infc208d026b
, and are only reinstating it now that we've elimited almost all of those cases.) Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
Родитель
b042098063
Коммит
c8f13d9775
|
@ -3901,6 +3901,14 @@ nfsd4_encode_operation(struct nfsd4_compoundres *resp, struct nfsd4_op *op)
|
|||
space_needed = COMPOUND_ERR_SLACK_SPACE;
|
||||
op->status = nfsd4_check_resp_size(resp, space_needed);
|
||||
}
|
||||
if (op->status == nfserr_resource && nfsd4_has_session(&resp->cstate)) {
|
||||
struct nfsd4_slot *slot = resp->cstate.slot;
|
||||
|
||||
if (slot->sl_flags & NFSD4_SLOT_CACHETHIS)
|
||||
op->status = nfserr_rep_too_big_to_cache;
|
||||
else
|
||||
op->status = nfserr_rep_too_big;
|
||||
}
|
||||
if (op->status == nfserr_resource ||
|
||||
op->status == nfserr_rep_too_big ||
|
||||
op->status == nfserr_rep_too_big_to_cache) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче