Fix handling of a NFSv4.1 callback reply from the session cache.
The nfsv4_seqsession() call returns NFSERR_REPLYFROMCACHE when it has a reply in the session, due to a requestor retry. The code erroneously assumed a return of 0 for this case. This patch fixes this and adds a KASSERT(). This would be an extremely rare occurrence. It was found during code inspection during the pNFS server development. MFC after: 2 weeks
This commit is contained in:
parent
d274bcc661
commit
ad81354ceb
@ -3560,9 +3560,18 @@ nfscl_docb(struct nfsrv_descript *nd, NFSPROC_T *p)
|
||||
tsep->nfsess_backslots);
|
||||
}
|
||||
NFSUNLOCKCLSTATE();
|
||||
if (error == 0) {
|
||||
if (error == 0 || error == NFSERR_REPLYFROMCACHE) {
|
||||
gotseq_ok = 1;
|
||||
if (rep != NULL) {
|
||||
/*
|
||||
* Handle a reply for a retried
|
||||
* callback. The reply will be
|
||||
* re-inserted in the session cache
|
||||
* by the nfsv4_seqsess_cacherep() call
|
||||
* after out:
|
||||
*/
|
||||
KASSERT(error == NFSERR_REPLYFROMCACHE,
|
||||
("cbsequence: non-NULL rep"));
|
||||
NFSCL_DEBUG(4, "Got cbretry\n");
|
||||
m_freem(nd->nd_mreq);
|
||||
nd->nd_mreq = rep;
|
||||
|
Loading…
x
Reference in New Issue
Block a user