Lines Matching +full:2 +full:nd
15 * 2. Redistributions in binary form must reproduce the above copyright
220 * not running. The setting must be a power of 2, with the current limit of
245 printf("nfsd: vfs.nfsd.srvmaxio must be a power of 2\n");
388 nh->nh_seqcount /= 2;
403 struct nfsrv_descript *nd, struct thread *p, int vpislocked,
434 (nd->nd_flag & ND_NFSV4) == 0 ||
440 error = nfsrv_proxyds(vp, 0, 0, nd->nd_cred, p,
447 error = VOP_GETATTR(vp, &nvap->na_vattr, nd->nd_cred);
491 * 2 - The owner is to be given access irrespective of mode bits for some
613 savedit = 2;
615 if (savedit != 2)
643 nfsvno_namei(struct nfsrv_descript *nd, struct nameidata *ndp,
678 if (nd->nd_flag & ND_PUBLOOKUP) {
697 (nd->nd_flag & ND_NFSV4) == 0) {
745 if (!(nd->nd_flag & ND_PUBLOOKUP)) {
830 NFSEXITCODE2(error, nd);
1209 nfsvno_createsub(struct nfsrv_descript *nd, struct nameidata *ndp,
1217 error = nd->nd_repstat;
1230 nd->nd_cred, p);
1242 &nvap->na_vattr, nd->nd_cred);
1259 (error = priv_check_cred(nd->nd_cred, PRIV_VFS_MKNOD_DEV))) {
1284 * 2 - iff !error and na_size set, truncate it
1294 nd->nd_cred, exp, p, NFSACCCHK_NOOVERRIDE,
1301 nd->nd_cred, p, exp);
1443 nfsvno_getsymlink(struct nfsrv_descript *nd, struct nfsvattr *nvap,
1453 if ((nd->nd_flag & ND_NFSV3) &&
1454 (error = nfsrv_sattr(nd, NULL, nvap, NULL, NULL, p)))
1463 error = nfsrv_mtostr(nd, pathcp, len);
1466 if (nd->nd_flag & ND_NFSV2) {
1472 NFSEXITCODE2(0, nd);
1477 NFSEXITCODE2(error, nd);
1598 (tondp->ni_cnd.cn_namelen == 2 &&
1759 * f_iosize is a power of 2.
1878 nfsvno_open(struct nfsrv_descript *nd, struct nameidata *ndp,
1895 oldrepstat = nd->nd_repstat;
1896 nd->nd_repstat = nfsrv_opencheck(clientid,
1897 stateidp, stp, NULL, nd, p, nd->nd_repstat);
1898 if (nd->nd_repstat != 0 && oldrepstat == 0)
1901 if (!nd->nd_repstat) {
1903 nd->nd_repstat = VOP_CREATE(ndp->ni_dvp,
1906 if (nd->nd_repstat == 0) {
1915 VOP_VPUT_PAIR(ndp->ni_dvp, nd->nd_repstat == 0 ?
1918 if (!nd->nd_repstat) {
1924 nd->nd_repstat = VOP_SETATTR(ndp->ni_vp,
1926 if (nd->nd_repstat != 0) {
1929 nd->nd_repstat = NFSERR_NOTSUPP;
1934 nfsrv_fixattr(nd, ndp->ni_vp, nvap,
1953 nd->nd_repstat = nfsvno_accchk(vp,
1957 nd->nd_repstat = nfsrv_opencheck(clientid,
1958 stateidp, stp, vp, nd, p, nd->nd_repstat);
1959 if (!nd->nd_repstat) {
1963 nd->nd_repstat = nfsvno_setattr(vp,
1967 nd->nd_repstat = nfsrv_opencheck(clientid,
1968 stateidp, stp, vp, nd, p, nd->nd_repstat);
1990 NFSEXITCODE2(0, nd);
2001 struct nfsrv_descript *nd, struct thread *p)
2012 (void) VOP_SETATTR(vp, &va, nd->nd_cred);
2013 (void) nfsvno_getattr(vp, nvap, nd, p, 1, NULL);
2021 nfsvno_fillattr(struct nfsrv_descript *nd, struct mount *mp, struct vnode *vp,
2041 error = nfsv4_fillattr(nd, mp, vp, NULL, &nvap->na_vattr, fhp, rderror,
2045 NFSEXITCODE2(0, nd);
2074 nfsrvd_readdir(struct nfsrv_descript *nd, int isdgram,
2091 if (nd->nd_repstat) {
2092 nfsrv_postopattr(nd, getret, &at);
2095 if (nd->nd_flag & ND_NFSV2) {
2096 NFSM_DISSECT(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
2101 tl += 2;
2103 tl += 2;
2107 if (cnt > NFS_SRVMAXDATA(nd) || cnt < 0)
2108 cnt = NFS_SRVMAXDATA(nd);
2111 if (nd->nd_flag & ND_NFSV3) {
2112 nd->nd_repstat = getret = nfsvno_getattr(vp, &at, nd, p, 1,
2121 if (!nd->nd_repstat && toff && verf != at.na_filerev)
2122 nd->nd_repstat = NFSERR_BAD_COOKIE;
2125 if (!nd->nd_repstat && vp->v_type != VDIR)
2126 nd->nd_repstat = NFSERR_NOTDIR;
2127 if (nd->nd_repstat == 0 && cnt == 0) {
2128 if (nd->nd_flag & ND_NFSV2)
2130 nd->nd_repstat = EPERM;
2132 nd->nd_repstat = NFSERR_TOOSMALL;
2134 if (!nd->nd_repstat)
2135 nd->nd_repstat = nfsvno_accchk(vp, VEXEC,
2136 nd->nd_cred, exp, p, NFSACCCHK_NOOVERRIDE,
2138 if (nd->nd_repstat) {
2140 if (nd->nd_flag & ND_NFSV3)
2141 nfsrv_postopattr(nd, getret, &at);
2162 nd->nd_repstat = VOP_READDIR(vp, &io, nd->nd_cred, &eofflag, &ncookies,
2168 if (!cookies && !nd->nd_repstat)
2169 nd->nd_repstat = NFSERR_PERM;
2170 if (nd->nd_flag & ND_NFSV3) {
2171 getret = nfsvno_getattr(vp, &at, nd, p, 1, NULL);
2172 if (!nd->nd_repstat)
2173 nd->nd_repstat = getret;
2177 * Handles the failed cases. nd->nd_repstat == 0 past here.
2179 if (nd->nd_repstat) {
2184 if (nd->nd_flag & ND_NFSV3)
2185 nfsrv_postopattr(nd, getret, &at);
2194 if (nd->nd_flag & ND_NFSV2) {
2195 NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
2197 nfsrv_postopattr(nd, getret, &at);
2200 tl += 2;
2247 (nd->nd_flag & (ND_TLS | ND_EXTPG | ND_SAVEREPLY)) == ND_TLS &&
2248 (nd->nd_flag & (ND_NFSV4 | ND_NFSV41)) != ND_NFSV4)
2249 nd->nd_flag |= ND_EXTPG;
2257 if (nd->nd_flag & ND_NFSV3) {
2258 nfsrv_postopattr(nd, getret, &at);
2259 NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
2261 dirlen = NFSX_V3POSTOPATTR + NFSX_VERF + 2 * NFSX_UNSIGNED;
2263 dirlen = 2 * NFSX_UNSIGNED;
2271 if (nd->nd_flag & ND_NFSV3)
2284 if (nd->nd_flag & ND_NFSV3) {
2289 NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
2293 (void) nfsm_strtom(nd, dp->d_name, nlen);
2294 if (nd->nd_flag & ND_NFSV3) {
2295 NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
2309 NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
2319 NFSEXITCODE2(0, nd);
2323 NFSEXITCODE2(error, nd);
2331 nfsrvd_readdirplus(struct nfsrv_descript *nd, int isdgram,
2358 if (nd->nd_repstat) {
2359 nfsrv_postopattr(nd, getret, &at);
2365 tl += 2;
2367 tl += 2;
2375 if (cnt > NFS_SRVMAXDATA(nd) || cnt < 0)
2376 cnt = NFS_SRVMAXDATA(nd);
2390 else if (siz > NFS_SRVMAXDATA(nd))
2391 siz = NFS_SRVMAXDATA(nd);
2394 if (nd->nd_flag & ND_NFSV4) {
2395 error = nfsrv_getattrbits(nd, &attrbits, NULL, NULL);
2400 NFSCLRNOTFILLABLE_ATTRBIT(&attrbits, nd);
2417 nd->nd_repstat = getret = nfsvno_getattr(vp, &at, nd, p, 1, NULL);
2419 if (!nd->nd_repstat) {
2427 if (nd->nd_flag & ND_NFSV4) {
2428 nd->nd_repstat = NFSERR_NOTSAME;
2430 nd->nd_repstat = NFSERR_BAD_COOKIE;
2435 if (!nd->nd_repstat && vp->v_type != VDIR)
2436 nd->nd_repstat = NFSERR_NOTDIR;
2437 if (!nd->nd_repstat && cnt == 0)
2438 nd->nd_repstat = NFSERR_TOOSMALL;
2439 if (!nd->nd_repstat)
2440 nd->nd_repstat = nfsvno_accchk(vp, VEXEC,
2441 nd->nd_cred, exp, p, NFSACCCHK_NOOVERRIDE,
2443 if (nd->nd_repstat) {
2445 if (nd->nd_flag & ND_NFSV3)
2446 nfsrv_postopattr(nd, getret, &at);
2469 nd->nd_repstat = VOP_READDIR(vp, &io, nd->nd_cred, &eofflag, &ncookies,
2475 getret = nfsvno_getattr(vp, &at, nd, p, 1, NULL);
2477 if (!cookies && !nd->nd_repstat)
2478 nd->nd_repstat = NFSERR_PERM;
2479 if (!nd->nd_repstat)
2480 nd->nd_repstat = getret;
2481 if (nd->nd_repstat) {
2486 if (nd->nd_flag & ND_NFSV3)
2487 nfsrv_postopattr(nd, getret, &at);
2496 if (nd->nd_flag & ND_NFSV3)
2497 nfsrv_postopattr(nd, getret, &at);
2500 tl += 2;
2527 ((nd->nd_flag & ND_NFSV4) &&
2529 (dp->d_namlen==2 && dp->d_name[0]=='.' && dp->d_name[1]=='.'))))) {
2548 nd->nd_repstat = vfs_busy(mp, 0);
2550 if (nd->nd_repstat != 0) {
2554 if (nd->nd_flag & ND_NFSV3)
2555 nfsrv_postopattr(nd, getret, &at);
2574 cn.cn_cred = nd->nd_cred;
2589 (nd->nd_flag & (ND_TLS | ND_EXTPG | ND_SAVEREPLY)) == ND_TLS &&
2590 (nd->nd_flag & (ND_NFSV4 | ND_NFSV41)) != ND_NFSV4)
2591 nd->nd_flag |= ND_EXTPG;
2597 mb0 = nd->nd_mb;
2598 bpos0 = nd->nd_bpos;
2599 bextpg0 = nd->nd_bextpg;
2600 bextpgsiz0 = nd->nd_bextpgsiz;
2608 if (nd->nd_flag & ND_NFSV3) {
2609 dirlen = NFSX_V3POSTOPATTR + NFSX_VERF + 2 * NFSX_UNSIGNED;
2610 nfsrv_postopattr(nd, getret, &at);
2612 dirlen = NFSX_VERF + 2 * NFSX_UNSIGNED;
2620 mb1 = nd->nd_mb;
2621 bpos1 = nd->nd_bpos;
2622 bextpg1 = nd->nd_bextpg;
2623 bextpgsiz1 = nd->nd_bextpgsiz;
2631 ((nd->nd_flag & ND_NFSV3) || nlen > 2 ||
2632 (nlen==2 && (dp->d_name[0]!='.' || dp->d_name[1]!='.'))
2638 mb1 = nd->nd_mb;
2639 bpos1 = nd->nd_bpos;
2640 bextpg1 = nd->nd_bextpg;
2641 bextpgsiz1 = nd->nd_bextpgsiz;
2654 if ((nd->nd_flag & ND_NFSV3) ||
2659 if (nd->nd_flag & ND_NFSV4)
2676 nd->nd_cred;
2682 if (nlen == 2 &&
2689 nd->nd_repstat = EPERM;
2713 (nd->nd_flag & ND_NFSV4) != 0 &&
2743 ((nd->nd_flag & ND_NFSV3) ||
2747 r = nfsvno_getattr(nvp, nvap, nd, p,
2751 (nd->nd_flag & ND_NFSV4) != 0 &&
2788 if ((nd->nd_flag & ND_NFSV3) ||
2791 nd->nd_repstat = r;
2805 if (nd->nd_flag & ND_NFSV3) {
2809 dirlen += nfsm_strtom(nd, dp->d_name, nlen);
2810 NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
2812 nfsrv_postopattr(nd, 0, nvap);
2813 dirlen += nfsm_fhtom(NULL, nd, (u_int8_t *)&nfh,
2822 dirlen += nfsm_strtom(nd, dp->d_name, nlen);
2830 dirlen += nfsrv_putreferralattr(nd,
2832 &nd->nd_repstat);
2833 if (nd->nd_repstat) {
2841 dirlen += nfsvno_fillattr(nd, new_mp,
2843 nd->nd_cred, p, isdgram, 0,
2847 dirlen += nfsvno_fillattr(nd, new_mp,
2849 nd->nd_cred, p, isdgram, 0,
2875 if (dirlen > cnt || nd->nd_repstat) {
2876 if (!nd->nd_repstat && entrycnt == 0)
2877 nd->nd_repstat = NFSERR_TOOSMALL;
2878 if (nd->nd_repstat) {
2879 nfsm_trimtrailing(nd, mb0, bpos0, bextpg0, bextpgsiz0);
2880 if (nd->nd_flag & ND_NFSV3)
2881 nfsrv_postopattr(nd, getret, &at);
2883 nfsm_trimtrailing(nd, mb1, bpos1, bextpg1, bextpgsiz1);
2887 if (!nd->nd_repstat) {
2888 NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
2899 NFSEXITCODE2(0, nd);
2903 NFSEXITCODE2(error, nd);
2912 nfsrv_sattr(struct nfsrv_descript *nd, vnode_t vp, struct nfsvattr *nvap,
2919 switch (nd->nd_flag & (ND_NFSV2 | ND_NFSV3 | ND_NFSV4)) {
2924 * --> check the low order 2 bytes for 0xffff
2964 NFSM_DISSECT(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
2970 NFSM_DISSECT(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
2982 NFSM_DISSECT(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
2994 error = nfsv4_sattr(nd, vp, nvap, attrbitp, aclp, p);
2997 NFSEXITCODE2(error, nd);
3006 nfsv4_sattr(struct nfsrv_descript *nd, vnode_t vp, struct nfsvattr *nvap,
3020 error = nfsrv_getattrbits(nd, attrbitp, NULL, &retnotsup);
3033 nd->nd_repstat = NFSERR_ATTRNOTSUPP;
3048 if (!nd->nd_repstat) {
3050 nd->nd_repstat = (vp->v_type == VDIR) ?
3058 error = nfsrv_dissectacl(nd, aclp, true, &aceerr,
3062 if (aceerr && !nd->nd_repstat)
3063 nd->nd_repstat = aceerr;
3068 if (!nd->nd_repstat)
3069 nd->nd_repstat = NFSERR_ATTRNOTSUPP;
3074 if (!nd->nd_repstat)
3075 nd->nd_repstat = NFSERR_ATTRNOTSUPP;
3081 error = nfsm_advance(nd, NFSM_RNDUP(i), -1);
3084 if (!nd->nd_repstat)
3085 nd->nd_repstat = NFSERR_ATTRNOTSUPP;
3091 if (!nd->nd_repstat)
3106 error = nfsrv_mtostr(nd, cp, j);
3112 if (!nd->nd_repstat) {
3113 nd->nd_repstat = nfsv4_strtouid(nd, cp, j,
3115 if (!nd->nd_repstat)
3133 error = nfsrv_mtostr(nd, cp, j);
3139 if (!nd->nd_repstat) {
3140 nd->nd_repstat = nfsv4_strtogid(nd, cp, j,
3142 if (!nd->nd_repstat)
3151 if (!nd->nd_repstat)
3152 nd->nd_repstat = NFSERR_ATTRNOTSUPP;
3160 if (!nd->nd_repstat)
3164 } else if (!nd->nd_repstat) {
3171 if (!nd->nd_repstat)
3172 nd->nd_repstat = NFSERR_ATTRNOTSUPP;
3177 if (!nd->nd_repstat)
3186 if (!nd->nd_repstat)
3190 } else if (!nd->nd_repstat) {
3197 NFSM_DISSECT(tl, uint32_t *, 2 * NFSX_UNSIGNED);
3208 if (!nd->nd_repstat) {
3209 if ((nd->nd_flag & ND_NFSV41) == 0)
3210 nd->nd_repstat = NFSERR_ATTRNOTSUPP;
3213 nd->nd_repstat = NFSERR_INVAL;
3216 nd->nd_cred);
3221 nd->nd_repstat = moderet;
3223 attrsum += 2 * NFSX_UNSIGNED;
3226 NFSM_DISSECT(tl, uint32_t *, 2 * NFSX_UNSIGNED);
3233 if (!nd->nd_repstat) {
3234 if ((nd->nd_flag & ND_NFSV42) == 0)
3235 nd->nd_repstat = NFSERR_ATTRNOTSUPP;
3238 nd->nd_repstat = NFSERR_INVAL;
3242 attrsum += 2 * NFSX_UNSIGNED;
3245 nd->nd_repstat = NFSERR_ATTRNOTSUPP;
3263 error = nfsm_advance(nd, attrsize - attrsum, -1);
3266 NFSEXITCODE2(error, nd);
3274 nfsd_excred(struct nfsrv_descript *nd, struct nfsexstuff *exp,
3282 if (nd->nd_flag & ND_GSS)
3290 error = nfsvno_testexp(nd, exp);
3298 if (NFSVNO_EXV4ONLY(exp) && !(nd->nd_flag & ND_NFSV4)) {
3310 if (((nd->nd_flag & ND_GSS) == 0 && nd->nd_cred->cr_uid == 0) ||
3312 (nd->nd_flag & ND_AUTHNONE) != 0) {
3313 nd->nd_cred->cr_uid = credanon->cr_uid;
3319 crsetgroups(nd->nd_cred, credanon->cr_ngroups,
3321 } else if ((nd->nd_flag & ND_GSS) == 0) {
3329 nd->nd_cred = nfsrv_getgrpscred(nd->nd_cred);
3334 NFSEXITCODE2(error, nd);
3428 nfsd_fhtovp(struct nfsrv_descript *nd, struct nfsrvfh *nfp, int lktype,
3443 nd->nd_repstat = ESTALE;
3453 nd->nd_repstat = ESTALE;
3461 nd->nd_repstat = nfsvno_fhtovp(mp, fhp, nd->nd_nam, lktype, vpp, exp,
3469 if (!nd->nd_repstat && exp->nes_exflag == 0 &&
3470 !(nd->nd_flag & ND_NFSV4)) {
3473 nd->nd_repstat = EACCES;
3491 if (!nd->nd_repstat) {
3495 saddr = NFSSOCKADDR(nd->nd_nam, struct sockaddr_in *);
3496 saddr6 = NFSSOCKADDR(nd->nd_nam, struct sockaddr_in6 *);
3497 if (!(nd->nd_flag & ND_NFSV4) &&
3503 nd->nd_repstat = (NFSERR_AUTHERR | AUTH_TOOWEAK);
3511 if (!nd->nd_repstat) {
3512 nd->nd_saveduid = nd->nd_cred->cr_uid;
3513 nd->nd_repstat = nfsd_excred(nd, exp, credanon,
3514 nfsrv_checkwrongsec(nd, nextop, (*vpp)->v_type));
3515 if (nd->nd_repstat)
3520 if (nd->nd_repstat) {
3528 NFSEXITCODE2(0, nd);
3564 struct nameidata nd;
3578 NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, nfsexargp->fspec);
3579 if ((error = namei(&nd)) != 0)
3581 error = nfsvno_getfh(nd.ni_vp, &fh, p);
3582 vrele(nd.ni_vp);
3740 nfsvno_v4rootexport(struct nfsrv_descript *nd)
3746 error = vfs_stdcheckexp(NFSD_VNET(nfsv4root_mnt), nd->nd_nam, &exflags,
3756 nd->nd_flag |= ND_EXAUTHSYS;
3758 nd->nd_flag |= ND_EXGSS;
3760 nd->nd_flag |= ND_EXGSSINTEGRITY;
3762 nd->nd_flag |= ND_EXGSSPRIVACY;
3767 nd->nd_flag |= ND_EXTLS;
3769 nd->nd_flag |= ND_EXTLSCERT;
3771 nd->nd_flag |= ND_EXTLSCERTUSER;
4006 struct nameidata nd;
4125 error = nfsrv_lookupfilename(&nd,
4131 nfsrv_dumplocks(nd.ni_vp, dumplocks,
4133 vput(nd.ni_vp);
4179 nfsvno_testexp(struct nfsrv_descript *nd, struct nfsexstuff *exp)
4183 if ((NFSVNO_EXTLS(exp) && (nd->nd_flag & ND_TLS) == 0) ||
4185 (nd->nd_flag & ND_TLSCERT) == 0) ||
4187 (nd->nd_flag & ND_TLSCERTUSER) == 0)) {
4188 if ((nd->nd_flag & ND_NFSV4) != 0)
4192 else if ((nd->nd_flag & ND_TLS) == 0)
4205 if ((nd->nd_flag & ND_NFSV3) != 0 && nd->nd_procnum == NFSPROC_FSINFO)
4223 (nd->nd_flag & ND_GSSPRIVACY))
4226 (nd->nd_flag & ND_GSSINTEGRITY))
4229 (nd->nd_flag & ND_GSS))
4232 (nd->nd_flag & ND_GSS) == 0)
4235 if ((nd->nd_flag & ND_NFSV4) != 0)
4844 bufp[2 * i] = hexdigits[(*cp >> 4) & 0xf];
4845 bufp[2 * i + 1] = hexdigits[*cp++ & 0xf];
4847 bufp[2 * i] = '\0';
4848 return (2 * i);
5347 struct nfsrv_descript *nd;
5353 nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO);
5363 st.other[2] = 0x55555555;
5365 nfscl_reqstart(nd, NFSPROC_READDS, nmp, (u_int8_t *)fhp, sizeof(*fhp),
5367 nfsm_stateidtom(nd, &st, NFSSTATEID_PUTSTATEID);
5370 *(tl + 2) = txdr_unsigned(len);
5371 error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
5374 free(nd, M_TEMP);
5377 if (nd->nd_repstat == 0) {
5382 m = nd->nd_mrep;
5383 while (m != NULL && m != nd->nd_md) {
5384 if (m->m_next == nd->nd_md) {
5386 m_freem(nd->nd_mrep);
5387 nd->nd_mrep = m = nd->nd_md;
5401 trimlen = nd->nd_dpos - mtod(m, char *);
5430 *mpp = nd->nd_mrep;
5432 nd->nd_mrep = NULL;
5435 error = nd->nd_repstat;
5437 /* If nd->nd_mrep is already NULL, this is a no-op. */
5438 m_freem(nd->nd_mrep);
5439 free(nd, M_TEMP);
5467 struct nfsrv_descript *nd;
5472 nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO);
5473 nfscl_reqstart(nd, NFSPROC_WRITE, nmp, (u_int8_t *)fhp,
5484 st.other[2] = 0x55555555;
5486 nfsm_stateidtom(nd, &st, NFSSTATEID_PUTSTATEID);
5487 NFSM_BUILD(tl, u_int32_t *, NFSX_HYPER + 2 * NFSX_UNSIGNED);
5489 tl += 2;
5501 nd->nd_mb->m_next = m;
5506 nd->nd_mb = m;
5507 nfsm_set(nd, m->m_len);
5519 (void) nfsrv_putattrbit(nd, &attrbits);
5520 error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p,
5523 free(nd, M_TEMP);
5526 NFSD_DEBUG(4, "nfsrv_writedsdorpc: aft writerpc=%d\n", nd->nd_repstat);
5528 if ((nd->nd_flag & (ND_NOMOREDATA | ND_NFSV4 | ND_V4WCCATTR)) ==
5530 error = nfsv4_loadattr(nd, NULL, nap, NULL, NULL, 0, NULL, NULL,
5538 NFSM_DISSECT(tl, uint32_t *, 2 * NFSX_UNSIGNED);
5540 nd->nd_flag |= ND_NOMOREDATA;
5542 if (nd->nd_repstat == 0) {
5543 NFSM_DISSECT(tl, uint32_t *, 2 * NFSX_UNSIGNED + NFSX_VERF);
5551 error = nd->nd_repstat;
5560 NFSM_DISSECT(tl, uint32_t *, 2 * NFSX_UNSIGNED);
5561 error = nfsv4_loadattr(nd, NULL, nap, NULL, NULL, 0, NULL, NULL,
5566 m_freem(nd->nd_mrep);
5567 free(nd, M_TEMP);
5689 struct nfsrv_descript *nd;
5694 nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO);
5695 nfscl_reqstart(nd, NFSPROC_ALLOCATE, nmp, (u_int8_t *)fhp,
5706 st.other[2] = 0x55555555;
5708 nfsm_stateidtom(nd, &st, NFSSTATEID_PUTSTATEID);
5709 NFSM_BUILD(tl, uint32_t *, 2 * NFSX_HYPER + NFSX_UNSIGNED);
5710 txdr_hyper(off, tl); tl += 2;
5711 txdr_hyper(len, tl); tl += 2;
5716 nfsrv_putattrbit(nd, &attrbits);
5717 error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p,
5720 free(nd, M_TEMP);
5724 nd->nd_repstat);
5725 if (nd->nd_repstat == 0) {
5726 NFSM_DISSECT(tl, uint32_t *, 2 * NFSX_UNSIGNED);
5727 error = nfsv4_loadattr(nd, NULL, nap, NULL, NULL, 0, NULL, NULL,
5730 error = nd->nd_repstat;
5733 m_freem(nd->nd_mrep);
5734 free(nd, M_TEMP);
5849 struct nfsrv_descript *nd;
5854 nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO);
5855 nfscl_reqstart(nd, NFSPROC_DEALLOCATE, nmp, (u_int8_t *)fhp,
5866 st.other[2] = 0x55555555;
5868 nfsm_stateidtom(nd, &st, NFSSTATEID_PUTSTATEID);
5869 NFSM_BUILD(tl, uint32_t *, 2 * NFSX_HYPER + NFSX_UNSIGNED);
5870 txdr_hyper(off, tl); tl += 2;
5871 txdr_hyper(len, tl); tl += 2;
5882 nfsrv_putattrbit(nd, &attrbits);
5883 error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p,
5886 free(nd, M_TEMP);
5890 nd->nd_repstat);
5892 if ((nd->nd_flag & (ND_NOMOREDATA | ND_NFSV4 | ND_V4WCCATTR)) ==
5894 error = nfsv4_loadattr(nd, NULL, nap, NULL, NULL, 0, NULL, NULL,
5902 NFSM_DISSECT(tl, uint32_t *, 2 * NFSX_UNSIGNED);
5904 nd->nd_flag |= ND_NOMOREDATA;
5906 if (nd->nd_repstat == 0) {
5907 NFSM_DISSECT(tl, uint32_t *, 2 * NFSX_UNSIGNED);
5908 error = nfsv4_loadattr(nd, NULL, nap, NULL, NULL, 0, NULL, NULL,
5911 error = nd->nd_repstat;
5914 m_freem(nd->nd_mrep);
5915 free(nd, M_TEMP);
6013 struct nfsrv_descript *nd;
6019 nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO);
6028 st.other[2] = 0x55555555;
6030 nfscl_reqstart(nd, NFSPROC_SETATTR, nmp, (u_int8_t *)fhp, sizeof(*fhp),
6032 nfsm_stateidtom(nd, &st, NFSSTATEID_PUTSTATEID);
6033 nfscl_fillsattr(nd, &nap->na_vattr, vp, NFSSATTR_FULL, 0);
6044 (void) nfsrv_putattrbit(nd, &attrbits);
6045 error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
6048 free(nd, M_TEMP);
6052 nd->nd_repstat);
6054 if ((nd->nd_flag & (ND_NOMOREDATA | ND_NFSV4 | ND_V4WCCATTR)) ==
6056 error = nfsv4_loadattr(nd, NULL, dsnap, NULL, NULL, 0, NULL,
6064 NFSM_DISSECT(tl, uint32_t *, 2 * NFSX_UNSIGNED);
6066 nd->nd_flag |= ND_NOMOREDATA;
6068 error = nfsrv_getattrbits(nd, &attrbits, NULL, NULL);
6071 if (nd->nd_repstat != 0)
6072 error = nd->nd_repstat;
6079 NFSM_DISSECT(tl, uint32_t *, 2 * NFSX_UNSIGNED);
6080 error = nfsv4_loadattr(nd, NULL, dsnap, NULL, NULL, 0, NULL,
6085 m_freem(nd->nd_mrep);
6086 free(nd, M_TEMP);
6198 struct nfsrv_descript *nd;
6204 nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO);
6213 st.other[2] = 0x55555555;
6215 nfscl_reqstart(nd, NFSPROC_SETACL, nmp, (u_int8_t *)fhp, sizeof(*fhp),
6217 nfsm_stateidtom(nd, &st, NFSSTATEID_PUTSTATEID);
6225 nfsv4_fillattr(nd, NULL, vp, aclp, NULL, NULL, 0, &attrbits, NULL,
6227 error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
6230 free(nd, M_TEMP);
6234 nd->nd_repstat);
6235 error = nd->nd_repstat;
6236 m_freem(nd->nd_mrep);
6237 free(nd, M_TEMP);
6344 struct nfsrv_descript *nd;
6349 nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO);
6350 nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, (u_int8_t *)fhp,
6358 (void) nfsrv_putattrbit(nd, &attrbits);
6359 error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
6362 free(nd, M_TEMP);
6366 nd->nd_repstat);
6367 if (nd->nd_repstat == 0) {
6368 error = nfsv4_loadattr(nd, NULL, nap, NULL, NULL, 0,
6387 error = nd->nd_repstat;
6388 m_freem(nd->nd_mrep);
6389 free(nd, M_TEMP);
6402 struct nfsrv_descript *nd;
6415 st.other[2] = 0x55555555;
6417 nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO);
6418 nfscl_reqstart(nd, NFSPROC_SEEKDS, nmp, (u_int8_t *)fhp,
6420 nfsm_stateidtom(nd, &st, NFSSTATEID_PUTSTATEID);
6422 txdr_hyper(*offp, tl); tl += 2;
6424 error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred,
6427 free(nd, M_TEMP);
6430 NFSD_DEBUG(4, "nfsrv_seekdsrpc: aft seekrpc=%d\n", nd->nd_repstat);
6431 if (nd->nd_repstat == 0) {
6439 error = nd->nd_repstat;
6441 m_freem(nd->nd_mrep);
6442 free(nd, M_TEMP);
6651 * With NFSv4 ACLs, chmod(2) may need to add additional entries.
6656 if (aclp->acl_cnt > (ACL_MAX_ENTRIES - 6) / 2) {
6678 nfsvno_seek(struct nfsrv_descript *nd, struct vnode *vp, u_long cmd,
6699 * NFSv4.2 is *eofp == true and error == 0 for this case.
6706 ret = nfsvno_getattr(vp, &at, nd, p, 0, NULL);
6970 nfsvno_rmxattr(struct nfsrv_descript *nd, struct vnode *vp, char *name,
6979 error = nfsrv_checkremove(vp, 0, nd, nd->nd_clientid, p);
7073 nfsm_trimtrailing(struct nfsrv_descript *nd, struct mbuf *mb, char *bpos,
7105 nd->nd_bextpgsiz = bextpgsiz;
7106 nd->nd_bextpg = bextpg;
7109 nd->nd_mb = mb;
7110 nd->nd_bpos = bpos;
7122 nfsrv_checkwrongsec(struct nfsrv_descript *nd, int nextop, __enum_uint8(vtype) vtyp)
7125 if ((nd->nd_flag & ND_NFSV4) == 0)
7128 if ((nd->nd_flag & ND_LASTOP) != 0)
7327 /* So that loader and kldload(2) can find us, wherever we are.. */