In nfsrvw_coalesce, make sure the coalesce list from the nfsd is moved

as well. This fixes client hangs. (from Naofumi Honda
<honda@Kururu.math.sci.hokudai.ac.jp> / NetBSD-pc98)
This commit is contained in:
fvdl 1997-05-12 23:37:12 +00:00
parent e98c5a9b1c
commit 7b65591cb9

View File

@ -1,4 +1,4 @@
/* $NetBSD: nfs_serv.c,v 1.33 1997/05/08 16:20:32 mycroft Exp $ */
/* $NetBSD: nfs_serv.c,v 1.34 1997/05/12 23:37:12 fvdl Exp $ */
/*
* Copyright (c) 1989, 1993
@ -1212,6 +1212,20 @@ nfsrvw_coalesce(owp, nfsd)
owp->nd_stable == NFSV3WRITE_UNSTABLE)
owp->nd_stable = NFSV3WRITE_DATASYNC;
LIST_INSERT_HEAD(&owp->nd_coalesce, nfsd, nd_tq);
/*
* nfsd might hold coalesce elements! Move them to owp.
* Otherwise, requests may be lost and clients will be stuck.
*/
if (nfsd->nd_coalesce.lh_first)
{
register struct nfsrv_descript *m;
while ((m = nfsd->nd_coalesce.lh_first))
{
LIST_REMOVE(m, nd_tq);
LIST_INSERT_HEAD(&owp->nd_coalesce, m, nd_tq);
}
}
}
/*