--- sys/fs/nfsclient/nfs_clstate.c.devinftimeo 2017-05-23 08:01:19.207189000 -0400 +++ sys/fs/nfsclient/nfs_clstate.c 2017-05-23 08:05:04.667821000 -0400 @@ -2760,7 +2760,8 @@ tryagain2: */ LIST_FOREACH_SAFE(dip, &clp->nfsc_devinfo, nfsdi_list, ndip) { if (dip->nfsdi_layoutrefs == 0 && - dip->nfsdi_refcnt == 0) { + dip->nfsdi_refcnt == 0 && + dip->nfsdi_timestamp < NFSD_MONOSEC) { NFSCL_DEBUG(4, "freeing devinfo\n"); LIST_REMOVE(dip, nfsdi_list); nfscl_freedevinfo(dip); @@ -5135,10 +5136,14 @@ nfscl_freeflayout(struct nfsclflayout *f { int i; + if (flp == NULL) + return; for (i = 0; i < flp->nfsfl_fhcnt; i++) free(flp->nfsfl_fh[i], M_NFSFH); - if (flp->nfsfl_devp != NULL) + if (flp->nfsfl_devp != NULL) { flp->nfsfl_devp->nfsdi_layoutrefs--; + flp->nfsfl_devp->nfsdi_timestamp = NFSD_MONOSEC + 3600; + } free(flp, M_NFSFLAYOUT); } --- sys/fs/nfs/nfsclstate.h.devinftimeo 2017-05-23 08:06:49.446535000 -0400 +++ sys/fs/nfs/nfsclstate.h 2017-05-23 08:07:06.759926000 -0400 @@ -311,6 +311,7 @@ struct nfscldevinfo { LIST_ENTRY(nfscldevinfo) nfsdi_list; uint8_t nfsdi_deviceid[NFSX_V4DEVICEID]; struct nfsclclient *nfsdi_clp; + time_t nfsdi_timestamp; uint32_t nfsdi_refcnt; uint32_t nfsdi_layoutrefs; uint16_t nfsdi_stripecnt;