Fix for a race between the thread transmitting the request and the

thread processing the reply.

Submitted by:	Mohan Srinivasan
This commit is contained in:
Paul Saab 2005-11-03 07:31:06 +00:00
parent 7901356c23
commit 120c58288c
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=151998

View File

@ -1011,7 +1011,11 @@ nfs_request(struct vnode *vp, struct mbuf *mrest, int procnum,
nfs_sndunlock(rep);
}
mtx_lock(&nfs_reqq_mtx);
if (!error && (rep->r_flags & R_MUSTRESEND) == 0) {
/*
* nfs_timer() could've re-transmitted the request if we ended up
* blocking on nfs_send() too long, so check for R_SENT here.
*/
if (!error && (rep->r_flags & (R_SENT | R_MUSTRESEND)) == 0) {
nmp->nm_sent += NFS_CWNDSCALE;
rep->r_flags |= R_SENT;
}