Index: nfs_srvsock.c =================================================================== RCS file: /usr/store/mlaier/fcvs/src/sys/nfsserver/nfs_srvsock.c,v retrieving revision 1.104 diff -u -r1.104 nfs_srvsock.c --- nfs_srvsock.c 6 Aug 2007 14:26:02 -0000 1.104 +++ nfs_srvsock.c 10 Oct 2007 09:40:52 -0000 @@ -648,19 +648,23 @@ *mpp = recm; if (slp->ns_flag & SLP_LASTFRAG) { struct nfsrv_rec *rec; + struct mbuf *m0; + + m0 = slp->ns_frag; + slp->ns_frag = NULL; NFSD_UNLOCK(); rec = malloc(sizeof(struct nfsrv_rec), M_NFSRVDESC, waitflag == M_DONTWAIT ? M_NOWAIT : M_WAITOK); - NFSD_LOCK(); - if (!rec) { - m_freem(slp->ns_frag); + if (rec == NULL) { + m_freem(m0); + NFSD_LOCK(); } else { - nfs_realign(&slp->ns_frag, 10 * NFSX_UNSIGNED); + nfs_realign(&m0, 10 * NFSX_UNSIGNED); + NFSD_LOCK(); rec->nr_address = NULL; - rec->nr_packet = slp->ns_frag; + rec->nr_packet = m0; STAILQ_INSERT_TAIL(&slp->ns_rec, rec, nr_link); } - slp->ns_frag = NULL; } } }