--- sys/fs/nfsserver/nfs_nfsdkrpc.c.bs3	2021-04-05 22:52:01.919828000 -0700
+++ sys/fs/nfsserver/nfs_nfsdkrpc.c	2021-04-05 22:59:10.064327000 -0700
@@ -410,8 +410,13 @@ nfs_proc(struct nfsrv_descript *nd, u_int32_t xid, SVC
 				m = NULL;
 			if ((nd->nd_flag & ND_HASSEQUENCE) != 0)
 				nfsrv_cache_session(nd, &m);
-			if (nd->nd_repstat == NFSERR_REPLYFROMCACHE)
+			if (nd->nd_repstat == NFSERR_REPLYFROMCACHE) {
 				nd->nd_repstat = 0;
+				if (m != NULL) {
+					m_freem(nd->nd_mreq);
+					nd->nd_mreq = m;
+				}
+			}
 			cacherep = RC_REPLY;
 		} else {
 			if (nd->nd_repstat == NFSERR_DONTREPLY)
--- sys/fs/nfsserver/nfs_nfsdsubs.c.bs3	2021-04-05 22:52:01.950922000 -0700
+++ sys/fs/nfsserver/nfs_nfsdsubs.c	2021-04-05 22:52:56.969560000 -0700
@@ -1553,6 +1553,8 @@ nfsd_errmap(struct nfsrv_descript *nd)
 		else if (nd->nd_repstat == NFSERR_MINORVERMISMATCH ||
 			 nd->nd_repstat == NFSERR_OPILLEGAL)
 			return (txdr_unsigned(nd->nd_repstat));
+		else if (nd->nd_repstat == NFSERR_REPLYFROMCACHE)
+			return (txdr_unsigned(NFSERR_IO));
 		else if ((nd->nd_flag & ND_NFSV41) != 0) {
 			if (nd->nd_repstat == EOPNOTSUPP)
 				nd->nd_repstat = NFSERR_NOTSUPP;