aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/fs/nfsclient/nfs_clstate.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/sys/fs/nfsclient/nfs_clstate.c b/sys/fs/nfsclient/nfs_clstate.c
index a1aa7c04e8a3..227d82a5f7f3 100644
--- a/sys/fs/nfsclient/nfs_clstate.c
+++ b/sys/fs/nfsclient/nfs_clstate.c
@@ -3495,11 +3495,18 @@ nfscl_docb(struct nfsrv_descript *nd, NFSPROC_T *p)
len, stateid.seqid,
0, 0, NULL,
recallp);
+ if (error == 0 &&
+ stateid.seqid >
+ lyp->nfsly_stateid.seqid)
+ lyp->nfsly_stateid.seqid =
+ stateid.seqid;
recallp = NULL;
wakeup(clp);
NFSCL_DEBUG(4,
- "aft layrcal=%d\n",
- error);
+ "aft layrcal=%d "
+ "layseqid=%d\n",
+ error,
+ lyp->nfsly_stateid.seqid);
} else
error =
NFSERR_NOMATCHLAYOUT;
@@ -4881,6 +4888,8 @@ nfscl_layout(struct nfsmount *nmp, vnode_t vp, u_int8_t *fhp, int fhlen,
} else {
if (retonclose != 0)
lyp->nfsly_flags |= NFSLY_RETONCLOSE;
+ if (stateidp->seqid > lyp->nfsly_stateid.seqid)
+ lyp->nfsly_stateid.seqid = stateidp->seqid;
TAILQ_REMOVE(&clp->nfsc_layout, lyp, nfsly_list);
TAILQ_INSERT_HEAD(&clp->nfsc_layout, lyp, nfsly_list);
lyp->nfsly_timestamp = NFSD_MONOSEC + 120;
@@ -4893,7 +4902,7 @@ nfscl_layout(struct nfsmount *nmp, vnode_t vp, u_int8_t *fhp, int fhlen,
return (EPERM);
}
*lypp = lyp;
- } else
+ } else if (stateidp->seqid > lyp->nfsly_stateid.seqid)
lyp->nfsly_stateid.seqid = stateidp->seqid;
/* Merge the new list of File Layouts into the list. */