diff options
| -rw-r--r-- | sys/fs/nfs/nfs_var.h | 1 | ||||
| -rw-r--r-- | sys/fs/nfsserver/nfs_nfsdsocket.c | 3 |
2 files changed, 3 insertions, 1 deletions
diff --git a/sys/fs/nfs/nfs_var.h b/sys/fs/nfs/nfs_var.h index 525f573b5167..57cf1566a14d 100644 --- a/sys/fs/nfs/nfs_var.h +++ b/sys/fs/nfs/nfs_var.h @@ -169,6 +169,7 @@ int nfsrv_mdscopymr(char *, char *, char *, char *, int *, char *, NFSPROC_T *, struct nfsdevice **); void nfsrv_marknospc(char *, bool); void nfsrv_removedeleg(fhandle_t *, struct nfsrv_descript *, NFSPROC_T *); +void nfsrv_freestrandedstate(struct nfsrvfh *); /* nfs_nfsdserv.c */ int nfsrvd_access(struct nfsrv_descript *, int, diff --git a/sys/fs/nfsserver/nfs_nfsdsocket.c b/sys/fs/nfsserver/nfs_nfsdsocket.c index 36996425ae95..70aa20d4aa04 100644 --- a/sys/fs/nfsserver/nfs_nfsdsocket.c +++ b/sys/fs/nfsserver/nfs_nfsdsocket.c @@ -1031,7 +1031,8 @@ nfsrvd_compound(struct nfsrv_descript *nd, int isdgram, u_char *tag, cur_fsid = vp->v_mount->mnt_stat.f_fsid; NFSVOPUNLOCK(vp); vpnes = nes; - } + } else if (nd->nd_repstat == ESTALE) + nfsrv_freestrandedstate(&fh); break; case NFSV4OP_PUTPUBFH: if (nfs_pubfhset) { |
