--- a/sys/vfs/nfs/nfs_syscalls.c +++ b/sys/vfs/nfs/nfs_syscalls.c @@ -546,6 +546,7 @@ nfssvc_nfsd(struct nfsd_srvargs *nsd, caddr_t argp, struct thread *td) } else { error = 0; slp = nfsd->nfsd_slp; + nd = nfsd->nfsd_nd; /* resume request in progress */ lwkt_reltoken(&nfs_token); lwkt_gettoken(&slp->ns_token); @@ -572,8 +573,9 @@ nfssvc_nfsd(struct nfsd_srvargs *nsd, caddr_t argp, struct thread *td) * nfs_token not held here. slp token is held. */ if (error || (slp->ns_flag & SLP_VALID) == 0) { if (nd) { kfree((caddr_t)nd, M_NFSRVDESC); + nfsd->nfsd_nd = NULL; nd = NULL; } nfsd->nfsd_flag &= ~NFSD_REQINPROG; @@ -756,8 +758,9 @@ nfssvc_nfsd(struct nfsd_srvargs *nsd, caddr_t argp, struct thread *td) break; } if (nd) { kfree((caddr_t)nd, M_NFSRVDESC); + nfsd->nfsd_nd = NULL; nd = NULL; }