From 41c7b2bcb8394e1b48672f2e1875123155b002c5 Mon Sep 17 00:00:00 2001 From: jsg Date: Tue, 9 Jun 2026 03:12:46 +0000 Subject: [PATCH] remove use of struct nfsm_info in nfs_serv.c with and ok miod@ --- sys/nfs/nfs_serv.c | 323 +++++++++++++++++---------------------------- 1 file changed, 123 insertions(+), 200 deletions(-) diff --git a/sys/nfs/nfs_serv.c b/sys/nfs/nfs_serv.c index 1fd7567f85b..4d8cafeffde 100644 --- a/sys/nfs/nfs_serv.c +++ b/sys/nfs/nfs_serv.c @@ -1,4 +1,4 @@ -/* $OpenBSD: nfs_serv.c,v 1.147 2026/06/09 03:11:12 jsg Exp $ */ +/* $OpenBSD: nfs_serv.c,v 1.148 2026/06/09 03:12:46 jsg Exp $ */ /* $NetBSD: nfs_serv.c,v 1.34 1997/05/12 23:37:12 fvdl Exp $ */ /* @@ -148,7 +148,6 @@ nfsrv3_access(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, { struct mbuf *nam = nfsd->nd_nam; struct mbuf *mb; - struct nfsm_info info; struct ucred *cred = &nfsd->nd_cr; struct vnode *vp; nfsfh_t nfh; @@ -158,13 +157,6 @@ nfsrv3_access(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct vattr va; u_long testmode, nfsmode; - info.nmi_mreq = NULL; - info.nmi_mrep = nfsd->nd_mrep; - info.nmi_md = nfsd->nd_md; - info.nmi_dpos = nfsd->nd_dpos; - info.nmi_v3 = (nfsd->nd_flag & ND_NFSV3); - info.nmi_errorp = &error; - if (nfsm_srvmtofh1(nfsd, slp, mrq, &mb, &error) != 0) return 0; else if (error != 0) @@ -224,7 +216,6 @@ nfsrv_getattr(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, { struct mbuf *nam = nfsd->nd_nam; struct mbuf *mb; - struct nfsm_info info; struct ucred *cred = &nfsd->nd_cr; struct nfs_fattr *fp; struct vattr va; @@ -233,13 +224,6 @@ nfsrv_getattr(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, fhandle_t *fhp; int error = 0, rdonly; - info.nmi_mreq = NULL; - info.nmi_mrep = nfsd->nd_mrep; - info.nmi_md = nfsd->nd_md; - info.nmi_dpos = nfsd->nd_dpos; - info.nmi_v3 = (nfsd->nd_flag & ND_NFSV3); - info.nmi_errorp = &error; - if (nfsm_srvmtofh1(nfsd, slp, mrq, &mb, &error) != 0) return 0; else if (error != 0) @@ -247,7 +231,6 @@ nfsrv_getattr(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, fhp = &nfh.fh_generic; if (nfsm_srvmtofh2(nfsd, fhp, &error) != 0) goto nfsmout; - info.nmi_dpos = nfsd->nd_dpos; /* resync */ error = nfsrv_fhtovp(fhp, 1, &vp, cred, slp, nam, &rdonly); if (error) { if (nfsm_reply(nfsd, slp, mrq, &mb, @@ -280,7 +263,6 @@ nfsrv_setattr(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, { struct mbuf *nam = nfsd->nd_nam; struct mbuf *mb; - struct nfsm_info info; struct ucred *cred = &nfsd->nd_cr; struct vattr va, preat; struct nfsv2_sattr *sp; @@ -292,13 +274,9 @@ nfsrv_setattr(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, int error = 0, rdonly, preat_ret = 1, postat_ret = 1; int gcheck = 0; struct timespec guard; + int v3; - info.nmi_mreq = NULL; - info.nmi_mrep = nfsd->nd_mrep; - info.nmi_md = nfsd->nd_md; - info.nmi_dpos = nfsd->nd_dpos; - info.nmi_v3 = (nfsd->nd_flag & ND_NFSV3); - info.nmi_errorp = &error; + v3 = (nfsd->nd_flag & ND_NFSV3); if (nfsm_srvmtofh1(nfsd, slp, mrq, &mb, &error) != 0) return 0; @@ -308,7 +286,7 @@ nfsrv_setattr(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, if (nfsm_srvmtofh2(nfsd, fhp, &error) != 0) goto nfsmout; vattr_null(&va); - if (info.nmi_v3) { + if (v3) { va.va_vaflags |= VA_UTIMES_NULL; error = nfsm_srvsattr(nfsd, &va); if (error) @@ -370,7 +348,7 @@ nfsrv_setattr(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, error = 0; goto nfsmout; } - if (info.nmi_v3) { + if (v3) { error = preat_ret = VOP_GETATTR(vp, &preat, cred, procp); if (!error && gcheck && (preat.va_ctime.tv_sec != guard.tv_sec || @@ -378,8 +356,8 @@ nfsrv_setattr(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, error = NFSERR_NOT_SYNC; if (error) { vput(vp); - if (nfsm_reply(nfsd, slp, mrq, &mb, - error, NFSX_WCCDATA(info.nmi_v3)) != 0) + if (nfsm_reply(nfsd, slp, mrq, &mb, error, + NFSX_WCCDATA(v3)) != 0) return 0; nfsm_srvwcc(nfsd, preat_ret, &preat, postat_ret, &va, &mb); @@ -411,10 +389,9 @@ nfsrv_setattr(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, error = postat_ret; out: vput(vp); - if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_WCCORFATTR(info.nmi_v3)) != 0) + if (nfsm_reply(nfsd, slp, mrq, &mb, error, NFSX_WCCORFATTR(v3)) != 0) return 0; - if (info.nmi_v3) { + if (v3) { nfsm_srvwcc(nfsd, preat_ret, &preat, postat_ret, &va, &mb); error = 0; @@ -500,14 +477,14 @@ nfsrv_lookup(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, error = nfs_namei(&nd, fhp, len, slp, nam, &info.nmi_md, &info.nmi_dpos, &dirp, procp); nfsd->nd_dpos = info.nmi_dpos; /* resync */ if (dirp) { - if (info.nmi_v3) + if (v3) dirattr_ret = VOP_GETATTR(dirp, &dirattr, cred, procp); vrele(dirp); } if (error) { if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_POSTOPATTR(info.nmi_v3)) != 0) + NFSX_POSTOPATTR(v3)) != 0) return 0; nfsm_srvpostop_attr(nfsd, dirattr_ret, &dirattr, &mb); return (0); @@ -522,15 +499,14 @@ nfsrv_lookup(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, error = VOP_GETATTR(vp, &va, cred, procp); vput(vp); if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_SRVFH(info.nmi_v3) + NFSX_POSTOPORFATTR(info.nmi_v3) + - NFSX_POSTOPATTR(info.nmi_v3)) != 0) + NFSX_SRVFH(v3) + NFSX_POSTOPORFATTR(v3) + NFSX_POSTOPATTR(v3)) != 0) return 0; if (error) { nfsm_srvpostop_attr(nfsd, dirattr_ret, &dirattr, &mb); error = 0; goto nfsmout; } - nfsm_srvfhtom(&mb, fhp, info.nmi_v3); + nfsm_srvfhtom(&mb, fhp, v3); if (v3) { nfsm_srvpostop_attr(nfsd, 0, &va, &mb); nfsm_srvpostop_attr(nfsd, dirattr_ret, &dirattr, &mb); @@ -554,7 +530,6 @@ nfsrv_readlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct ucred *cred = &nfsd->nd_cr; struct iovec iov; struct mbuf *mp = NULL; - struct nfsm_info info; u_int32_t *tl; int error = 0, rdonly, tlen, len = 0, getret; struct vnode *vp; @@ -562,13 +537,9 @@ nfsrv_readlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, nfsfh_t nfh; fhandle_t *fhp; struct uio uio; + int v3; - info.nmi_mreq = NULL; - info.nmi_mrep = nfsd->nd_mrep; - info.nmi_md = nfsd->nd_md; - info.nmi_dpos = nfsd->nd_dpos; - info.nmi_v3 = (nfsd->nd_flag & ND_NFSV3); - info.nmi_errorp = &error; + v3 = (nfsd->nd_flag & ND_NFSV3); memset(&uio, 0, sizeof(uio)); @@ -579,7 +550,6 @@ nfsrv_readlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, fhp = &nfh.fh_generic; if (nfsm_srvmtofh2(nfsd, fhp, &error) != 0) goto nfsmout; - info.nmi_dpos = nfsd->nd_dpos; /* resync */ error = nfsrv_fhtovp(fhp, 1, &vp, cred, slp, nam, &rdonly); if (error) { if (nfsm_reply(nfsd, slp, mrq, &mb, error, @@ -590,7 +560,7 @@ nfsrv_readlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, goto nfsmout; } if (vp->v_type != VLNK) { - if (info.nmi_v3) + if (v3) error = EINVAL; else error = ENXIO; @@ -619,9 +589,9 @@ out: if (error) m_freem(mp); if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_POSTOPATTR(info.nmi_v3) + NFSX_UNSIGNED) != 0) + NFSX_POSTOPATTR(v3) + NFSX_UNSIGNED) != 0) return 0; - if (info.nmi_v3) { + if (v3) { nfsm_srvpostop_attr(nfsd, getret, &attr, &mb); if (error) { error = 0; @@ -664,6 +634,9 @@ nfsrv_read(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct uio io, *uiop = &io; struct vattr va; off_t off; + int v3; + + v3 = (nfsd->nd_flag & ND_NFSV3); info.nmi_mreq = NULL; info.nmi_mrep = nfsd->nd_mrep; @@ -679,7 +652,7 @@ nfsrv_read(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, fhp = &nfh.fh_generic; if (nfsm_srvmtofh2(nfsd, fhp, &error) != 0) goto nfsmout; - if (info.nmi_v3) { + if (v3) { tl = (uint32_t *)nfsd_dissect(nfsd, 2 * NFSX_UNSIGNED, &error); if (tl == NULL) goto nfsmout; @@ -707,7 +680,7 @@ nfsrv_read(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, goto bad; if (vp->v_type != VREG) { - if (info.nmi_v3) + if (v3) error = EINVAL; else error = (vp->v_type == VDIR) ? EISDIR : EACCES; @@ -729,10 +702,9 @@ nfsrv_read(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, else cnt = reqlen; if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_POSTOPORFATTR(info.nmi_v3) + - 3 * NFSX_UNSIGNED+nfsm_rndup(cnt)) != 0) + NFSX_POSTOPORFATTR(v3) + 3 * NFSX_UNSIGNED+nfsm_rndup(cnt)) != 0) return 0; - if (info.nmi_v3) { + if (v3) { tl = nfsm_build(&mb, NFSX_V3FATTR + 4 * NFSX_UNSIGNED); *tl++ = nfs_true; fp = (struct nfs_fattr *)tl; @@ -809,7 +781,7 @@ nfsrv_read(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, tlen = nfsm_rndup (cnt); if (len != tlen || tlen != cnt) nfsm_adj(mb, len - tlen, tlen - cnt); - if (info.nmi_v3) { + if (v3) { *tl++ = txdr_unsigned(cnt); if (len < reqlen) *tl++ = nfs_true; @@ -854,6 +826,9 @@ nfsrv_write(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, fhandle_t *fhp; struct uio io, *uiop = &io; off_t off; + int v3; + + v3 = (nfsd->nd_flag & ND_NFSV3); info.nmi_mreq = NULL; info.nmi_mrep = nfsd->nd_mrep; @@ -873,7 +848,7 @@ nfsrv_write(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, fhp = &nfh.fh_generic; if (nfsm_srvmtofh2(nfsd, fhp, &error) != 0) goto nfsmout; - if (info.nmi_v3) { + if (v3) { tl = (uint32_t *)nfsd_dissect(nfsd, 5 * NFSX_UNSIGNED, &error); if (tl == NULL) goto nfsmout; @@ -928,10 +903,10 @@ nfsrv_write(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, error = nfsrv_fhtovp(fhp, 1, &vp, cred, slp, nam, &rdonly); if (error) goto bad; - if (info.nmi_v3) + if (v3) forat_ret = VOP_GETATTR(vp, &forat, cred, procp); if (vp->v_type != VREG) { - if (info.nmi_v3) + if (v3) error = EINVAL; else error = (vp->v_type == VDIR) ? EISDIR : EACCES; @@ -979,10 +954,10 @@ nfsrv_write(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, if (!error) error = aftat_ret; if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_PREOPATTR(info.nmi_v3) + NFSX_POSTOPORFATTR(info.nmi_v3) + - 2 * NFSX_UNSIGNED + NFSX_WRITEVERF(info.nmi_v3)) != 0) + NFSX_PREOPATTR(v3) + NFSX_POSTOPORFATTR(v3) + + 2 * NFSX_UNSIGNED + NFSX_WRITEVERF(v3)) != 0) return 0; - if (info.nmi_v3) { + if (v3) { nfsm_srvwcc(nfsd, forat_ret, &forat, aftat_ret, &va, &mb); if (error) { error = 0; @@ -1055,6 +1030,9 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, fhandle_t *fhp; u_quad_t tempsize; u_char cverf[NFSX_V3CREATEVERF]; + int v3; + + v3 = (nfsd->nd_flag & ND_NFSV3); info.nmi_mreq = NULL; info.nmi_mrep = nfsd->nd_mrep; @@ -1090,7 +1068,7 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, &info.nmi_dpos, &dirp, procp); nfsd->nd_dpos = info.nmi_dpos; /* resync */ if (dirp) { - if (info.nmi_v3) + if (v3) dirfor_ret = VOP_GETATTR(dirp, &dirfor, cred, procp); else { vrele(dirp); @@ -1099,7 +1077,7 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, } if (error) { if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_WCCDATA(info.nmi_v3)) != 0) + NFSX_WCCDATA(v3)) != 0) return 0; nfsm_srvwcc(nfsd, dirfor_ret, &dirfor, diraft_ret, &diraft, &mb); @@ -1109,7 +1087,7 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, } vattr_null(&va); - if (info.nmi_v3) { + if (v3) { tl = (uint32_t *)nfsd_dissect(nfsd, NFSX_UNSIGNED, &error); if (tl == NULL) goto nfsmout; @@ -1286,7 +1264,7 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, error = VOP_GETATTR(vp, &va, cred, procp); vput(vp); } - if (info.nmi_v3) { + if (v3) { if (exclusive_flag && !error && bcmp(cverf, (caddr_t)&va.va_atime, NFSX_V3CREATEVERF)) error = EEXIST; @@ -1294,10 +1272,9 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, vrele(dirp); } if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_SRVFH(info.nmi_v3) + NFSX_FATTR(info.nmi_v3) + - NFSX_WCCDATA(info.nmi_v3)) != 0) + NFSX_SRVFH(v3) + NFSX_FATTR(v3) + NFSX_WCCDATA(v3)) != 0) return 0; - if (info.nmi_v3) { + if (v3) { if (!error) { nfsm_srvpostop_fh(&mb, fhp); nfsm_srvpostop_attr(nfsd, 0, &va, &mb); @@ -1305,7 +1282,7 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, nfsm_srvwcc(nfsd, dirfor_ret, &dirfor, diraft_ret, &diraft, &mb); } else { - nfsm_srvfhtom(&mb, fhp, info.nmi_v3); + nfsm_srvfhtom(&mb, fhp, v3); fp = nfsm_build(&mb, NFSX_V2FATTR); nfsm_srvfattr(nfsd, &va, fp); } @@ -1533,6 +1510,9 @@ nfsrv_remove(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct vattr dirfor, diraft; nfsfh_t nfh; fhandle_t *fhp; + int v3; + + v3 = (nfsd->nd_flag & ND_NFSV3); info.nmi_mreq = NULL; info.nmi_mrep = nfsd->nd_mrep; @@ -1568,7 +1548,7 @@ nfsrv_remove(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, error = nfs_namei(&nd, fhp, len, slp, nam, &info.nmi_md, &info.nmi_dpos, &dirp, procp); nfsd->nd_dpos = info.nmi_dpos; /* resync */ if (dirp) { - if (info.nmi_v3) + if (v3) dirfor_ret = VOP_GETATTR(dirp, &dirfor, cred, procp); else { vrele(dirp); @@ -1602,14 +1582,13 @@ out: vput(vp); } } - if (dirp && info.nmi_v3) { + if (dirp && v3) { diraft_ret = VOP_GETATTR(dirp, &diraft, cred, procp); vrele(dirp); } - if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_WCCDATA(info.nmi_v3)) != 0) + if (nfsm_reply(nfsd, slp, mrq, &mb, error, NFSX_WCCDATA(v3)) != 0) return 0; - if (info.nmi_v3) { + if (v3) { nfsm_srvwcc(nfsd, dirfor_ret, &dirfor, diraft_ret, &diraft, &mb); return (0); @@ -1639,6 +1618,9 @@ nfsrv_rename(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, nfsfh_t fnfh, tnfh; fhandle_t *ffhp, *tfhp; uid_t saved_uid; + int v3; + + v3 = (nfsd->nd_flag & ND_NFSV3); info.nmi_mreq = NULL; info.nmi_mrep = nfsd->nd_mrep; @@ -1680,7 +1662,7 @@ nfsrv_rename(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, &info.nmi_dpos, &fdirp, procp); nfsd->nd_dpos = info.nmi_dpos; /* resync */ if (fdirp) { - if (info.nmi_v3) + if (v3) fdirfor_ret = VOP_GETATTR(fdirp, &fdirfor, cred, procp); else { @@ -1690,7 +1672,7 @@ nfsrv_rename(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, } if (error) { if (nfsm_reply(nfsd, slp, mrq, &mb, error, - 2 * NFSX_WCCDATA(info.nmi_v3)) != 0) + 2 * NFSX_WCCDATA(v3)) != 0) return 0; nfsm_srvwcc(nfsd, fdirfor_ret, &fdirfor, fdiraft_ret, &fdiraft, &mb); @@ -1721,9 +1703,8 @@ nfsrv_rename(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, &info.nmi_dpos, &tdirp, procp); nfsd->nd_dpos = info.nmi_dpos; /* resync */ if (tdirp) { - if (info.nmi_v3) - tdirfor_ret = VOP_GETATTR(tdirp, &tdirfor, cred, - procp); + if (v3) + tdirfor_ret = VOP_GETATTR(tdirp, &tdirfor, cred, procp); else { vrele(tdirp); tdirp = NULL; @@ -1739,27 +1720,27 @@ nfsrv_rename(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, tvp = tond.ni_vp; if (tvp != NULL) { if (fvp->v_type == VDIR && tvp->v_type != VDIR) { - error = info.nmi_v3 ? EEXIST : EISDIR; + error = v3 ? EEXIST : EISDIR; goto out; } else if (fvp->v_type != VDIR && tvp->v_type == VDIR) { - error = info.nmi_v3 ? EEXIST : ENOTDIR; + error = v3 ? EEXIST : ENOTDIR; goto out; } if (tvp->v_type == VDIR && tvp->v_mountedhere) { - error = info.nmi_v3 ? EXDEV : ENOTEMPTY; + error = v3 ? EXDEV : ENOTEMPTY; goto out; } } if (fvp->v_type == VDIR && fvp->v_mountedhere) { - error = info.nmi_v3 ? EXDEV : ENOTEMPTY; + error = v3 ? EXDEV : ENOTEMPTY; goto out; } if (fvp->v_mount != tdvp->v_mount) { - error = info.nmi_v3 ? EXDEV : ENOTEMPTY; + error = v3 ? EXDEV : ENOTEMPTY; goto out; } if (fvp == tdvp) - error = info.nmi_v3 ? EINVAL : ENOTEMPTY; + error = v3 ? EINVAL : ENOTEMPTY; /* * If source is the same as the destination (that is the * same vnode with the same name in the same directory), @@ -1804,10 +1785,9 @@ out1: } vrele(fromnd.ni_startdir); pool_put(&namei_pool, fromnd.ni_cnd.cn_pnbuf); - if (nfsm_reply(nfsd, slp, mrq, &mb, error, - 2 * NFSX_WCCDATA(info.nmi_v3)) != 0) + if (nfsm_reply(nfsd, slp, mrq, &mb, error, 2 * NFSX_WCCDATA(v3)) != 0) return 0; - if (info.nmi_v3) { + if (v3) { nfsm_srvwcc(nfsd, fdirfor_ret, &fdirfor, fdiraft_ret, &fdiraft, &mb); nfsm_srvwcc(nfsd, tdirfor_ret, &tdirfor, tdiraft_ret, &tdiraft, @@ -1853,6 +1833,9 @@ nfsrv_link(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct vattr dirfor, diraft, at; nfsfh_t nfh, dnfh; fhandle_t *fhp, *dfhp; + int v3; + + v3 = (nfsd->nd_flag & ND_NFSV3); info.nmi_mreq = NULL; info.nmi_mrep = nfsd->nd_mrep; @@ -1891,8 +1874,7 @@ nfsrv_link(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, error = nfsrv_fhtovp(fhp, 0, &vp, cred, slp, nam, &rdonly); if (error) { if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_POSTOPATTR(info.nmi_v3) + - NFSX_WCCDATA(info.nmi_v3)) != 0) + NFSX_POSTOPATTR(v3) + NFSX_WCCDATA(v3)) != 0) return 0; nfsm_srvpostop_attr(nfsd, getret, &at, &mb); nfsm_srvwcc(nfsd, dirfor_ret, &dirfor, diraft_ret, &diraft, @@ -1909,9 +1891,8 @@ nfsrv_link(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, &info.nmi_dpos, &dirp, procp); nfsd->nd_dpos = info.nmi_dpos; /* resync */ if (dirp) { - if (info.nmi_v3) - dirfor_ret = VOP_GETATTR(dirp, &dirfor, cred, - procp); + if (v3) + dirfor_ret = VOP_GETATTR(dirp, &dirfor, cred, procp); else { vrele(dirp); dirp = NULL; @@ -1940,7 +1921,7 @@ out: vrele(nd.ni_vp); } out1: - if (info.nmi_v3) + if (v3) getret = VOP_GETATTR(vp, &at, cred, procp); if (dirp) { diraft_ret = VOP_GETATTR(dirp, &diraft, cred, procp); @@ -1948,9 +1929,9 @@ out1: } vrele(vp); if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_POSTOPATTR(info.nmi_v3) + NFSX_WCCDATA(info.nmi_v3)) != 0) + NFSX_POSTOPATTR(v3) + NFSX_WCCDATA(v3)) != 0) return 0; - if (info.nmi_v3) { + if (v3) { nfsm_srvpostop_attr(nfsd, getret, &at, &mb); nfsm_srvwcc(nfsd, dirfor_ret, &dirfor, diraft_ret, &diraft, &mb); @@ -1981,6 +1962,9 @@ nfsrv_symlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct vnode *dirp = NULL; nfsfh_t nfh; fhandle_t *fhp; + int v3; + + v3 = (nfsd->nd_flag & ND_NFSV3); info.nmi_mreq = NULL; info.nmi_mrep = nfsd->nd_mrep; @@ -2015,7 +1999,7 @@ nfsrv_symlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, &info.nmi_dpos, &dirp, procp); nfsd->nd_dpos = info.nmi_dpos; /* resync */ if (dirp) { - if (info.nmi_v3) + if (v3) dirfor_ret = VOP_GETATTR(dirp, &dirfor, cred, procp); else { @@ -2026,7 +2010,7 @@ nfsrv_symlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, if (error) goto out; vattr_null(&va); - if (info.nmi_v3) { + if (v3) { error = nfsm_srvsattr(nfsd, &va); if (error) goto nfsmout; @@ -2046,7 +2030,7 @@ nfsrv_symlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, io.uio_procp = NULL; if (nfsd_mtouio(nfsd, &io, len2, &error) != 0) goto nfsmout; - if (!info.nmi_v3) { + if (!v3) { sp = (struct nfsv2_sattr *)nfsd_dissect(nfsd, NFSX_V2SATTR, &error); if (sp == NULL) goto nfsmout; @@ -2069,7 +2053,7 @@ nfsrv_symlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, if (error) vrele(nd.ni_startdir); else { - if (info.nmi_v3) { + if (v3) { nd.ni_cnd.cn_nameiop = LOOKUP; nd.ni_cnd.cn_flags &= ~(LOCKPARENT | SAVESTART | FOLLOW); @@ -2099,10 +2083,9 @@ out: vrele(dirp); } if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_SRVFH(info.nmi_v3) + NFSX_POSTOPATTR(info.nmi_v3) + - NFSX_WCCDATA(info.nmi_v3)) != 0) + NFSX_SRVFH(v3) + NFSX_POSTOPATTR(v3) + NFSX_WCCDATA(v3)) != 0) return 0; - if (info.nmi_v3) { + if (v3) { if (!error) { nfsm_srvpostop_fh(&mb, fhp); nfsm_srvpostop_attr(nfsd, 0, &va, &mb); @@ -2149,6 +2132,9 @@ nfsrv_mkdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct vnode *vp, *dirp = NULL; nfsfh_t nfh; fhandle_t *fhp; + int v3; + + v3 = (nfsd->nd_flag & ND_NFSV3); info.nmi_mreq = NULL; info.nmi_mrep = nfsd->nd_mrep; @@ -2182,7 +2168,7 @@ nfsrv_mkdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, error = nfs_namei(&nd, fhp, len, slp, nam, &info.nmi_md, &info.nmi_dpos, &dirp, procp); if (dirp) { - if (info.nmi_v3) + if (v3) dirfor_ret = VOP_GETATTR(dirp, &dirfor, cred, procp); else { vrele(dirp); @@ -2191,7 +2177,7 @@ nfsrv_mkdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, } if (error) { if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_WCCDATA(info.nmi_v3)) != 0) + NFSX_WCCDATA(v3)) != 0) return 0; nfsm_srvwcc(nfsd, dirfor_ret, &dirfor, diraft_ret, &diraft, &mb); @@ -2201,7 +2187,7 @@ nfsrv_mkdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, } vattr_null(&va); - if (info.nmi_v3) { + if (v3) { nfsd->nd_dpos = info.nmi_dpos; /* resync */ error = nfsm_srvsattr(nfsd, &va); if (error) @@ -2243,10 +2229,9 @@ out: vrele(dirp); } if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_SRVFH(info.nmi_v3) + NFSX_POSTOPATTR(info.nmi_v3) + - NFSX_WCCDATA(info.nmi_v3)) != 0) + NFSX_SRVFH(v3) + NFSX_POSTOPATTR(v3) + NFSX_WCCDATA(v3)) != 0) return 0; - if (info.nmi_v3) { + if (v3) { if (!error) { nfsm_srvpostop_fh(&mb, fhp); nfsm_srvpostop_attr(nfsd, 0, &va, &mb); @@ -2254,7 +2239,7 @@ out: nfsm_srvwcc(nfsd, dirfor_ret, &dirfor, diraft_ret, &diraft, &mb); } else { - nfsm_srvfhtom(&mb, fhp, info.nmi_v3); + nfsm_srvfhtom(&mb, fhp, v3); fp = nfsm_build(&mb, NFSX_V2FATTR); nfsm_srvfattr(nfsd, &va, fp); } @@ -2289,6 +2274,9 @@ nfsrv_rmdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, nfsfh_t nfh; fhandle_t *fhp; struct nameidata nd; + int v3; + + v3 = (nfsd->nd_flag & ND_NFSV3); info.nmi_mreq = NULL; info.nmi_mrep = nfsd->nd_mrep; @@ -2323,7 +2311,7 @@ nfsrv_rmdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, &info.nmi_dpos, &dirp, procp); nfsd->nd_dpos = info.nmi_dpos; /* resync */ if (dirp) { - if (info.nmi_v3) + if (v3) dirfor_ret = VOP_GETATTR(dirp, &dirfor, cred, procp); else { @@ -2333,7 +2321,7 @@ nfsrv_rmdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, } if (error) { if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_WCCDATA(info.nmi_v3)) != 0) + NFSX_WCCDATA(v3)) != 0) return 0; nfsm_srvwcc(nfsd, dirfor_ret, &dirfor, diraft_ret, &diraft, &mb); @@ -2380,10 +2368,9 @@ out: diraft_ret = VOP_GETATTR(dirp, &diraft, cred, procp); vrele(dirp); } - if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_WCCDATA(info.nmi_v3)) != 0) + if (nfsm_reply(nfsd, slp, mrq, &mb, error, NFSX_WCCDATA(v3)) != 0) return 0; - if (info.nmi_v3) { + if (v3) { nfsm_srvwcc(nfsd, dirfor_ret, &dirfor, diraft_ret, &diraft, &mb); error = 0; @@ -2436,7 +2423,6 @@ nfsrv_readdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct mbuf *mb; struct ucred *cred = &nfsd->nd_cr; struct dirent *dp; - struct nfsm_info info; u_int32_t *tl; char *cpos, *cend, *rbuf; struct vnode *vp; @@ -2448,13 +2434,9 @@ nfsrv_readdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, int len, nlen, pad, xfer, error = 0, getret = 1; int siz, cnt, fullsiz, eofflag, rdonly; u_quad_t off, toff, verf; + int v3; - info.nmi_mreq = NULL; - info.nmi_mrep = nfsd->nd_mrep; - info.nmi_md = nfsd->nd_md; - info.nmi_dpos = nfsd->nd_dpos; - info.nmi_v3 = (nfsd->nd_flag & ND_NFSV3); - info.nmi_errorp = &error; + v3 = (nfsd->nd_flag & ND_NFSV3); if (nfsm_srvmtofh1(nfsd, slp, mrq, &mb, &error) != 0) return 0; @@ -2463,7 +2445,7 @@ nfsrv_readdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, fhp = &nfh.fh_generic; if (nfsm_srvmtofh2(nfsd, fhp, &error) != 0) goto nfsmout; - if (info.nmi_v3) { + if (v3) { tl = (uint32_t *)nfsd_dissect(nfsd, 5 * NFSX_UNSIGNED, &error); if (tl == NULL) goto nfsmout; @@ -2480,7 +2462,7 @@ nfsrv_readdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, off = toff; cnt = fxdr_unsigned(int, *tl); if (cnt == 0) { - if (info.nmi_v3) + if (v3) error = NFSERR_TOOSMALL; else error = EBADRPC; @@ -2506,14 +2488,14 @@ nfsrv_readdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, error = 0; goto nfsmout; } - if (info.nmi_v3) + if (v3) error = getret = VOP_GETATTR(vp, &at, cred, procp); if (!error) error = nfsrv_access(vp, VEXEC, cred, rdonly, procp, 0); if (error) { vput(vp); if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_POSTOPATTR(info.nmi_v3)) != 0) + NFSX_POSTOPATTR(v3)) != 0) return 0; nfsm_srvpostop_attr(nfsd, getret, &at, &mb); error = 0; @@ -2537,7 +2519,7 @@ again: error = VOP_READDIR(vp, &io, cred, &eofflag); off = (off_t)io.uio_offset; - if (info.nmi_v3) { + if (v3) { getret = VOP_GETATTR(vp, &at, cred, procp); if (!error) error = getret; @@ -2548,7 +2530,7 @@ again: vrele(vp); free(rbuf, M_TEMP, fullsiz); if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_POSTOPATTR(info.nmi_v3)) != 0) + NFSX_POSTOPATTR(v3)) != 0) return 0; nfsm_srvpostop_attr(nfsd, getret, &at, &mb); error = 0; @@ -2564,11 +2546,10 @@ again: if (siz == 0) { vrele(vp); if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_POSTOPATTR(info.nmi_v3) + - NFSX_COOKIEVERF(info.nmi_v3) + + NFSX_POSTOPATTR(v3) + NFSX_COOKIEVERF(v3) + 2 * NFSX_UNSIGNED) != 0) return 0; - if (info.nmi_v3) { + if (v3) { nfsm_srvpostop_attr(nfsd, getret, &at, &mb); tl = nfsm_build(&mb, 4 * NFSX_UNSIGNED); txdr_hyper(at.va_filerev, tl); @@ -2603,10 +2584,9 @@ again: len = 3 * NFSX_UNSIGNED; /* paranoia, probably can be 0 */ if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_POSTOPATTR(info.nmi_v3) + - NFSX_COOKIEVERF(info.nmi_v3) + siz) != 0) + NFSX_POSTOPATTR(v3) + NFSX_COOKIEVERF(v3) + siz) != 0) return 0; - if (info.nmi_v3) { + if (v3) { nfsm_srvpostop_attr(nfsd, getret, &at, &mb); tl = nfsm_build(&mb, 2 * NFSX_UNSIGNED); txdr_hyper(at.va_filerev, tl); @@ -2618,7 +2598,7 @@ again: nlen = dp->d_namlen; pad = nfsm_padlen(nlen); len += (4 * NFSX_UNSIGNED + nlen + pad); - if (info.nmi_v3) + if (v3) len += 2 * NFSX_UNSIGNED; if (len > cnt) { eofflag = 0; @@ -2628,10 +2608,9 @@ again: * Build the directory record xdr from * the dirent entry. */ - tl = nfsm_build(&mb, - (info.nmi_v3 ? 3 : 2) * NFSX_UNSIGNED); + tl = nfsm_build(&mb, (v3 ? 3 : 2) * NFSX_UNSIGNED); *tl++ = nfs_true; - if (info.nmi_v3) + if (v3) txdr_hyper(dp->d_fileno, tl); else *tl = txdr_unsigned((u_int32_t)dp->d_fileno); @@ -2640,7 +2619,7 @@ again: nfsm_strtombuf(&mb, dp->d_name, nlen); /* Finish off the record */ - if (info.nmi_v3) { + if (v3) { tl = nfsm_build(&mb, 2*NFSX_UNSIGNED); txdr_hyper(dp->d_off, tl); } else { @@ -2671,7 +2650,6 @@ nfsrv_readdirplus(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct mbuf *mb; struct ucred *cred = &nfsd->nd_cr; struct dirent *dp; - struct nfsm_info info; u_int32_t *tl; char *cpos, *cend, *rbuf; struct vnode *vp, *nvp; @@ -2686,13 +2664,6 @@ nfsrv_readdirplus(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, int siz, cnt, fullsiz, eofflag, rdonly, dirlen; u_quad_t off, toff, verf; - info.nmi_mreq = NULL; - info.nmi_mrep = nfsd->nd_mrep; - info.nmi_md = nfsd->nd_md; - info.nmi_dpos = nfsd->nd_dpos; - info.nmi_v3 = (nfsd->nd_flag & ND_NFSV3); - info.nmi_errorp = &error; - if (nfsm_srvmtofh1(nfsd, slp, mrq, &mb, &error) != 0) return 0; else if (error != 0) @@ -2941,7 +2912,6 @@ nfsrv_commit(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct ucred *cred = &nfsd->nd_cr; struct vattr bfor, aft; struct vnode *vp; - struct nfsm_info info; struct timeval boottime; nfsfh_t nfh; fhandle_t *fhp; @@ -2949,13 +2919,6 @@ nfsrv_commit(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, int error = 0, rdonly, for_ret = 1, aft_ret = 1, cnt; u_quad_t off; - info.nmi_mreq = NULL; - info.nmi_mrep = nfsd->nd_mrep; - info.nmi_md = nfsd->nd_md; - info.nmi_dpos = nfsd->nd_dpos; - info.nmi_v3 = (nfsd->nd_flag & ND_NFSV3); - info.nmi_errorp = &error; - if (nfsm_srvmtofh1(nfsd, slp, mrq, &mb, &error) != 0) return 0; else if (error != 0) @@ -3016,7 +2979,6 @@ nfsrv_statfs(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct ucred *cred = &nfsd->nd_cr; struct statfs *sf; struct nfs_statfs *sfp; - struct nfsm_info info; int error = 0, rdonly, getret = 1; struct vnode *vp; struct vattr at; @@ -3024,13 +2986,9 @@ nfsrv_statfs(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, fhandle_t *fhp; struct statfs statfs; u_quad_t tval; + int v3; - info.nmi_mreq = NULL; - info.nmi_mrep = nfsd->nd_mrep; - info.nmi_md = nfsd->nd_md; - info.nmi_dpos = nfsd->nd_dpos; - info.nmi_v3 = (nfsd->nd_flag & ND_NFSV3); - info.nmi_errorp = &error; + v3 = (nfsd->nd_flag & ND_NFSV3); if (nfsm_srvmtofh1(nfsd, slp, mrq, &mb, &error) != 0) return 0; @@ -3039,7 +2997,6 @@ nfsrv_statfs(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, fhp = &nfh.fh_generic; if (nfsm_srvmtofh2(nfsd, fhp, &error) != 0) goto nfsmout; - info.nmi_dpos = nfsd->nd_dpos; /* resync */ error = nfsrv_fhtovp(fhp, 1, &vp, cred, slp, nam, &rdonly); if (error) { if (nfsm_reply(nfsd, slp, mrq, &mb, error, @@ -3054,16 +3011,16 @@ nfsrv_statfs(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, getret = VOP_GETATTR(vp, &at, cred, procp); vput(vp); if (nfsm_reply(nfsd, slp, mrq, &mb, error, - NFSX_POSTOPATTR(info.nmi_v3) + NFSX_STATFS(info.nmi_v3)) != 0) + NFSX_POSTOPATTR(v3) + NFSX_STATFS(v3)) != 0) return 0; - if (info.nmi_v3) + if (v3) nfsm_srvpostop_attr(nfsd, getret, &at, &mb); if (error) { error = 0; goto nfsmout; } - sfp = nfsm_build(&mb, NFSX_STATFS(info.nmi_v3)); - if (info.nmi_v3) { + sfp = nfsm_build(&mb, NFSX_STATFS(v3)); + if (v3) { tval = (u_quad_t)sf->f_blocks; tval *= (u_quad_t)sf->f_bsize; txdr_hyper(tval, &sfp->sf_tbytes); @@ -3100,7 +3057,6 @@ nfsrv_fsinfo(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct mbuf *nam = nfsd->nd_nam; struct mbuf *mb; struct ucred *cred = &nfsd->nd_cr; - struct nfsm_info info; struct nfsv3_fsinfo *sip; int error = 0, rdonly, getret = 1, pref; struct vnode *vp; @@ -3108,13 +3064,6 @@ nfsrv_fsinfo(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, nfsfh_t nfh; fhandle_t *fhp; - info.nmi_mreq = NULL; - info.nmi_mrep = nfsd->nd_mrep; - info.nmi_md = nfsd->nd_md; - info.nmi_dpos = nfsd->nd_dpos; - info.nmi_v3 = (nfsd->nd_flag & ND_NFSV3); - info.nmi_errorp = &error; - if (nfsm_srvmtofh1(nfsd, slp, mrq, &mb, &error) != 0) return 0; else if (error != 0) @@ -3122,7 +3071,6 @@ nfsrv_fsinfo(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, fhp = &nfh.fh_generic; if (nfsm_srvmtofh2(nfsd, fhp, &error) != 0) goto nfsmout; - info.nmi_dpos = nfsd->nd_dpos; /* resync */ error = nfsrv_fhtovp(fhp, 1, &vp, cred, slp, nam, &rdonly); if (error) { if (nfsm_reply(nfsd, slp, mrq, &mb, error, @@ -3177,7 +3125,6 @@ nfsrv_pathconf(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct mbuf *nam = nfsd->nd_nam; struct mbuf *mb; struct ucred *cred = &nfsd->nd_cr; - struct nfsm_info info; struct nfsv3_pathconf *pc; int error = 0, rdonly, getret = 1; register_t linkmax, namemax, chownres, notrunc; @@ -3186,13 +3133,6 @@ nfsrv_pathconf(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, nfsfh_t nfh; fhandle_t *fhp; - info.nmi_mreq = NULL; - info.nmi_mrep = nfsd->nd_mrep; - info.nmi_md = nfsd->nd_md; - info.nmi_dpos = nfsd->nd_dpos; - info.nmi_v3 = (nfsd->nd_flag & ND_NFSV3); - info.nmi_errorp = &error; - if (nfsm_srvmtofh1(nfsd, slp, mrq, &mb, &error) != 0) return 0; else if (error != 0) @@ -3200,7 +3140,6 @@ nfsrv_pathconf(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, fhp = &nfh.fh_generic; if (nfsm_srvmtofh2(nfsd, fhp, &error) != 0) goto nfsmout; - info.nmi_dpos = nfsd->nd_dpos; /* resync */ error = nfsrv_fhtovp(fhp, 1, &vp, cred, slp, nam, &rdonly); if (error) { if (nfsm_reply(nfsd, slp, mrq, &mb, error, @@ -3252,17 +3191,9 @@ int nfsrv_null(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct proc *procp, struct mbuf **mrq) { - struct nfsm_info info; struct mbuf *mb; int error = NFSERR_RETVOID; - info.nmi_mreq = NULL; - info.nmi_mrep = nfsd->nd_mrep; - info.nmi_md = nfsd->nd_md; - info.nmi_dpos = nfsd->nd_dpos; - info.nmi_v3 = (nfsd->nd_flag & ND_NFSV3); - info.nmi_errorp = &error; - if (nfsm_reply(nfsd, slp, mrq, &mb, error, 0) != 0) return 0; return (0); @@ -3275,17 +3206,9 @@ int nfsrv_noop(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, struct proc *procp, struct mbuf **mrq) { - struct nfsm_info info; struct mbuf *mb; int error; - info.nmi_mreq = NULL; - info.nmi_mrep = nfsd->nd_mrep; - info.nmi_md = nfsd->nd_md; - info.nmi_dpos = nfsd->nd_dpos; - info.nmi_v3 = (nfsd->nd_flag & ND_NFSV3); - info.nmi_errorp = &error; - if (nfsd->nd_repstat) error = nfsd->nd_repstat; else