# HG changeset patch # User jwahlig # Date 1189794248 25200 # Node ID e67c98912955d2c87c4a73c629b0507edf7e1efb # Parent 09764a26229ef1b3e2fadfec9596ad9d33007983 PSARC 2007/456 Vnode Specific Data 6588504 VSD: Stop polluting the vnode. 6591603 Use VSD to store and retrieve the "file" struct 6591606 rfs_create() passes the wrong vnode to rfs4_check_delegated diff -r 09764a26229e -r e67c98912955 usr/src/uts/common/fs/nfs/nfs4_srv.c --- a/usr/src/uts/common/fs/nfs/nfs4_srv.c Fri Sep 14 10:25:36 2007 -0700 +++ b/usr/src/uts/common/fs/nfs/nfs4_srv.c Fri Sep 14 11:24:08 2007 -0700 @@ -145,6 +145,7 @@ static sysid_t lockt_sysid; /* dummy sysid for all LOCKT calls */ u_longlong_t nfs4_srv_caller_id; +uint_t nfs4_srv_vkey = 0; verifier4 Write4verf; verifier4 Readdir4verf; @@ -547,7 +548,7 @@ rfs4_disable_delegation(); } else { error = fem_create("deleg_wrops", nfs4_wr_deleg_tmpl, - &deleg_wrops); + &deleg_wrops); if (error != 0) { rfs4_disable_delegation(); fem_free(deleg_rdops); @@ -558,6 +559,8 @@ lockt_sysid = lm_alloc_sysidt(); + vsd_create(&nfs4_srv_vkey, NULL); + return (0); } @@ -868,6 +871,7 @@ uint_t count, i; secinfo4 *resok_val; struct secinfo *secp; + seconfig_t *si; bool_t did_traverse; int dotdot, walk; @@ -1017,25 +1021,25 @@ secp = exi->exi_export.ex_secinfo; for (i = 0; i < count; i++) { - resok_val[i].flavor = secp[i].s_secinfo.sc_rpcnum; - if (resok_val[i].flavor == RPCSEC_GSS) { - rpcsec_gss_info *info; - - info = &resok_val[i].flavor_info; - info->qop = secp[i].s_secinfo.sc_qop; - info->service = - (rpc_gss_svc_t)secp[i].s_secinfo.sc_service; - - /* get oid opaque data */ - info->oid.sec_oid4_len = - secp[i].s_secinfo.sc_gss_mech_type->length; - info->oid.sec_oid4_val = - kmem_alloc( - secp[i].s_secinfo.sc_gss_mech_type->length, - KM_SLEEP); - bcopy(secp[i].s_secinfo.sc_gss_mech_type->elements, - info->oid.sec_oid4_val, info->oid.sec_oid4_len); - } + si = &secp[i].s_secinfo; + resok_val[i].flavor = si->sc_rpcnum; + if (resok_val[i].flavor == RPCSEC_GSS) { + rpcsec_gss_info *info; + + info = &resok_val[i].flavor_info; + info->qop = si->sc_qop; + info->service = (rpc_gss_svc_t)si->sc_service; + + /* get oid opaque data */ + info->oid.sec_oid4_len = + si->sc_gss_mech_type->length; + info->oid.sec_oid4_val = kmem_alloc( + si->sc_gss_mech_type->length, KM_SLEEP); + bcopy( + si->sc_gss_mech_type->elements, + info->oid.sec_oid4_val, + info->oid.sec_oid4_len); + } } resp->SECINFO4resok_len = count; resp->SECINFO4resok_val = resok_val; @@ -1055,7 +1059,7 @@ perm = secp[i].s_flags; access = nfsauth4_secinfo_access(exi, cs->req, - flavor, perm); + flavor, perm); if (! (access & NFSAUTH_DENIED) && ! (access & NFSAUTH_WRONGSEC)) { @@ -1069,30 +1073,31 @@ for (i = 0; i < count; i++) { /* If the flavor is in the flavor list, fill in resok_val. */ - if (in_flavor_list(secp[i].s_secinfo.sc_nfsnum, - flavor_list, ret_cnt)) { - resok_val[k].flavor = secp[i].s_secinfo.sc_rpcnum; - if (resok_val[k].flavor == RPCSEC_GSS) { - rpcsec_gss_info *info; - - info = &resok_val[k].flavor_info; - info->qop = secp[i].s_secinfo.sc_qop; - info->service = - (rpc_gss_svc_t)secp[i].s_secinfo.sc_service; - - /* get oid opaque data */ - info->oid.sec_oid4_len = - secp[i].s_secinfo.sc_gss_mech_type->length; - info->oid.sec_oid4_val = - kmem_alloc( - secp[i].s_secinfo.sc_gss_mech_type->length, - KM_SLEEP); - bcopy(secp[i].s_secinfo.sc_gss_mech_type->elements, - info->oid.sec_oid4_val, info->oid.sec_oid4_len); + si = &secp[i].s_secinfo; + if (in_flavor_list(si->sc_nfsnum, + flavor_list, ret_cnt)) { + resok_val[k].flavor = si->sc_rpcnum; + if (resok_val[k].flavor == RPCSEC_GSS) { + rpcsec_gss_info *info; + + info = &resok_val[k].flavor_info; + info->qop = si->sc_qop; + info->service = (rpc_gss_svc_t) + si->sc_service; + + /* get oid opaque data */ + info->oid.sec_oid4_len = + si->sc_gss_mech_type->length; + info->oid.sec_oid4_val = kmem_alloc( + si->sc_gss_mech_type->length, + KM_SLEEP); + bcopy(si->sc_gss_mech_type->elements, + info->oid.sec_oid4_val, + info->oid.sec_oid4_len); + } + k++; } - k++; - } - if (k >= ret_cnt) + if (k >= ret_cnt) break; } resp->SECINFO4resok_len = ret_cnt; @@ -1140,8 +1145,8 @@ */ if (!utf8_dir_verify(utfnm)) { if (utfnm->utf8string_len != 2 || - utfnm->utf8string_val[0] != '.' || - utfnm->utf8string_val[1] != '.') { + utfnm->utf8string_val[0] != '.' || + utfnm->utf8string_val[1] != '.') { *cs->statusp = resp->status = NFS4ERR_INVAL; return; } @@ -1184,12 +1189,13 @@ resok_val = resp->SECINFO4resok_val; for (i = 0; i < count; i++) { - if (resok_val[i].flavor == RPCSEC_GSS) { - rpcsec_gss_info *info; - - info = &resok_val[i].flavor_info; - kmem_free(info->oid.sec_oid4_val, info->oid.sec_oid4_len); - } + if (resok_val[i].flavor == RPCSEC_GSS) { + rpcsec_gss_info *info; + + info = &resok_val[i].flavor_info; + kmem_free(info->oid.sec_oid4_val, + info->oid.sec_oid4_len); + } } kmem_free(resok_val, count * sizeof (secinfo4)); resp->SECINFO4resok_len = 0; @@ -1234,7 +1240,7 @@ * permissions are sent back to the client for interpretation. */ if (rdonly4(cs->exi, cs->vp, req) && - (vp->v_type == VREG || vp->v_type == VDIR)) + (vp->v_type == VREG || vp->v_type == VDIR)) checkwriteperm = 0; else checkwriteperm = 1; @@ -1423,7 +1429,7 @@ else vap->va_type = VBLK; vap->va_rdev = makedevice(args->ftype4_u.devdata.specdata1, - args->ftype4_u.devdata.specdata2); + args->ftype4_u.devdata.specdata2); vap->va_mask |= AT_RDEV; break; case NF4SOCK: @@ -1550,8 +1556,7 @@ nfs4_ntov_table_init(&ntov); status = do_rfs4_set_attrs(&resp->attrset, - &args->createattrs, cs, &sarg, - &ntov, NFS4ATTR_SETIT); + &args->createattrs, cs, &sarg, &ntov, NFS4ATTR_SETIT); if (sarg.vap->va_mask == 0 && status == NFS4_OK) status = NFS4ERR_INVAL; @@ -1664,7 +1669,7 @@ */ iva2.va_mask = AT_SEQ; if (VOP_GETATTR(dvp, &iva2, 0, cs->cr) || - iva2.va_seq != iva.va_seq) + iva2.va_seq != iva.va_seq) iva.va_seq = 0; break; default: @@ -1764,8 +1769,7 @@ * or VOP_FSYNC. */ if (!error && bva.va_seq && iva.va_seq && ava.va_seq && - iva.va_seq == (bva.va_seq + 1) && - iva.va_seq == ava.va_seq) + iva.va_seq == (bva.va_seq + 1) && iva.va_seq == ava.va_seq) resp->cinfo.atomic = TRUE; else resp->cinfo.atomic = FALSE; @@ -1920,7 +1924,7 @@ sargp->mntdfid_set = FALSE; if (sargp->cs->vp) sargp->xattr = get_fh4_flag(&sargp->cs->fh, - FH4_ATTRDIR | FH4_NAMEDATTR); + FH4_ATTRDIR | FH4_NAMEDATTR); else sargp->xattr = 0; @@ -1959,7 +1963,7 @@ va_mask = 0; for (i = 0; i < nfs4_ntov_map_size; i++) { if ((breq & nfs4_ntov_map[i].fbit) && - nfs4_ntov_map[i].vbit) + nfs4_ntov_map[i].vbit) va_mask |= nfs4_ntov_map[i].vbit; } @@ -2001,7 +2005,7 @@ nfs4_ntov_table_init(struct nfs4_ntov_table *ntovp) { ntovp->na = kmem_zalloc(sizeof (union nfs4_attr_u) * nfs4_ntov_map_size, - KM_SLEEP); + KM_SLEEP); ntovp->attrcnt = 0; ntovp->vfsstat = FALSE; } @@ -2018,16 +2022,16 @@ * XXX Should do the same checks for whether the bit is set */ for (i = 0, na = ntovp->na, amap = ntovp->amap; - i < ntovp->attrcnt; i++, na++, amap++) { + i < ntovp->attrcnt; i++, na++, amap++) { (void) (*nfs4_ntov_map[*amap].sv_getit)( - NFS4ATTR_FREEIT, sargp, na); + NFS4ATTR_FREEIT, sargp, na); } if ((sargp->op == NFS4ATTR_SETIT) || (sargp->op == NFS4ATTR_VERIT)) { /* * xdr_free for getattr will be done later */ for (i = 0, na = ntovp->na, amap = ntovp->amap; - i < ntovp->attrcnt; i++, na++, amap++) { + i < ntovp->attrcnt; i++, na++, amap++) { xdr_free(nfs4_ntov_map[*amap].xfunc, (caddr_t)na); } } @@ -2079,10 +2083,10 @@ for (i = 0; i < nfs4_ntov_map_size; i++) { if (breq & nfs4_ntov_map[i].fbit) { if ((*nfs4_ntov_map[i].sv_getit)( - NFS4ATTR_SUPPORTED, sargp, NULL) == 0) { + NFS4ATTR_SUPPORTED, sargp, NULL) == 0) { error = (*nfs4_ntov_map[i].sv_getit)( - NFS4ATTR_GETIT, sargp, na); + NFS4ATTR_GETIT, sargp, na); /* * Possible error values: @@ -2098,13 +2102,13 @@ */ if (error == 0) { fattrp->attrmask |= - nfs4_ntov_map[i].fbit; + nfs4_ntov_map[i].fbit; *amap++ = - (uint8_t)nfs4_ntov_map[i].nval; + (uint8_t)nfs4_ntov_map[i].nval; na++; (ntov.attrcnt)++; } else if ((error > 0) && - (sargp->rdattr_error == NFS4_OK)) { + (sargp->rdattr_error == NFS4_OK)) { sargp->rdattr_error = puterrno4(error); } error = 0; @@ -2126,10 +2130,10 @@ } if ((k == FATTR4_RDATTR_ERROR) && ((*nfs4_ntov_map[k].sv_getit)( - NFS4ATTR_SUPPORTED, sargp, NULL) == 0)) { + NFS4ATTR_SUPPORTED, sargp, NULL) == 0)) { (void) (*nfs4_ntov_map[k].sv_getit)( - NFS4ATTR_GETIT, sargp, na); + NFS4ATTR_GETIT, sargp, na); } break; } @@ -2154,8 +2158,7 @@ for (i = 0; i < ntov.attrcnt; i++, na++, amap++) { if (!(*nfs4_ntov_map[*amap].xfunc)(&xdr, na)) { cmn_err(CE_WARN, "do_rfs4_op_getattr: xdr " - "encode of attribute %d failed\n", - *amap); + "encode of attribute %d failed\n", *amap); status = NFS4ERR_SERVERFAULT; break; } @@ -2203,7 +2206,7 @@ status = bitmap4_get_sysattrs(&sarg); if (status == NFS4_OK) status = do_rfs4_op_getattr(args->attr_request, - &resp->obj_attributes, &sarg); + &resp->obj_attributes, &sarg); } *cs->statusp = resp->status = status; } @@ -2233,7 +2236,7 @@ } resp->object.nfs_fh4_val = - kmem_alloc(cs->fh.nfs_fh4_len, KM_SLEEP); + kmem_alloc(cs->fh.nfs_fh4_len, KM_SLEEP); nfs_fh4_copy(&cs->fh, &resp->object); *cs->statusp = resp->status = NFS4_OK; } @@ -2403,8 +2406,7 @@ * during the VOP_LINK and it didn't change during the VOP_FSYNC. */ if (bdva.va_seq && idva.va_seq && adva.va_seq && - idva.va_seq == (bdva.va_seq + 1) && - idva.va_seq == adva.va_seq) + idva.va_seq == (bdva.va_seq + 1) && idva.va_seq == adva.va_seq) resp->cinfo.atomic = TRUE; else resp->cinfo.atomic = FALSE; @@ -2959,7 +2961,7 @@ } if ((stat = rfs4_check_stateid(FREAD, vp, &args->stateid, FALSE, - deleg, TRUE)) != NFS4_OK) { + deleg, TRUE)) != NFS4_OK) { *cs->statusp = resp->status = stat; goto out; } @@ -2978,7 +2980,7 @@ if (vp->v_type != VREG) { *cs->statusp = resp->status = - ((vp->v_type == VDIR) ? NFS4ERR_ISDIR : NFS4ERR_INVAL); + ((vp->v_type == VDIR) ? NFS4ERR_ISDIR : NFS4ERR_INVAL); goto out; } @@ -3035,7 +3037,7 @@ if (args->count > MAXBSIZE) args->count = MAXBSIZE; mp = allocb_wait(RNDUP(args->count), BPRI_MED, - STR_NOSIG, &alloc_err); + STR_NOSIG, &alloc_err); } ASSERT(mp != NULL); ASSERT(alloc_err == 0); @@ -3167,7 +3169,7 @@ * actually a mostly empty struct. */ exi = checkexport4(&fh_fmtp->fh4_fsid, - (fid_t *)&fh_fmtp->fh4_xlen, NULL); + (fid_t *)&fh_fmtp->fh4_xlen, NULL); cs->exi = ((exi != NULL) ? exi : exi_public); } else { /* @@ -3232,7 +3234,7 @@ fh_fmtp = (nfs_fh4_fmt_t *)args->object.nfs_fh4_val; cs->exi = checkexport4(&fh_fmtp->fh4_fsid, (fid_t *)&fh_fmtp->fh4_xlen, - NULL); + NULL); if (cs->exi == NULL) { *cs->statusp = resp->status = NFS4ERR_STALE; @@ -3559,7 +3561,7 @@ if (cp == NULL) { *cs->statusp = resp->status = - rfs4_check_clientid(&ap->lock_owner.clientid, 0); + rfs4_check_clientid(&ap->lock_owner.clientid, 0); return; } rfs4_client_rele(cp); @@ -3778,7 +3780,7 @@ */ if (fp = rfs4_lookup_and_findfile(dvp, nm, &vp, &error, cs->cr)) { if (rfs4_check_delegated_byfp(FWRITE, fp, TRUE, TRUE, TRUE, - NULL)) { + NULL)) { VN_RELE(vp); rfs4_file_rele(fp); *cs->statusp = resp->status = NFS4ERR_DELAY; @@ -3859,12 +3861,12 @@ * transmit over the wire. */ if ((error = VOP_RMDIR(dvp, nm, rootdir, cs->cr)) - == EEXIST) + == EEXIST) error = ENOTEMPTY; } } else { if ((error = VOP_REMOVE(dvp, nm, cs->cr)) == 0 && - fp != NULL) { + fp != NULL) { struct vattr va; vnode_t *tvp; @@ -3881,7 +3883,7 @@ */ va.va_mask = AT_NLINK; if (!VOP_GETATTR(tvp, &va, 0, cs->cr) && - va.va_nlink == 0) { + va.va_nlink == 0) { /* Remove state on file remove */ if (in_crit) { nbl_end_crit(vp); @@ -3940,8 +3942,7 @@ * the VOP_FSYNC. */ if (bdva.va_seq && idva.va_seq && adva.va_seq && - idva.va_seq == (bdva.va_seq + 1) && - idva.va_seq == adva.va_seq) + idva.va_seq == (bdva.va_seq + 1) && idva.va_seq == adva.va_seq) resp->cinfo.atomic = TRUE; else resp->cinfo.atomic = FALSE; @@ -4089,7 +4090,7 @@ */ if (sfp = rfs4_lookup_and_findfile(odvp, onm, &srcvp, &error, cs->cr)) { if (rfs4_check_delegated_byfp(FWRITE, sfp, TRUE, TRUE, TRUE, - NULL)) { + NULL)) { *cs->statusp = resp->status = NFS4ERR_DELAY; goto err_out; } @@ -4107,7 +4108,7 @@ /* Does the destination exist and a file and have a delegation? */ if (fp = rfs4_lookup_and_findfile(ndvp, nnm, &targvp, NULL, cs->cr)) { if (rfs4_check_delegated_byfp(FWRITE, fp, TRUE, TRUE, TRUE, - NULL)) { + NULL)) { *cs->statusp = resp->status = NFS4ERR_DELAY; goto err_out; } @@ -4150,7 +4151,7 @@ NFS4_SET_FATTR4_CHANGE(resp->target_cinfo.before, nbdva.va_ctime) if ((error = VOP_RENAME(odvp, onm, ndvp, nnm, cs->cr)) == 0 && - fp != NULL) { + fp != NULL) { struct vattr va; vnode_t *tvp; @@ -4163,7 +4164,7 @@ if (tvp) { va.va_mask = AT_NLINK; if (!VOP_GETATTR(tvp, &va, 0, cs->cr) && - va.va_nlink == 0) { + va.va_nlink == 0) { /* The file is gone and so should the state */ if (in_crit_targ) { nbl_end_crit(targvp); @@ -4255,15 +4256,13 @@ * during the VOP_RENAME and it didn't change during the VOP_FSYNC. */ if (obdva.va_seq && oidva.va_seq && oadva.va_seq && - oidva.va_seq == (obdva.va_seq + 1) && - oidva.va_seq == oadva.va_seq) + oidva.va_seq == (obdva.va_seq + 1) && oidva.va_seq == oadva.va_seq) resp->source_cinfo.atomic = TRUE; else resp->source_cinfo.atomic = FALSE; if (nbdva.va_seq && nidva.va_seq && nadva.va_seq && - nidva.va_seq == (nbdva.va_seq + 1) && - nidva.va_seq == nadva.va_seq) + nidva.va_seq == (nbdva.va_seq + 1) && nidva.va_seq == nadva.va_seq) resp->target_cinfo.atomic = TRUE; else resp->target_cinfo.atomic = FALSE; @@ -4325,7 +4324,7 @@ if ((cp = rfs4_findclient_by_id(args->clientid, FALSE)) == NULL) { *cs->statusp = resp->status = - rfs4_check_clientid(&args->clientid, 0); + rfs4_check_clientid(&args->clientid, 0); return; } @@ -4436,7 +4435,7 @@ * on the incoming values. */ ret_error = VOP_GETATTR(sargp->cs->vp, sargp->vap, 0, - sargp->cs->cr); + sargp->cs->cr); if (ret_error) { if (resp == NULL) return (ret_error); @@ -4493,8 +4492,7 @@ } else if (!(getsb && nfs4_ntov_map[k].vfsstat)) { continue; } - error = (*nfs4_ntov_map[k].sv_getit)( - NFS4ATTR_VERIT, sargp, na); + error = (*nfs4_ntov_map[k].sv_getit)(NFS4ATTR_VERIT, sargp, na); if (resp != NULL) { if (error) ret_error = -1; /* not all match */ @@ -4554,7 +4552,7 @@ } else { #ifdef DEBUG cmn_err(CE_NOTE, "decode_fattr4_attr: error " - "decoding attribute %d\n", k); + "decoding attribute %d\n", k); #endif error = EINVAL; } @@ -4633,7 +4631,7 @@ * If verify/nverify, must be a readable attr. */ if ((error = (*nfs4_ntov_map[i].sv_getit)( - NFS4ATTR_SUPPORTED, sargp, NULL)) != 0) { + NFS4ATTR_SUPPORTED, sargp, NULL)) != 0) { /* * Client tries to set/verify an * unsupported attribute, tries to set @@ -4646,7 +4644,7 @@ * Decode the attribute to set/verify */ error = decode_fattr4_attr(cmd, sargp, nfs4_ntov_map[i].nval, - &xdr, resp ? resp : NULL, na); + &xdr, resp ? resp : NULL, na); if (error) break; *amap++ = (uint8_t)nfs4_ntov_map[i].nval; @@ -4657,8 +4655,8 @@ } if (error != 0) - status = (error == ENOTSUP ? NFS4ERR_ATTRNOTSUPP : - puterrno4(error)); + status = (error == ENOTSUP ? NFS4ERR_ATTRNOTSUPP : + puterrno4(error)); /* xdrmem_destroy(&xdrs); */ /* NO-OP */ return (status); } @@ -4686,7 +4684,7 @@ sarg.sbp = &sb; nfs4_ntov_table_init(&ntov); status = do_rfs4_set_attrs(resp, fattrp, cs, &sarg, &ntov, - NFS4ATTR_SETIT); + NFS4ATTR_SETIT); if (status != NFS4_OK) { /* * failed set attrs @@ -4728,7 +4726,7 @@ if (sarg.vap->va_mask & AT_SIZE) { trunc = (sarg.vap->va_size == 0); status = rfs4_check_stateid(FWRITE, cs->vp, stateid, - trunc, &cs->deleg, sarg.vap->va_mask & AT_SIZE); + trunc, &cs->deleg, sarg.vap->va_mask & AT_SIZE); if (status != NFS4_OK) goto done; } @@ -4806,7 +4804,7 @@ bf.l_sysid = 0; bf.l_pid = 0; error = VOP_SPACE(vp, F_FREESP, &bf, FWRITE, - (offset_t)sarg.vap->va_size, cr, &ct); + (offset_t)sarg.vap->va_size, cr, &ct); } } @@ -4933,8 +4931,8 @@ } *cs->statusp = resp->status = - do_rfs4_op_setattr(&resp->attrsset, &args->obj_attributes, cs, - &args->stateid); + do_rfs4_op_setattr(&resp->attrsset, &args->obj_attributes, cs, + &args->stateid); } /* ARGSUSED */ @@ -4964,7 +4962,7 @@ sarg.sbp = &sb; nfs4_ntov_table_init(&ntov); resp->status = do_rfs4_set_attrs(NULL, &args->obj_attributes, cs, - &sarg, &ntov, NFS4ATTR_VERIT); + &sarg, &ntov, NFS4ATTR_VERIT); if (resp->status != NFS4_OK) { /* * do_rfs4_set_attrs will try to verify systemwide attrs, @@ -5017,7 +5015,7 @@ sarg.sbp = &sb; nfs4_ntov_table_init(&ntov); resp->status = do_rfs4_set_attrs(NULL, &args->obj_attributes, cs, - &sarg, &ntov, NFS4ATTR_VERIT); + &sarg, &ntov, NFS4ATTR_VERIT); if (resp->status != NFS4_OK) { /* * do_rfs4_set_attrs will try to verify systemwide attrs, @@ -5090,14 +5088,14 @@ nbl_start_crit(vp, RW_READER); in_crit = 1; if (nbl_conflict(vp, NBL_WRITE, - args->offset, args->data_len, 0)) { + args->offset, args->data_len, 0)) { *cs->statusp = resp->status = NFS4ERR_LOCKED; goto out; } } if ((stat = rfs4_check_stateid(FWRITE, vp, &args->stateid, FALSE, - deleg, TRUE)) != NFS4_OK) { + deleg, TRUE)) != NFS4_OK) { *cs->statusp = resp->status = stat; goto out; } @@ -5121,7 +5119,7 @@ if (vp->v_type != VREG) { *cs->statusp = resp->status = - ((vp->v_type == VDIR) ? NFS4ERR_ISDIR : NFS4ERR_INVAL); + ((vp->v_type == VDIR) ? NFS4ERR_ISDIR : NFS4ERR_INVAL); goto out; } @@ -5254,10 +5252,10 @@ * Form a reply tag by copying over the reqeuest tag. */ resp->tag.utf8string_val = - kmem_alloc(args->tag.utf8string_len, KM_SLEEP); + kmem_alloc(args->tag.utf8string_len, KM_SLEEP); resp->tag.utf8string_len = args->tag.utf8string_len; bcopy(args->tag.utf8string_val, resp->tag.utf8string_val, - resp->tag.utf8string_len); + resp->tag.utf8string_len); cs.statusp = &resp->status; @@ -5273,7 +5271,7 @@ resp->array_len = args->array_len; resp->array = kmem_zalloc(args->array_len * sizeof (nfs_resop4), - KM_SLEEP); + KM_SLEEP); ASSERT(exi == NULL); ASSERT(cr == NULL); @@ -5334,11 +5332,10 @@ rfsproccnt_v4_ptr[op].value.ui64++; NFS4_DEBUG(rfs4_debug > 1, - (CE_NOTE, "Executing %s", rfs4_op_string[op])); + (CE_NOTE, "Executing %s", rfs4_op_string[op])); (*rfsv4disptab[op].dis_proc)(argop, resop, req, &cs); - NFS4_DEBUG(rfs4_debug > 1, - (CE_NOTE, "%s returned %d", - rfs4_op_string[op], *cs.statusp)); + NFS4_DEBUG(rfs4_debug > 1, (CE_NOTE, "%s returned %d", + rfs4_op_string[op], *cs.statusp)); if (*cs.statusp != NFS4_OK) cs.cont = FALSE; } else { @@ -5361,11 +5358,11 @@ */ if ((i + 1) < args->array_len && !cs.cont) { nfs_resop4 *new_res = kmem_alloc( - (i+1) * sizeof (nfs_resop4), KM_SLEEP); + (i+1) * sizeof (nfs_resop4), KM_SLEEP); bcopy(resp->array, - new_res, (i+1) * sizeof (nfs_resop4)); + new_res, (i+1) * sizeof (nfs_resop4)); kmem_free(resp->array, - args->array_len * sizeof (nfs_resop4)); + args->array_len * sizeof (nfs_resop4)); resp->array_len = i + 1; resp->array = new_res; @@ -5463,7 +5460,7 @@ e = NFS4_OK; NFS4_DEBUG(rfs4_debug, (CE_NOTE, - "rfs4_client_sysid: allocated 0x%x\n", *sp)); + "rfs4_client_sysid: allocated 0x%x\n", *sp)); } else e = NFS4ERR_DELAY; @@ -5497,10 +5494,8 @@ ASSERT(flk->l_whence == 0); cmn_err(CE_NOTE, "%s: %s, type = %s, off = %llx len = %llx pid = %d", - str, op, type, - (longlong_t)flk->l_start, - flk->l_len ? (longlong_t)flk->l_len : ~0LL, - flk->l_pid); + str, op, type, (longlong_t)flk->l_start, + flk->l_len ? (longlong_t)flk->l_len : ~0LL, flk->l_pid); } #define LOCK_PRINT(d, s, t, f) if (d) lock_print(s, t, f) @@ -5848,8 +5843,8 @@ *attrset = 0; status = do_rfs4_set_attrs(attrset, - &args->createhow4_u.createattrs, - cs, &sarg, &ntov, NFS4ATTR_SETIT); + &args->createhow4_u.createattrs, + cs, &sarg, &ntov, NFS4ATTR_SETIT); if (status == NFS4_OK && (sarg.vap->va_mask & AT_TYPE) && sarg.vap->va_type != VREG) { @@ -5916,7 +5911,7 @@ } status = create_vnode(dvp, nm, vap, args->mode, mtime, - cs->cr, &vp, &created); + cs->cr, &vp, &created); kmem_free(nm, buflen); if (status != NFS4_OK) { @@ -5987,7 +5982,7 @@ */ if (!created) { if (bva.va_seq && iva.va_seq && - bva.va_seq == iva.va_seq) + bva.va_seq == iva.va_seq) cinfo->atomic = TRUE; else cinfo->atomic = FALSE; @@ -6018,8 +6013,7 @@ * change during the VOP_FSYNC. */ if (bva.va_seq && iva.va_seq && ava.va_seq && - iva.va_seq == (bva.va_seq + 1) && - iva.va_seq == ava.va_seq) + iva.va_seq == (bva.va_seq + 1) && iva.va_seq == ava.va_seq) cinfo->atomic = TRUE; else cinfo->atomic = FALSE; @@ -6053,9 +6047,7 @@ rfs4_hold_deleg_policy(); if ((fp = rfs4_findfile(vp, NULL, &create)) != NULL) { if (rfs4_check_delegated_byfp(FWRITE, fp, - (reqsize == 0), FALSE, FALSE, - &clientid)) { - + (reqsize == 0), FALSE, FALSE, &clientid)) { rfs4_file_rele(fp); rfs4_rele_deleg_policy(); VN_RELE(vp); @@ -6073,7 +6065,7 @@ nbl_start_crit(vp, RW_READER); if (nbl_conflict(vp, NBL_WRITE, 0, - cva.va_size, 0)) { + cva.va_size, 0)) { in_crit = 0; nbl_end_crit(vp); VN_RELE(vp); @@ -6157,7 +6149,7 @@ file = rfs4_findfile_withlock(cs->vp, &cs->fh, &fcreate); if (file == NULL) { NFS4_DEBUG(rfs4_debug, - (CE_NOTE, "rfs4_do_open: can't find file")); + (CE_NOTE, "rfs4_do_open: can't find file")); resp->status = NFS4ERR_SERVERFAULT; return; } @@ -6165,7 +6157,7 @@ state = rfs4_findstate_by_owner_file(oo, file, &screate); if (state == NULL) { NFS4_DEBUG(rfs4_debug, - (CE_NOTE, "rfs4_do_open: can't find state")); + (CE_NOTE, "rfs4_do_open: can't find state")); resp->status = NFS4ERR_RESOURCE; /* No need to keep any reference */ rfs4_file_rele_withunlock(file); @@ -6220,7 +6212,7 @@ if ((err = vop_shrlock(cs->vp, F_SHARE, &shr, fflags)) != 0) { resp->status = err == EAGAIN ? - NFS4ERR_SHARE_DENIED : puterrno4(err); + NFS4ERR_SHARE_DENIED : puterrno4(err); rfs4_file_rele(file); /* Not a fully formed open; "close" it */ @@ -6320,7 +6312,7 @@ if (args->opentype == OPEN4_NOCREATE) resp->status = rfs4_lookupfile(&args->open_claim4_u.file, - req, cs, args->share_access, cinfo); + req, cs, args->share_access, cinfo); else { /* inhibit delegation grants during exclusive create */ @@ -6328,7 +6320,7 @@ rfs4_disable_delegation(); resp->status = rfs4_createfile(args, req, cs, cinfo, attrset, - oo->client->clientid); + oo->client->clientid); } if (resp->status == NFS4_OK) { @@ -6336,7 +6328,7 @@ /* cs->vp cs->fh now reference the desired file */ rfs4_do_open(cs, req, oo, DELEG_ANY, args->share_access, - args->share_deny, resp); + args->share_deny, resp); /* * If rfs4_createfile set attrset, we must @@ -6405,8 +6397,8 @@ cinfo->atomic = FALSE; rfs4_do_open(cs, req, oo, - NFS4_DELEG4TYPE2REQTYPE(args->open_claim4_u.delegate_type), - args->share_access, args->share_deny, resp); + NFS4_DELEG4TYPE2REQTYPE(args->open_claim4_u.delegate_type), + args->share_access, args->share_deny, resp); } static void @@ -6416,7 +6408,7 @@ int error; nfsstat4 status; stateid4 stateid = - args->open_claim4_u.delegate_cur_info.delegate_stateid; + args->open_claim4_u.delegate_cur_info.delegate_stateid; rfs4_deleg_state_t *dsp; /* @@ -6460,7 +6452,7 @@ dsp->finfo->dinfo->time_lastwrite = gethrestime_sec(); rfs4_deleg_state_rele(dsp); rfs4_do_open(cs, req, oo, DELEG_NONE, - args->share_access, args->share_deny, resp); + args->share_access, args->share_deny, resp); } /*ARGSUSED*/ @@ -6488,7 +6480,7 @@ /* Note we ignore oflags */ resp->status = rfs4_lookupfile(&args->open_claim4_u.file_delegate_prev, - req, cs, args->share_access, &resp->cinfo); + req, cs, args->share_access, &resp->cinfo); if (resp->status != NFS4_OK) { return; @@ -6498,7 +6490,7 @@ file = rfs4_findfile_withlock(cs->vp, NULL, &create); if (file == NULL) { NFS4_DEBUG(rfs4_debug, - (CE_NOTE, "rfs4_do_opendelprev: can't find file")); + (CE_NOTE, "rfs4_do_opendelprev: can't find file")); resp->status = NFS4ERR_SERVERFAULT; return; } @@ -6506,7 +6498,7 @@ state = rfs4_findstate_by_owner_file(oo, file, &create); if (state == NULL) { NFS4_DEBUG(rfs4_debug, - (CE_NOTE, "rfs4_do_opendelprev: can't find state")); + (CE_NOTE, "rfs4_do_opendelprev: can't find state")); resp->status = NFS4ERR_SERVERFAULT; rfs4_file_rele_withunlock(file); return; @@ -6515,10 +6507,10 @@ rfs4_dbe_lock(state->dbe); rfs4_dbe_lock(file->dbe); if (args->share_access != state->share_access || - args->share_deny != state->share_deny || - state->finfo->dinfo->dtype == OPEN_DELEGATE_NONE) { + args->share_deny != state->share_deny || + state->finfo->dinfo->dtype == OPEN_DELEGATE_NONE) { NFS4_DEBUG(rfs4_debug, - (CE_NOTE, "rfs4_do_opendelprev: state mixup")); + (CE_NOTE, "rfs4_do_opendelprev: state mixup")); rfs4_dbe_unlock(file->dbe); rfs4_dbe_unlock(state->dbe); rfs4_file_rele(file); @@ -6545,14 +6537,14 @@ if (dsp->dtype == OPEN_DELEGATE_READ) { open_read_delegation4 *rv = - &resp->delegation.open_delegation4_u.read; + &resp->delegation.open_delegation4_u.read; rv->stateid = dsp->delegid.stateid; rv->recall = FALSE; /* no policy in place to set to TRUE */ ace = &rv->permissions; } else { open_write_delegation4 *rv = - &resp->delegation.open_delegation4_u.write; + &resp->delegation.open_delegation4_u.write; rv->stateid = dsp->delegid.stateid; rv->recall = FALSE; /* no policy in place to set to TRUE */ @@ -6593,7 +6585,7 @@ rfs4_copy_reply(resop, lastop); } NFS4_DEBUG(rfs4_debug, (CE_NOTE, - "Replayed SEQID %d\n", seqid)); + "Replayed SEQID %d\n", seqid)); return (NFS4_CHKSEQ_REPLAY); } @@ -6601,14 +6593,14 @@ if (rqst_seq != seqid + 1) { if (rqst_seq == seqid) { NFS4_DEBUG(rfs4_debug, - (CE_NOTE, "BAD SEQID: Replayed sequence id " - "but last op was %d current op is %d\n", - lastop->resop, resop->resop)); + (CE_NOTE, "BAD SEQID: Replayed sequence id " + "but last op was %d current op is %d\n", + lastop->resop, resop->resop)); return (NFS4_CHKSEQ_BAD); } NFS4_DEBUG(rfs4_debug, - (CE_NOTE, "BAD SEQID: got %u expecting %u\n", - rqst_seq, seqid)); + (CE_NOTE, "BAD SEQID: got %u expecting %u\n", + rqst_seq, seqid)); return (NFS4_CHKSEQ_BAD); } @@ -6640,7 +6632,7 @@ rfs4_dbe_lock(op->dbe); rc = rfs4_check_seqid(op->open_seqid, op->reply, - olo_seqid, resop, FALSE); + olo_seqid, resop, FALSE); rfs4_dbe_unlock(op->dbe); return (rc); @@ -6653,8 +6645,7 @@ rfs4_dbe_lock(lp->dbe); if (!lp->skip_seqid_check) - rc = rfs4_check_seqid(lp->seqid, lp->reply, - seqid, resop, TRUE); + rc = rfs4_check_seqid(lp->seqid, lp->reply, seqid, resop, TRUE); rfs4_dbe_unlock(lp->dbe); return (rc); @@ -6687,7 +6678,7 @@ cp = rfs4_findclient_by_id(owner->clientid, FALSE); if (cp == NULL) { *cs->statusp = resp->status = - rfs4_check_clientid(&owner->clientid, 0); + rfs4_check_clientid(&owner->clientid, 0); return; } @@ -6723,7 +6714,7 @@ switch (rfs4_check_open_seqid(args->seqid, oo, resop)) { case NFS4_CHKSEQ_BAD: if ((args->seqid > oo->open_seqid) && - oo->need_confirm) { + oo->need_confirm) { rfs4_free_opens(oo, TRUE, FALSE); rfs4_sw_exit(&oo->oo_sw); rfs4_openowner_rele(oo); @@ -6820,16 +6811,16 @@ switch (claim) { case CLAIM_NULL: rfs4_do_opennull(cs, req, args, oo, resp); - break; + break; case CLAIM_PREVIOUS: rfs4_do_openprev(cs, req, args, oo, resp); - break; + break; case CLAIM_DELEGATE_CUR: rfs4_do_opendelcur(cs, req, args, oo, resp); - break; + break; case CLAIM_DELEGATE_PREV: rfs4_do_opendelprev(cs, req, args, oo, resp); - break; + break; default: resp->status = NFS4ERR_INVAL; break; @@ -6877,10 +6868,10 @@ * it. */ nfs_fh4_fmt_t *fh_fmtp = - (nfs_fh4_fmt_t *)oo->reply_fh.nfs_fh4_val; + (nfs_fh4_fmt_t *)oo->reply_fh.nfs_fh4_val; cs->exi = checkexport4(&fh_fmtp->fh4_fsid, - (fid_t *)&fh_fmtp->fh4_xlen, NULL); + (fid_t *)&fh_fmtp->fh4_xlen, NULL); if (cs->exi == NULL) { resp->status = NFS4ERR_STALE; @@ -6890,7 +6881,7 @@ VN_RELE(cs->vp); cs->vp = nfs4_fhtovp(&oo->reply_fh, cs->exi, - &resp->status); + &resp->status); if (cs->vp == NULL) goto finish; @@ -6971,7 +6962,7 @@ switch (rfs4_check_stateid_seqid(sp, &args->open_stateid)) { case NFS4_CHECK_STATEID_OKAY: if (rfs4_check_open_seqid(args->seqid, sp->owner, - resop) != 0) { + resop) != 0) { *cs->statusp = resp->status = NFS4ERR_BAD_SEQID; break; } @@ -7018,7 +7009,7 @@ break; case NFS4_CHECK_STATEID_UNCONFIRMED: if (rfs4_check_open_seqid(args->seqid, sp->owner, - resop) != NFS4_CHKSEQ_OKAY) { + resop) != NFS4_CHKSEQ_OKAY) { *cs->statusp = resp->status = NFS4ERR_BAD_SEQID; break; } @@ -7077,7 +7068,7 @@ switch (rfs4_check_stateid_seqid(sp, &args->open_stateid)) { case NFS4_CHECK_STATEID_OKAY: if (rfs4_check_open_seqid(args->seqid, sp->owner, - resop) != NFS4_CHKSEQ_OKAY) { + resop) != NFS4_CHKSEQ_OKAY) { *cs->statusp = resp->status = NFS4ERR_BAD_SEQID; goto end; } @@ -7304,7 +7295,7 @@ *cs->statusp = res->status = NFS4_OK; res->SETCLIENTID4res_u.resok4.clientid = cp->clientid; res->SETCLIENTID4res_u.resok4.setclientid_confirm = - cp->confirm_verf; + cp->confirm_verf; /* Setup callback information; CB_NULL confirmation later */ rfs4_client_setcb(cp, &args->callback, args->callback_ident); @@ -7371,20 +7362,20 @@ * be an update of the callback info */ if (cp_confirmed->nfs_client.verifier == - args->client.verifier) { + args->client.verifier) { /* Setup callback information */ rfs4_client_setcb(cp_confirmed, &args->callback, - args->callback_ident); + args->callback_ident); /* everything okay -- move ahead */ *cs->statusp = res->status = NFS4_OK; res->SETCLIENTID4res_u.resok4.clientid = - cp_confirmed->clientid; + cp_confirmed->clientid; /* update the confirm_verifier and return it */ rfs4_client_scv_next(cp_confirmed); res->SETCLIENTID4res_u.resok4.setclientid_confirm = - cp_confirmed->confirm_verf; + cp_confirmed->confirm_verf; rfs4_client_rele(cp_confirmed); return; @@ -7397,7 +7388,7 @@ */ create = FALSE; cp_unconfirmed = rfs4_findclient(&args->client, &create, - cp_confirmed); + cp_confirmed); } /* @@ -7456,11 +7447,9 @@ *cs->statusp = res->status = NFS4_OK; res->SETCLIENTID4res_u.resok4.clientid = newcp->clientid; - res->SETCLIENTID4res_u.resok4.setclientid_confirm = - newcp->confirm_verf; + res->SETCLIENTID4res_u.resok4.setclientid_confirm = newcp->confirm_verf; /* Setup callback information; CB_NULL confirmation later */ - rfs4_client_setcb(newcp, &args->callback, - args->callback_ident); + rfs4_client_setcb(newcp, &args->callback, args->callback_ident); newcp->cp_confirmed = cp_confirmed; @@ -7473,9 +7462,9 @@ struct svc_req *req, struct compound_state *cs) { SETCLIENTID_CONFIRM4args *args = - &argop->nfs_argop4_u.opsetclientid_confirm; + &argop->nfs_argop4_u.opsetclientid_confirm; SETCLIENTID_CONFIRM4res *res = - &resop->nfs_resop4_u.opsetclientid_confirm; + &resop->nfs_resop4_u.opsetclientid_confirm; rfs4_client_t *cp, *cptoclose = NULL; *cs->statusp = res->status = NFS4_OK; @@ -7484,7 +7473,7 @@ if (cp == NULL) { *cs->statusp = res->status = - rfs4_check_clientid(&args->clientid, 1); + rfs4_check_clientid(&args->clientid, 1); return; } @@ -7576,7 +7565,7 @@ switch (rfs4_check_stateid_seqid(sp, &args->open_stateid)) { case NFS4_CHECK_STATEID_OKAY: if (rfs4_check_open_seqid(args->seqid, sp->owner, - resop) != NFS4_CHKSEQ_OKAY) { + resop) != NFS4_CHKSEQ_OKAY) { *cs->statusp = resp->status = NFS4ERR_BAD_SEQID; goto end; } @@ -7701,7 +7690,7 @@ if (close_of_client) { if (sp->owner->client->unlksys_completed == FALSE && sp->lockownerlist.next->lsp != NULL && - sp->owner->client->sysidt != LM_NOSYSID) { + sp->owner->client->sysidt != LM_NOSYSID) { /* Is the PxFS kernel module loaded? */ if (lm_remove_file_locks != NULL) { int new_sysid; @@ -7742,7 +7731,7 @@ * least mark the locks as having been released */ for (lsp = sp->lockownerlist.next->lsp; lsp != NULL; - lsp = lsp->lockownerlist.next->lsp) { + lsp = lsp->lockownerlist.next->lsp) { lsp->locks_cleaned = TRUE; @@ -7750,7 +7739,7 @@ if (!close_of_client && sp->owner->client->sysidt != LM_NOSYSID) (void) cleanlocks(sp->finfo->vp, lsp->locker->pid, - lsp->locker->client->sysidt); + lsp->locker->client->sysidt); } /* @@ -7837,7 +7826,7 @@ for (i = 0; i < rfs4_maxlock_tries; i++) { LOCK_PRINT(rfs4_debug, "setlock", F_SETLK, flock); error = VOP_FRLOCK(vp, F_SETLK, - flock, flag, (u_offset_t)0, NULL, cred); + flock, flag, (u_offset_t)0, NULL, cred); if (error != EAGAIN && error != EACCES) break; @@ -7853,14 +7842,14 @@ flk = *flock; LOCK_PRINT(rfs4_debug, "setlock", F_GETLK, &flk); if (VOP_FRLOCK(vp, F_GETLK, - &flk, flag, (u_offset_t)0, NULL, cred) == 0) { + &flk, flag, (u_offset_t)0, NULL, cred) == 0) { if (flk.l_type == F_UNLCK) { /* No longer locked, retry */ goto retry; } *flock = flk; LOCK_PRINT(rfs4_debug, "setlock(blocking lock)", - F_GETLK, &flk); + F_GETLK, &flk); } } @@ -7969,7 +7958,7 @@ lres = &resop->nfs_resop4_u.oplock; status = NFS4ERR_DENIED; if (lock_denied(&lres->LOCK4res_u.denied, &flock) - == NFS4ERR_EXPIRED) + == NFS4ERR_EXPIRED) goto retry; break; case ENOLCK: @@ -7982,8 +7971,7 @@ status = NFS4ERR_NOTSUPP; break; default: - cmn_err(CE_WARN, "rfs4_do_lock: unexpected errno (%d)", - error); + cmn_err(CE_WARN, "rfs4_do_lock: unexpected errno (%d)", error); status = NFS4ERR_SERVERFAULT; break; } @@ -8026,8 +8014,7 @@ status = rfs4_get_state(stateid, &sp, RFS4_DBS_VALID); if (status != NFS4_OK) { NFS4_DEBUG(rfs4_debug, - (CE_NOTE, "Get state failed in lock %d", - status)); + (CE_NOTE, "Get state failed in lock %d", status)); *cs->statusp = resp->status = status; return; } @@ -8061,7 +8048,7 @@ case NFS4_CHECK_STATEID_OKAY: case NFS4_CHECK_STATEID_REPLAY: switch (rfs4_check_olo_seqid(olo->open_seqid, - sp->owner, resop)) { + sp->owner, resop)) { case NFS4_CHKSEQ_OKAY: if (rc == NFS4_CHECK_STATEID_OKAY) break; @@ -8072,8 +8059,7 @@ */ /* FALLTHROUGH */ case NFS4_CHKSEQ_BAD: - *cs->statusp = resp->status = - NFS4ERR_BAD_SEQID; + *cs->statusp = resp->status = NFS4ERR_BAD_SEQID; goto end; case NFS4_CHKSEQ_REPLAY: /* This is a duplicate LOCK request */ @@ -8093,7 +8079,7 @@ lo = rfs4_findlockowner(&olo->lock_owner, &lcreate); if (lo == NULL) { NFS4_DEBUG(rfs4_debug, - (CE_NOTE, "rfs4_op_lock: no lock owner")); + (CE_NOTE, "rfs4_op_lock: no lock owner")); *cs->statusp = resp->status = NFS4ERR_RESOURCE; goto end; } @@ -8110,7 +8096,7 @@ } NFS4_DEBUG(rfs4_debug, - (CE_NOTE, "rfs4_op_lock: no state")); + (CE_NOTE, "rfs4_op_lock: no state")); *cs->statusp = resp->status = NFS4ERR_SERVERFAULT; rfs4_update_open_resp(sp->owner, resop, NULL); rfs4_lockowner_rele(lo); @@ -8130,7 +8116,7 @@ if (dup_lock == FALSE && create == FALSE) { if (lsp->lock_completed == TRUE) { *cs->statusp = - resp->status = NFS4ERR_BAD_SEQID; + resp->status = NFS4ERR_BAD_SEQID; rfs4_lockowner_rele(lo); goto end; } @@ -8154,9 +8140,9 @@ /* verify that lock_seqid's match */ if (lsp->seqid != olo->lock_seqid) { NFS4_DEBUG(rfs4_debug, - (CE_NOTE, "rfs4_op_lock: Dup-Lock seqid bad" - "lsp->seqid=%d old->seqid=%d", - lsp->seqid, olo->lock_seqid)); + (CE_NOTE, "rfs4_op_lock: Dup-Lock seqid bad" + "lsp->seqid=%d old->seqid=%d", + lsp->seqid, olo->lock_seqid)); *cs->statusp = resp->status = NFS4ERR_BAD_SEQID; } else { rfs4_copy_reply(resop, lsp->reply); @@ -8177,7 +8163,7 @@ lsp->seqid = olo->lock_seqid; NFS4_DEBUG(rfs4_debug, - (CE_NOTE, "Lock seqid established as %d", lsp->seqid)); + (CE_NOTE, "Lock seqid established as %d", lsp->seqid)); /* * This is used to signify the newly created lockowner @@ -8240,8 +8226,8 @@ * replay but it is okay. */ switch (rfs4_check_lock_seqid( - args->locker.locker4_u.lock_owner.lock_seqid, - lsp, resop)) { + args->locker.locker4_u.lock_owner.lock_seqid, + lsp, resop)) { case NFS4_CHKSEQ_REPLAY: if (resp->status != NFS4_OK) { /* @@ -8260,8 +8246,7 @@ */ /*FALLTHROUGH*/ case NFS4_CHKSEQ_BAD: - *cs->statusp = resp->status = - NFS4ERR_BAD_SEQID; + *cs->statusp = resp->status = NFS4ERR_BAD_SEQID; goto end; case NFS4_CHKSEQ_OKAY: /* Everything looks okay move ahead */ @@ -8282,8 +8267,8 @@ goto end; case NFS4_CHECK_STATEID_REPLAY: switch (rfs4_check_lock_seqid( - args->locker.locker4_u.lock_owner.lock_seqid, - lsp, resop)) { + args->locker.locker4_u.lock_owner.lock_seqid, + lsp, resop)) { case NFS4_CHKSEQ_OKAY: /* * This is a replayed stateid; if @@ -8291,8 +8276,7 @@ * then client is using wrong seqid. */ case NFS4_CHKSEQ_BAD: - *cs->statusp = resp->status = - NFS4ERR_BAD_SEQID; + *cs->statusp = resp->status = NFS4ERR_BAD_SEQID; goto end; case NFS4_CHKSEQ_REPLAY: rfs4_update_lease(lsp->locker->client); @@ -8342,9 +8326,8 @@ cs->deleg = TRUE; status = rfs4_do_lock(lsp, args->locktype, - args->locker.locker4_u.lock_owner.lock_seqid, - args->offset, - args->length, cs->cr, resop); + args->locker.locker4_u.lock_owner.lock_seqid, + args->offset, args->length, cs->cr, resop); out: lsp->skip_seqid_check = FALSE; @@ -8467,8 +8450,7 @@ * then client is using wrong seqid. */ case NFS4_CHKSEQ_BAD: - *cs->statusp = resp->status = - NFS4ERR_BAD_SEQID; + *cs->statusp = resp->status = NFS4ERR_BAD_SEQID; goto end; case NFS4_CHKSEQ_REPLAY: rfs4_update_lease(lsp->locker->client); @@ -8502,8 +8484,7 @@ } status = rfs4_do_lock(lsp, args->locktype, - args->seqid, args->offset, - args->length, cs->cr, resop); + args->seqid, args->offset, args->length, cs->cr, resop); out: *cs->statusp = resp->status = status; @@ -8566,7 +8547,7 @@ if ((cp = rfs4_findclient_by_id(args->owner.clientid, FALSE)) == NULL) { *cs->statusp = resp->status = - rfs4_check_clientid(&args->owner.clientid, 0); + rfs4_check_clientid(&args->owner.clientid, 0); return; } if (rfs4_lease_expired(cp)) { @@ -8614,7 +8595,7 @@ if (lo) { pid = lo->pid; if ((resp->status = - rfs4_client_sysid(lo->client, &sysid)) != NFS4_OK) + rfs4_client_sysid(lo->client, &sysid)) != NFS4_OK) goto out; } else { pid = 0; @@ -8661,7 +8642,7 @@ break; default: cmn_err(CE_WARN, "rfs4_op_lockt: unexpected errno (%d)", - error); + error); resp->status = NFS4ERR_SERVERFAULT; break; } @@ -8683,10 +8664,10 @@ err = VOP_SHRLOCK(vp, cmd, sp, fflags, CRED()); NFS4_DEBUG(rfs4_shrlock_debug, - (CE_NOTE, "rfs4_shrlock %s vp=%p acc=%d dny=%d sysid=%d " - "pid=%d err=%d\n", cmd == F_SHARE ? "SHARE" : "UNSHR", - (void *) vp, sp->s_access, sp->s_deny, sp->s_sysid, sp->s_pid, - err)); + (CE_NOTE, "rfs4_shrlock %s vp=%p acc=%d dny=%d sysid=%d " + "pid=%d err=%d\n", cmd == F_SHARE ? "SHARE" : "UNSHR", + (void *) vp, sp->s_access, sp->s_deny, sp->s_sysid, sp->s_pid, + err)); return (err); } diff -r 09764a26229e -r e67c98912955 usr/src/uts/common/fs/nfs/nfs4_state.c --- a/usr/src/uts/common/fs/nfs/nfs4_state.c Fri Sep 14 10:25:36 2007 -0700 +++ b/usr/src/uts/common/fs/nfs/nfs4_state.c Fri Sep 14 11:24:08 2007 -0700 @@ -43,6 +43,7 @@ extern time_t rfs4_start_time; +extern uint_t nfs4_srv_vkey; stateid4 special0 = { 0, @@ -2198,7 +2199,12 @@ fp->filehandle.nfs_fh4_len); cv_destroy(fp->dinfo->recall_cv); if (fp->vp) { - VN_RELE(fp->vp); + vnode_t *vp = fp->vp; + + mutex_enter(&vp->v_lock); + (void) vsd_set(vp, nfs4_srv_vkey, NULL); + mutex_exit(&vp->v_lock); + VN_RELE(vp); fp->vp = NULL; } rw_destroy(&fp->file_rwlock); @@ -2264,6 +2270,13 @@ rw_init(&fp->file_rwlock, NULL, RW_DEFAULT, NULL); + mutex_enter(&vp->v_lock); + if (vsd_set(vp, nfs4_srv_vkey, (void *)fp)) { + ASSERT(FALSE); + cmn_err(CE_WARN, "rfs4_file_create: vsd_set failed."); + } + mutex_exit(&vp->v_lock); + return (TRUE); } @@ -2276,8 +2289,24 @@ arg.vp = vp; arg.fh = fh; - fp = (rfs4_file_t *)rfs4_dbsearch(rfs4_file_idx, vp, create, - &arg, RFS4_DBS_VALID); + if (*create == TRUE) + fp = (rfs4_file_t *)rfs4_dbsearch(rfs4_file_idx, vp, create, + &arg, RFS4_DBS_VALID); + else { + mutex_enter(&vp->v_lock); + fp = (rfs4_file_t *)vsd_get(vp, nfs4_srv_vkey); + mutex_exit(&vp->v_lock); + if (fp) { + rfs4_dbe_lock(fp->dbe); + if (rfs4_dbe_is_invalid(fp->dbe)) { + rfs4_dbe_unlock(fp->dbe); + fp = NULL; + } else { + rfs4_dbe_hold(fp->dbe); + rfs4_dbe_unlock(fp->dbe); + } + } + } return (fp); } @@ -2296,19 +2325,36 @@ rfs4_fcreate_arg arg; bool_t screate = *create; + if (screate == FALSE) { + mutex_enter(&vp->v_lock); + fp = (rfs4_file_t *)vsd_get(vp, nfs4_srv_vkey); + mutex_exit(&vp->v_lock); + if (fp) { + rfs4_dbe_lock(fp->dbe); + if (rfs4_dbe_is_invalid(fp->dbe)) { + rfs4_dbe_unlock(fp->dbe); + fp = NULL; + } else { + rfs4_dbe_hold(fp->dbe); + rfs4_dbe_unlock(fp->dbe); + rw_enter(&fp->file_rwlock, RW_WRITER); + } + } + } else { retry: - arg.vp = vp; - arg.fh = fh; - - fp = (rfs4_file_t *)rfs4_dbsearch(rfs4_file_idx, vp, create, - &arg, RFS4_DBS_VALID); - if (fp != NULL) { - rw_enter(&fp->file_rwlock, RW_WRITER); - if (fp->vp == NULL) { - rw_exit(&fp->file_rwlock); - rfs4_file_rele(fp); - *create = screate; - goto retry; + arg.vp = vp; + arg.fh = fh; + + fp = (rfs4_file_t *)rfs4_dbsearch(rfs4_file_idx, vp, create, + &arg, RFS4_DBS_VALID); + if (fp != NULL) { + rw_enter(&fp->file_rwlock, RW_WRITER); + if (fp->vp == NULL) { + rw_exit(&fp->file_rwlock); + rfs4_file_rele(fp); + *create = screate; + goto retry; + } } } @@ -3642,7 +3688,12 @@ */ rfs4_dbe_lock(fp->dbe); if (fp->vp) { - VN_RELE(fp->vp); + vnode_t *vp = fp->vp; + + mutex_enter(&vp->v_lock); + (void) vsd_set(vp, nfs4_srv_vkey, NULL); + mutex_exit(&vp->v_lock); + VN_RELE(vp); fp->vp = NULL; } rfs4_dbe_unlock(fp->dbe); diff -r 09764a26229e -r e67c98912955 usr/src/uts/common/fs/nfs/nfs_srv.c --- a/usr/src/uts/common/fs/nfs/nfs_srv.c Fri Sep 14 10:25:36 2007 -0700 +++ b/usr/src/uts/common/fs/nfs/nfs_srv.c Fri Sep 14 11:24:08 2007 -0700 @@ -100,14 +100,13 @@ vnode_t *vp; struct vattr va; - TRACE_0(TR_FAC_NFS, TR_RFS_GETATTR_START, - "rfs_getattr_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_GETATTR_START, "rfs_getattr_start:"); vp = nfs_fhtovp(fhp, exi); if (vp == NULL) { ns->ns_status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_GETATTR_END, - "rfs_getattr_end:(%S)", "stale"); + "rfs_getattr_end:(%S)", "stale"); return; } @@ -115,11 +114,9 @@ * Do the getattr. */ va.va_mask = AT_ALL; /* we want all the attributes */ - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, "vop_getattr_start:"); error = rfs4_delegated_getattr(vp, &va, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, "vop_getattr_end:"); /* check for overflows */ if (!error) { @@ -131,8 +128,7 @@ ns->ns_status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_GETATTR_END, - "rfs_getattr_end:(%S)", "done"); + TRACE_1(TR_FAC_NFS, TR_RFS_GETATTR_END, "rfs_getattr_end:(%S)", "done"); } void * rfs_getattr_getfh(fhandle_t *fhp) @@ -157,14 +153,13 @@ struct vattr bva; struct flock64 bf; - TRACE_0(TR_FAC_NFS, TR_RFS_SETATTR_START, - "rfs_setattr_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_SETATTR_START, "rfs_setattr_start:"); vp = nfs_fhtovp(&args->saa_fh, exi); if (vp == NULL) { ns->ns_status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_SETATTR_END, - "rfs_setattr_end:(%S)", "stale"); + "rfs_setattr_end:(%S)", "stale"); return; } @@ -172,7 +167,7 @@ VN_RELE(vp); ns->ns_status = NFSERR_ROFS; TRACE_1(TR_FAC_NFS, TR_RFS_SETATTR_END, - "rfs_setattr_end:(%S)", "rofs"); + "rfs_setattr_end:(%S)", "rofs"); return; } @@ -181,7 +176,7 @@ VN_RELE(vp); ns->ns_status = puterrno(error); TRACE_1(TR_FAC_NFS, TR_RFS_SETATTR_END, - "rfs_setattr_end:(%S)", "sattr"); + "rfs_setattr_end:(%S)", "sattr"); return; } @@ -244,7 +239,7 @@ VN_RELE(vp); curthread->t_flag |= T_WOULDBLOCK; TRACE_1(TR_FAC_NFS, TR_RFS_SETATTR_END, - "rfs_setattr_end:(%S)", "delegated"); + "rfs_setattr_end:(%S)", "delegated"); return; } if (nbl_need_check(vp)) { @@ -253,18 +248,16 @@ } bva.va_mask = AT_UID | AT_SIZE; - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, "vop_getattr_start:"); error = VOP_GETATTR(vp, &bva, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, "vop_getattr_end:"); if (error) { if (in_crit) nbl_end_crit(vp); VN_RELE(vp); ns->ns_status = puterrno(error); TRACE_1(TR_FAC_NFS, TR_RFS_SETATTR_END, - "rfs_setattr_end:(%S)", "getattr"); + "rfs_setattr_end:(%S)", "getattr"); return; } @@ -285,7 +278,7 @@ } if (crgetuid(cr) == bva.va_uid && !error && - va.va_size != bva.va_size) { + va.va_size != bva.va_size) { va.va_mask &= ~AT_SIZE; bf.l_type = F_WRLCK; bf.l_whence = 0; @@ -294,11 +287,10 @@ bf.l_sysid = 0; bf.l_pid = 0; TRACE_0(TR_FAC_NFS, TR_VOP_SPACE_START, - "vop_space_start:"); + "vop_space_start:"); error = VOP_SPACE(vp, F_FREESP, &bf, FWRITE, - (offset_t)va.va_size, cr, NULL); - TRACE_0(TR_FAC_NFS, TR_VOP_SPACE_END, - "vop_space_end:"); + (offset_t)va.va_size, cr, NULL); + TRACE_0(TR_FAC_NFS, TR_VOP_SPACE_END, "vop_space_end:"); } if (in_crit) nbl_end_crit(vp); @@ -309,20 +301,16 @@ * Do the setattr. */ if (!error && va.va_mask) { - TRACE_0(TR_FAC_NFS, TR_VOP_SETATTR_START, - "vop_setattr_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_SETATTR_START, "vop_setattr_start:"); error = VOP_SETATTR(vp, &va, flag, cr, NULL); - TRACE_0(TR_FAC_NFS, TR_VOP_SETATTR_END, - "vop_setattr_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_SETATTR_END, "vop_setattr_end:"); } if (!error) { va.va_mask = AT_ALL; /* get everything */ - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, "vop_getattr_start:"); error = rfs4_delegated_getattr(vp, &va, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, "vop_getattr_end:"); /* check for overflows */ if (!error) { @@ -340,8 +328,7 @@ ns->ns_status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_SETATTR_END, - "rfs_setattr_end:(%S)", "done"); + TRACE_1(TR_FAC_NFS, TR_RFS_SETATTR_END, "rfs_setattr_end:(%S)", "done"); } void * rfs_setattr_getfh(struct nfssaargs *args) @@ -366,8 +353,7 @@ struct sec_ol sec = {0, 0}; bool_t publicfh_flag = FALSE, auth_weak = FALSE; - TRACE_0(TR_FAC_NFS, TR_RFS_LOOKUP_START, - "rfs_lookup_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_LOOKUP_START, "rfs_lookup_start:"); /* * Trusted Extension doesn't support NFSv2. MOUNT @@ -377,7 +363,7 @@ if (is_system_labeled() && req->rq_vers == 2) { dr->dr_status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_LOOKUP_END, - "rfs_lookup_end:(%S)", "access"); + "rfs_lookup_end:(%S)", "access"); return; } @@ -387,7 +373,7 @@ if (da->da_name == NULL || *da->da_name == '\0') { dr->dr_status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_LOOKUP_END, - "rfs_lookup_end:(%S)", "access"); + "rfs_lookup_end:(%S)", "access"); return; } @@ -403,7 +389,7 @@ if (dvp == NULL) { dr->dr_status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_LOOKUP_END, - "rfs_lookup_end:(%S)", "stale"); + "rfs_lookup_end:(%S)", "stale"); return; } } @@ -418,7 +404,7 @@ VN_RELE(dvp); dr->dr_status = NFSERR_NOENT; TRACE_1(TR_FAC_NFS, TR_RFS_LOOKUP_END, - "rfs_lookup_end:(%S)", "noent"); + "rfs_lookup_end:(%S)", "noent"); return; } @@ -434,25 +420,21 @@ if (PUBLIC_FH2(fhp)) { publicfh_flag = TRUE; error = rfs_publicfh_mclookup(da->da_name, dvp, cr, &vp, &exi, - &sec); + &sec); } else { /* * Do a normal single component lookup. */ - TRACE_0(TR_FAC_NFS, TR_VOP_LOOKUP_START, - "vop_lookup_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_LOOKUP_START, "vop_lookup_start:"); error = VOP_LOOKUP(dvp, da->da_name, &vp, NULL, 0, NULL, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_LOOKUP_END, - "vop_lookup_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_LOOKUP_END, "vop_lookup_end:"); } if (!error) { va.va_mask = AT_ALL; /* we want everything */ - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, "vop_getattr_start:"); error = rfs4_delegated_getattr(vp, &va, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, "vop_getattr_end:"); /* check for overflows */ if (!error) { acl_perm(vp, exi, &va, cr); @@ -460,12 +442,12 @@ if (!error) { if (sec.sec_flags & SEC_QUERY) error = makefh_ol(&dr->dr_fhandle, exi, - sec.sec_index); + sec.sec_index); else { error = makefh(&dr->dr_fhandle, vp, - exi); + exi); if (!error && publicfh_flag && - !chk_clnt_sec(exi, req)) + !chk_clnt_sec(exi, req)) auth_weak = TRUE; } } @@ -494,8 +476,7 @@ else dr->dr_status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_LOOKUP_END, - "rfs_lookup_end:(%S)", "done"); + TRACE_1(TR_FAC_NFS, TR_RFS_LOOKUP_END, "rfs_lookup_end:(%S)", "done"); } void * rfs_lookup_getfh(struct nfsdiropargs *da) @@ -518,31 +499,28 @@ vnode_t *vp; struct vattr va; - TRACE_0(TR_FAC_NFS, TR_RFS_READLINK_START, - "rfs_readlink_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_READLINK_START, "rfs_readlink_start:"); vp = nfs_fhtovp(fhp, exi); if (vp == NULL) { rl->rl_data = NULL; rl->rl_status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_READLINK_END, - "rfs_readlink_end:(%S)", "stale"); + "rfs_readlink_end:(%S)", "stale"); return; } va.va_mask = AT_MODE; - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, "vop_getattr_start:"); error = VOP_GETATTR(vp, &va, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, "vop_getattr_end:"); if (error) { VN_RELE(vp); rl->rl_data = NULL; rl->rl_status = puterrno(error); TRACE_1(TR_FAC_NFS, TR_RFS_READLINK_END, - "rfs_readlink_end:(%S)", "getattr error"); + "rfs_readlink_end:(%S)", "getattr error"); return; } @@ -551,7 +529,7 @@ rl->rl_data = NULL; rl->rl_status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_READLINK_END, - "rfs_readlink_end:(%S)", "access"); + "rfs_readlink_end:(%S)", "access"); return; } @@ -564,7 +542,7 @@ rl->rl_data = NULL; rl->rl_status = NFSERR_NXIO; TRACE_1(TR_FAC_NFS, TR_RFS_READLINK_END, - "rfs_readlink_end:(%S)", "nxio"); + "rfs_readlink_end:(%S)", "nxio"); return; } @@ -588,11 +566,9 @@ /* * Do the readlink. */ - TRACE_0(TR_FAC_NFS, TR_VOP_READLINK_START, - "vop_readlink_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_READLINK_START, "vop_readlink_start:"); error = VOP_READLINK(vp, &uio, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_READLINK_END, - "vop_readlink_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_READLINK_END, "vop_readlink_end:"); #if 0 /* notyet */ /* @@ -621,7 +597,7 @@ rl->rl_status = puterrno(error); TRACE_1(TR_FAC_NFS, TR_RFS_READLINK_END, - "rfs_readlink_end:(%S)", "done"); + "rfs_readlink_end:(%S)", "done"); } void * rfs_readlink_getfh(fhandle_t *fhp) @@ -656,15 +632,14 @@ int alloc_err = 0; int in_crit = 0; - TRACE_0(TR_FAC_NFS, TR_RFS_READ_START, - "rfs_read_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_READ_START, "rfs_read_start:"); vp = nfs_fhtovp(&ra->ra_fhandle, exi); if (vp == NULL) { rr->rr_data = NULL; rr->rr_status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_READ_END, - "rfs_read_end:(%S)", "stale"); + "rfs_read_end:(%S)", "stale"); return; } @@ -673,7 +648,7 @@ rr->rr_data = NULL; rr->rr_status = NFSERR_ISDIR; TRACE_1(TR_FAC_NFS, TR_RFS_READ_END, - "rfs_read_end:(%S)", "isdir"); + "rfs_read_end:(%S)", "isdir"); return; } @@ -687,7 +662,7 @@ curthread->t_flag |= T_WOULDBLOCK; rr->rr_data = NULL; TRACE_1(TR_FAC_NFS, TR_RFS_READ_END, - "rfs_read_end:(%S)", "delegated"); + "rfs_read_end:(%S)", "delegated"); return; } @@ -704,38 +679,33 @@ rr->rr_data = NULL; rr->rr_status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_READ_END, - "rfs_read_end:(%S)", " csf access error"); + "rfs_read_end:(%S)", " csf access error"); return; } in_crit = 1; } - TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_START, - "vop_rwlock_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_START, "vop_rwlock_start:"); (void) VOP_RWLOCK(vp, V_WRITELOCK_FALSE, NULL); - TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_END, - "vop_rwlock_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_END, "vop_rwlock_end:"); va.va_mask = AT_ALL; - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, "vop_getattr_start:"); error = VOP_GETATTR(vp, &va, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, "vop_getattr_end:"); if (error) { TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_START, - "vop_rwunlock_start:"); + "vop_rwunlock_start:"); VOP_RWUNLOCK(vp, V_WRITELOCK_FALSE, NULL); if (in_crit) nbl_end_crit(vp); - TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, - "vop_rwunlock_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, "vop_rwunlock_end:"); VN_RELE(vp); rr->rr_data = NULL; rr->rr_status = puterrno(error); TRACE_1(TR_FAC_NFS, TR_RFS_READ_END, - "rfs_read_end:(%S)", "getattr error"); + "rfs_read_end:(%S)", "getattr error"); return; } @@ -745,52 +715,49 @@ * is always allowed to read it. */ if (crgetuid(cr) != va.va_uid) { - TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_START, - "vop_access_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_START, "vop_access_start:"); error = VOP_ACCESS(vp, VREAD, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_END, - "vop_access_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_END, "vop_access_end:"); if (error) { /* * Exec is the same as read over the net because * of demand loading. */ TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_START, - "vop_access_start:"); + "vop_access_start:"); error = VOP_ACCESS(vp, VEXEC, 0, cr); TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_END, - "vop_access_end:"); + "vop_access_end:"); } if (error) { TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_START, - "vop_rwunlock_start:"); + "vop_rwunlock_start:"); VOP_RWUNLOCK(vp, V_WRITELOCK_FALSE, NULL); if (in_crit) nbl_end_crit(vp); TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, - "vop_rwunlock_end:"); + "vop_rwunlock_end:"); VN_RELE(vp); rr->rr_data = NULL; rr->rr_status = puterrno(error); TRACE_1(TR_FAC_NFS, TR_RFS_READ_END, - "rfs_read_end:(%S)", "access error"); + "rfs_read_end:(%S)", "access error"); return; } } if (MANDLOCK(vp, va.va_mode)) { TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_START, - "vop_rwunlock_start:"); + "vop_rwunlock_start:"); VOP_RWUNLOCK(vp, V_WRITELOCK_FALSE, NULL); if (in_crit) nbl_end_crit(vp); - TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, - "vop_rwunlock_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, "vop_rwunlock_end:"); VN_RELE(vp); rr->rr_data = NULL; rr->rr_status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_READ_END, - "rfs_read_end:(%S)", "mand lock"); + "rfs_read_end:(%S)", "mand lock"); return; } @@ -831,26 +798,23 @@ uio.uio_loffset = (offset_t)ra->ra_offset; uio.uio_resid = ra->ra_count; - TRACE_0(TR_FAC_NFS, TR_VOP_READ_START, - "vop_read_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_READ_START, "vop_read_start:"); error = VOP_READ(vp, &uio, 0, cr, NULL); - TRACE_0(TR_FAC_NFS, TR_VOP_READ_END, - "vop_read_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_READ_END, "vop_read_end:"); if (error) { freeb(mp); TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_START, - "vop_rwunlock_start:"); + "vop_rwunlock_start:"); VOP_RWUNLOCK(vp, V_WRITELOCK_FALSE, NULL); if (in_crit) nbl_end_crit(vp); - TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, - "vop_rwunlock_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, "vop_rwunlock_end:"); VN_RELE(vp); rr->rr_data = NULL; rr->rr_status = puterrno(error); TRACE_1(TR_FAC_NFS, TR_RFS_READ_END, - "rfs_read_end:(%S)", "read error"); + "rfs_read_end:(%S)", "read error"); return; } @@ -859,25 +823,23 @@ * time to the client side for his cache. */ va.va_mask = AT_ALL; - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, "vop_getattr_start:"); error = VOP_GETATTR(vp, &va, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, "vop_getattr_end:"); if (error) { freeb(mp); TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_START, - "vop_rwunlock_start:"); + "vop_rwunlock_start:"); VOP_RWUNLOCK(vp, V_WRITELOCK_FALSE, NULL); if (in_crit) nbl_end_crit(vp); TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, - "vop_rwunlock_end:"); + "vop_rwunlock_end:"); VN_RELE(vp); rr->rr_data = NULL; rr->rr_status = puterrno(error); TRACE_1(TR_FAC_NFS, TR_RFS_READ_END, - "rfs_read_end:(%S)", "read error"); + "rfs_read_end:(%S)", "read error"); return; } @@ -886,13 +848,11 @@ rr->rr_data = (char *)mp->b_datap->db_base; done: - TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_START, - "vop_rwunlock_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_START, "vop_rwunlock_start:"); VOP_RWUNLOCK(vp, V_WRITELOCK_FALSE, NULL); if (in_crit) nbl_end_crit(vp); - TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, - "vop_rwunlock_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, "vop_rwunlock_end:"); acl_perm(vp, exi, &va, cr); @@ -915,8 +875,7 @@ rr->rr_status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_READ_END, - "rfs_read_end:(%S)", "done"); + TRACE_1(TR_FAC_NFS, TR_RFS_READ_END, "rfs_read_end:(%S)", "done"); } /* @@ -970,14 +929,13 @@ cred_t *savecred; int in_crit = 0; - TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_START, - "rfs_write_start:(%S)", "sync"); + TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_START, "rfs_write_start:(%S)", "sync"); vp = nfs_fhtovp(&wa->wa_fhandle, exi); if (vp == NULL) { ns->ns_status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_END, - "rfs_write_end:(%S)", "stale"); + "rfs_write_end:(%S)", "stale"); return; } @@ -985,7 +943,7 @@ VN_RELE(vp); ns->ns_status = NFSERR_ROFS; TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_END, - "rfs_write_end:(%S)", "rofs"); + "rfs_write_end:(%S)", "rofs"); return; } @@ -993,7 +951,7 @@ VN_RELE(vp); ns->ns_status = NFSERR_ISDIR; TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_END, - "rfs_write_end:(%S)", "isdir"); + "rfs_write_end:(%S)", "isdir"); return; } @@ -1006,22 +964,20 @@ VN_RELE(vp); curthread->t_flag |= T_WOULDBLOCK; TRACE_1(TR_FAC_NFS, TR_RFS_READ_END, - "rfs_write_end:(%S)", "delegated"); + "rfs_write_end:(%S)", "delegated"); return; } va.va_mask = AT_UID|AT_MODE; - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, "vop_getattr_start:"); error = VOP_GETATTR(vp, &va, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, "vop_getattr_end:"); if (error) { VN_RELE(vp); ns->ns_status = puterrno(error); TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_END, - "rfs_write_end:(%S)", "getattr error"); + "rfs_write_end:(%S)", "getattr error"); return; } @@ -1031,16 +987,14 @@ * with read only permission. The owner of the file * is always allowed to write it. */ - TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_START, - "vop_access_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_START, "vop_access_start:"); error = VOP_ACCESS(vp, VWRITE, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_END, - "vop_access_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_END, "vop_access_end:"); if (error) { VN_RELE(vp); ns->ns_status = puterrno(error); TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_END, - "rfs_write_end:(%S)", "access error"); + "rfs_write_end:(%S)", "access error"); return; } } @@ -1054,7 +1008,7 @@ VN_RELE(vp); ns->ns_status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_END, - "rfs_write_end:(%S)", "mand lock"); + "rfs_write_end:(%S)", "mand lock"); return; } @@ -1072,11 +1026,9 @@ } } - TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_START, - "vop_rwlock_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_START, "vop_rwlock_start:"); (void) VOP_RWLOCK(vp, V_WRITELOCK_TRUE, NULL); - TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_END, - "vop_rwlock_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_END, "vop_rwlock_end:"); if (wa->wa_data) { iov[0].iov_base = wa->wa_data; @@ -1100,7 +1052,7 @@ * for now we assume no append mode */ TRACE_1(TR_FAC_NFS, TR_VOP_WRITE_START, - "vop_write_start:(%S)", "sync"); + "vop_write_start:(%S)", "sync"); /* * We're changing creds because VM may fault and we need * the cred of the current thread to be used if quota @@ -1110,8 +1062,7 @@ curthread->t_cred = cr; error = VOP_WRITE(vp, &uio, FSYNC, cr, NULL); curthread->t_cred = savecred; - TRACE_0(TR_FAC_NFS, TR_VOP_WRITE_END, - "vop_write_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_WRITE_END, "vop_write_end:"); } else { iovcnt = 0; for (m = wa->wa_mblk; m != NULL; m = m->b_cont) @@ -1147,7 +1098,7 @@ * For now we assume no append mode. */ TRACE_1(TR_FAC_NFS, TR_VOP_WRITE_START, - "vop_write_start:(%S)", "iov sync"); + "vop_write_start:(%S)", "iov sync"); /* * We're changing creds because VM may fault and we need * the cred of the current thread to be used if quota @@ -1157,18 +1108,15 @@ curthread->t_cred = cr; error = VOP_WRITE(vp, &uio, FSYNC, cr, NULL); curthread->t_cred = savecred; - TRACE_0(TR_FAC_NFS, TR_VOP_WRITE_END, - "vop_write_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_WRITE_END, "vop_write_end:"); if (iovp != iov) kmem_free(iovp, sizeof (*iovp) * iovcnt); } - TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_START, - "vop_rwunlock_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_START, "vop_rwunlock_start:"); VOP_RWUNLOCK(vp, V_WRITELOCK_TRUE, NULL); - TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, - "vop_rwunlock_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, "vop_rwunlock_end:"); if (!error) { /* @@ -1176,11 +1124,9 @@ * time to the client side for his cache. */ va.va_mask = AT_ALL; /* now we want everything */ - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, "vop_getattr_start:"); error = VOP_GETATTR(vp, &va, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, "vop_getattr_end:"); /* check for overflows */ if (!error) { acl_perm(vp, exi, &va, cr); @@ -1195,8 +1141,7 @@ ns->ns_status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_END, - "rfs_write_end:(%S)", "sync"); + TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_END, "rfs_write_end:(%S)", "sync"); } struct rfs_async_write { @@ -1268,7 +1213,7 @@ } TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_START, - "rfs_write_start:(%S)", "async"); + "rfs_write_start:(%S)", "async"); /* * Initialize status to RFSWRITE_INITVAL instead of 0, since value of 0 @@ -1319,7 +1264,7 @@ cv_wait(&lp->cv, &rfs_async_write_lock); mutex_exit(&rfs_async_write_lock); TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_END, - "rfs_write_end:(%S)", "cluster child"); + "rfs_write_end:(%S)", "cluster child"); return; } @@ -1368,7 +1313,7 @@ cv_broadcast(&nlp->cv); mutex_exit(&rfs_async_write_lock); TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_END, - "rfs_write_end:(%S)", "stale"); + "rfs_write_end:(%S)", "stale"); return; } @@ -1395,7 +1340,7 @@ cv_broadcast(&nlp->cv); mutex_exit(&rfs_async_write_lock); TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_END, - "rfs_write_end:(%S)", "isdir"); + "rfs_write_end:(%S)", "isdir"); return; } @@ -1412,11 +1357,9 @@ * Lock the file for writing. This operation provides * the delay which allows clusters to grow. */ - TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_START, - "vop_wrlock_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_START, "vop_wrlock_start:"); (void) VOP_RWLOCK(vp, V_WRITELOCK_TRUE, NULL); - TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_END, - "vop_wrlock_end"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_END, "vop_wrlock_end"); /* * Disconnect this cluster from the list of clusters. @@ -1469,11 +1412,9 @@ } va.va_mask = AT_UID|AT_MODE; - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, "vop_getattr_start:"); error = VOP_GETATTR(vp, &va, 0, rp->cr); - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, "vop_getattr_end:"); if (!error) { if (crgetuid(rp->cr) != va.va_uid) { /* @@ -1483,10 +1424,10 @@ * write it. */ TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_START, - "vop_access_start:"); + "vop_access_start:"); error = VOP_ACCESS(vp, VWRITE, 0, rp->cr); TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_END, - "vop_access_end:"); + "vop_access_end:"); } if (!error && MANDLOCK(vp, va.va_mode)) error = EACCES; @@ -1618,7 +1559,7 @@ * For now we assume no append mode. */ TRACE_1(TR_FAC_NFS, TR_VOP_WRITE_START, - "vop_write_start:(%S)", "async"); + "vop_write_start:(%S)", "async"); /* * Check to see if the v4 side of the server has @@ -1629,7 +1570,7 @@ curthread->t_flag |= T_WOULDBLOCK; error = EACCES; /* just to have an error */ TRACE_1(TR_FAC_NFS, TR_RFS_READ_END, - "rfs_write_end:(%S)", "delegated"); + "rfs_write_end:(%S)", "delegated"); } else { /* * We're changing creds because VM may fault @@ -1642,7 +1583,7 @@ error = VOP_WRITE(vp, &uio, 0, rp->cr, NULL); curthread->t_cred = savecred; TRACE_0(TR_FAC_NFS, TR_VOP_WRITE_END, - "vop_write_end:"); + "vop_write_end:"); } if (niovp != iov) @@ -1656,10 +1597,10 @@ */ va.va_mask = AT_ALL; /* now we want everything */ TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + "vop_getattr_start:"); error = VOP_GETATTR(vp, &va, 0, rp->cr); TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + "vop_getattr_end:"); if (!error) acl_perm(vp, exi, &va, rp->cr); } @@ -1687,25 +1628,20 @@ * the data and metadata to stable storage. */ if (data_written) { - TRACE_0(TR_FAC_NFS, TR_VOP_PUTPAGE_START, - "vop_putpage_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_PUTPAGE_START, "vop_putpage_start:"); error = VOP_PUTPAGE(vp, (u_offset_t)off, len, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_PUTPAGE_END, - "vop_putpage_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_PUTPAGE_END, "vop_putpage_end:"); if (!error) { TRACE_0(TR_FAC_NFS, TR_VOP_FSYNC_START, - "vop_fsync_start:"); + "vop_fsync_start:"); error = VOP_FSYNC(vp, FNODSYNC, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_FSYNC_END, - "vop_fsync_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_FSYNC_END, "vop_fsync_end:"); } } - TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_START, - "vop_rwunlock_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_START, "vop_rwunlock_start:"); VOP_RWUNLOCK(vp, V_WRITELOCK_TRUE, NULL); - TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, - "vop_rwunlock_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, "vop_rwunlock_end:"); if (in_crit) nbl_end_crit(vp); @@ -1722,8 +1658,7 @@ cv_broadcast(&nlp->cv); mutex_exit(&rfs_async_write_lock); - TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_END, - "rfs_write_end:(%S)", "async"); + TRACE_1(TR_FAC_NFS, TR_RFS_WRITE_END, "rfs_write_end:(%S)", "async"); } void * @@ -1753,8 +1688,7 @@ int lookup_ok; bool_t trunc; - TRACE_0(TR_FAC_NFS, TR_RFS_CREATE_START, - "rfs_create_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_CREATE_START, "rfs_create_start:"); /* * Disallow NULL paths @@ -1762,7 +1696,7 @@ if (name == NULL || *name == '\0') { dr->dr_status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_CREATE_END, - "rfs_create_end:(%S)", "access"); + "rfs_create_end:(%S)", "access"); return; } @@ -1770,7 +1704,7 @@ if (dvp == NULL) { dr->dr_status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_CREATE_END, - "rfs_create_end:(%S)", "stale"); + "rfs_create_end:(%S)", "stale"); return; } @@ -1778,7 +1712,7 @@ if (error) { dr->dr_status = puterrno(error); TRACE_1(TR_FAC_NFS, TR_RFS_CREATE_END, - "rfs_create_end:(%S)", "sattr"); + "rfs_create_end:(%S)", "sattr"); return; } @@ -1789,7 +1723,7 @@ VN_RELE(dvp); dr->dr_status = NFSERR_INVAL; TRACE_1(TR_FAC_NFS, TR_RFS_CREATE_END, - "rfs_create_end:(%S)", "no mode"); + "rfs_create_end:(%S)", "no mode"); return; } @@ -1842,21 +1776,19 @@ lookup_ok = 0; mode = VWRITE; if (!(va.va_mask & AT_SIZE) || va.va_type != VREG) { - TRACE_0(TR_FAC_NFS, TR_VOP_LOOKUP_START, - "vop_lookup_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_LOOKUP_START, "vop_lookup_start:"); error = VOP_LOOKUP(dvp, name, &tvp, NULL, 0, NULL, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_LOOKUP_END, - "vop_lookup_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_LOOKUP_END, "vop_lookup_end:"); if (!error) { struct vattr at; lookup_ok = 1; at.va_mask = AT_MODE; TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + "vop_getattr_start:"); error = VOP_GETATTR(tvp, &at, 0, cr); TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + "vop_getattr_end:"); if (!error) mode = (at.va_mode & S_IWUSR) ? VWRITE : VREAD; VN_RELE(tvp); @@ -1916,7 +1848,7 @@ } if (length) { if (nbl_conflict(tvp, NBL_WRITE, - offset, length, 0)) { + offset, length, 0)) { error = EACCES; } } @@ -1940,11 +1872,9 @@ exi->exi_export.ex_flags & EX_NOSUID) va.va_mode &= ~(VSUID | VSGID); - TRACE_0(TR_FAC_NFS, TR_VOP_CREATE_START, - "vop_create_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_CREATE_START, "vop_create_start:"); error = VOP_CREATE(dvp, name, &va, NONEXCL, mode, &vp, cr, 0); - TRACE_0(TR_FAC_NFS, TR_VOP_CREATE_END, - "vop_create_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_CREATE_END, "vop_create_end:"); if (!error) { @@ -1953,24 +1883,24 @@ else trunc = FALSE; - if (rfs4_check_delegated(FWRITE, tvp, trunc)) { - VN_RELE(tvp); + if (rfs4_check_delegated(FWRITE, vp, trunc)) { + VN_RELE(vp); curthread->t_flag |= T_WOULDBLOCK; goto out; } va.va_mask = AT_ALL; TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + "vop_getattr_start:"); error = VOP_GETATTR(vp, &va, 0, cr); TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + "vop_getattr_end:"); /* check for overflows */ if (!error) { acl_perm(vp, exi, &va, cr); error = vattr_to_nattr(&va, &dr->dr_attr); if (!error) { error = makefh(&dr->dr_fhandle, vp, - exi); + exi); } } /* @@ -1997,8 +1927,7 @@ dr->dr_status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_CREATE_END, - "rfs_create_end:(%S)", "done"); + TRACE_1(TR_FAC_NFS, TR_RFS_CREATE_END, "rfs_create_end:(%S)", "done"); } void * rfs_create_getfh(struct nfscreatargs *args) @@ -2019,8 +1948,7 @@ vnode_t *targvp; int in_crit = 0; - TRACE_0(TR_FAC_NFS, TR_RFS_REMOVE_START, - "rfs_remove_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_REMOVE_START, "rfs_remove_start:"); /* * Disallow NULL paths @@ -2028,7 +1956,7 @@ if (da->da_name == NULL || *da->da_name == '\0') { *status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_REMOVE_END, - "rfs_remove_end:(%S)", "access"); + "rfs_remove_end:(%S)", "access"); return; } @@ -2036,7 +1964,7 @@ if (vp == NULL) { *status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_REMOVE_END, - "rfs_remove_end:(%S)", "stale"); + "rfs_remove_end:(%S)", "stale"); return; } @@ -2044,15 +1972,14 @@ VN_RELE(vp); *status = NFSERR_ROFS; TRACE_1(TR_FAC_NFS, TR_RFS_REMOVE_END, - "rfs_remove_end:(%S)", "rofs"); + "rfs_remove_end:(%S)", "rofs"); return; } /* * Check for a conflict with a non-blocking mandatory share reservation. */ - error = VOP_LOOKUP(vp, da->da_name, &targvp, NULL, 0, - NULL, cr); + error = VOP_LOOKUP(vp, da->da_name, &targvp, NULL, 0, NULL, cr); if (error != 0) { VN_RELE(vp); *status = puterrno(error); @@ -2083,11 +2010,9 @@ } } - TRACE_0(TR_FAC_NFS, TR_VOP_REMOVE_START, - "vop_remove_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_REMOVE_START, "vop_remove_start:"); error = VOP_REMOVE(vp, da->da_name, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_REMOVE_END, - "vop_remove_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_REMOVE_END, "vop_remove_end:"); /* * Force modified data and metadata out to stable storage. @@ -2102,8 +2027,7 @@ *status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_REMOVE_END, - "rfs_remove_end:(%S)", "done"); + TRACE_1(TR_FAC_NFS, TR_RFS_REMOVE_END, "rfs_remove_end:(%S)", "done"); } void * @@ -2129,14 +2053,13 @@ vnode_t *targvp; int in_crit = 0; - TRACE_0(TR_FAC_NFS, TR_RFS_RENAME_START, - "rfs_rename_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_RENAME_START, "rfs_rename_start:"); fromvp = nfs_fhtovp(args->rna_from.da_fhandle, exi); if (fromvp == NULL) { *status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_RENAME_END, - "rfs_rename_end:(%S)", "from stale"); + "rfs_rename_end:(%S)", "from stale"); return; } @@ -2146,7 +2069,7 @@ VN_RELE(fromvp); *status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_RENAME_END, - "rfs_rename_end:(%S)", "cross device"); + "rfs_rename_end:(%S)", "cross device"); return; } exi_rele(to_exi); @@ -2155,7 +2078,7 @@ VN_RELE(fromvp); *status = NFSERR_XDEV; TRACE_1(TR_FAC_NFS, TR_RFS_RENAME_END, - "rfs_rename_end:(%S)", "from stale"); + "rfs_rename_end:(%S)", "from stale"); return; } @@ -2164,7 +2087,7 @@ VN_RELE(fromvp); *status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_RENAME_END, - "rfs_rename_end:(%S)", "to stale"); + "rfs_rename_end:(%S)", "to stale"); return; } @@ -2172,7 +2095,7 @@ VN_RELE(tovp); VN_RELE(fromvp); TRACE_1(TR_FAC_NFS, TR_RFS_RENAME_END, - "rfs_rename_end:(%S)", "not dir"); + "rfs_rename_end:(%S)", "not dir"); *status = NFSERR_NOTDIR; return; } @@ -2186,7 +2109,7 @@ VN_RELE(fromvp); *status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_RENAME_END, - "rfs_rename_end:(%S)", "access"); + "rfs_rename_end:(%S)", "access"); return; } @@ -2195,7 +2118,7 @@ VN_RELE(fromvp); *status = NFSERR_ROFS; TRACE_1(TR_FAC_NFS, TR_RFS_RENAME_END, - "rfs_rename_end:(%S)", "rofs"); + "rfs_rename_end:(%S)", "rofs"); return; } @@ -2203,7 +2126,7 @@ * Check for a conflict with a non-blocking mandatory share reservation. */ error = VOP_LOOKUP(fromvp, args->rna_from.da_name, &srcvp, NULL, 0, - NULL, cr); + NULL, cr); if (error != 0) { VN_RELE(tovp); VN_RELE(fromvp); @@ -2248,12 +2171,10 @@ } } - TRACE_0(TR_FAC_NFS, TR_VOP_RENAME_START, - "vop_rename_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RENAME_START, "vop_rename_start:"); error = VOP_RENAME(fromvp, args->rna_from.da_name, tovp, args->rna_to.da_name, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_RENAME_END, - "vop_rename_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RENAME_END, "vop_rename_end:"); if (error == 0) { char *tmp; @@ -2264,7 +2185,7 @@ srcvp->v_path = NULL; mutex_exit(&srcvp->v_lock); vn_setpath(rootdir, tovp, srcvp, args->rna_to.da_name, - strlen(args->rna_to.da_name)); + strlen(args->rna_to.da_name)); if (tmp != NULL) kmem_free(tmp, strlen(tmp) + 1); } @@ -2284,8 +2205,7 @@ *status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_RENAME_END, - "rfs_rename_end:(%S)", "done"); + TRACE_1(TR_FAC_NFS, TR_RFS_RENAME_END, "rfs_rename_end:(%S)", "done"); } void * rfs_rename_getfh(struct nfsrnmargs *args) @@ -2307,14 +2227,13 @@ struct exportinfo *to_exi; fhandle_t *fh; - TRACE_0(TR_FAC_NFS, TR_RFS_LINK_START, - "rfs_link_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_LINK_START, "rfs_link_start:"); fromvp = nfs_fhtovp(args->la_from, exi); if (fromvp == NULL) { *status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_LINK_END, - "rfs_link_end:(%S)", "from stale"); + "rfs_link_end:(%S)", "from stale"); return; } @@ -2324,7 +2243,7 @@ VN_RELE(fromvp); *status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_LINK_END, - "rfs_link_end:(%S)", "cross device"); + "rfs_link_end:(%S)", "cross device"); return; } exi_rele(to_exi); @@ -2333,7 +2252,7 @@ VN_RELE(fromvp); *status = NFSERR_XDEV; TRACE_1(TR_FAC_NFS, TR_RFS_LINK_END, - "rfs_link_end:(%S)", "cross device"); + "rfs_link_end:(%S)", "cross device"); return; } @@ -2342,7 +2261,7 @@ VN_RELE(fromvp); *status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_LINK_END, - "rfs_link_end:(%S)", "to stale"); + "rfs_link_end:(%S)", "to stale"); return; } @@ -2351,7 +2270,7 @@ VN_RELE(fromvp); *status = NFSERR_NOTDIR; TRACE_1(TR_FAC_NFS, TR_RFS_LINK_END, - "rfs_link_end:(%S)", "not dir"); + "rfs_link_end:(%S)", "not dir"); return; } /* @@ -2362,7 +2281,7 @@ VN_RELE(fromvp); *status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_LINK_END, - "rfs_link_end:(%S)", "access"); + "rfs_link_end:(%S)", "access"); return; } @@ -2371,15 +2290,13 @@ VN_RELE(fromvp); *status = NFSERR_ROFS; TRACE_1(TR_FAC_NFS, TR_RFS_LINK_END, - "rfs_link_end:(%S)", "rofs"); + "rfs_link_end:(%S)", "rofs"); return; } - TRACE_0(TR_FAC_NFS, TR_VOP_LINK_START, - "vop_link_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_LINK_START, "vop_link_start:"); error = VOP_LINK(tovp, fromvp, args->la_to.da_name, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_LINK_END, - "vop_link_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_LINK_END, "vop_link_end:"); /* * Force modified data and metadata out to stable storage. @@ -2392,8 +2309,7 @@ *status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_LINK_END, - "rfs_link_end:(%S)", "done"); + TRACE_1(TR_FAC_NFS, TR_RFS_LINK_END, "rfs_link_end:(%S)", "done"); } void * rfs_link_getfh(struct nfslinkargs *args) @@ -2416,8 +2332,7 @@ vnode_t *svp; int lerror; - TRACE_0(TR_FAC_NFS, TR_RFS_SYMLINK_START, - "rfs_symlink_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_SYMLINK_START, "rfs_symlink_start:"); /* * Disallow NULL paths @@ -2425,7 +2340,7 @@ if (args->sla_from.da_name == NULL || *args->sla_from.da_name == '\0') { *status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_SYMLINK_END, - "rfs_symlink_end:(%S)", "access"); + "rfs_symlink_end:(%S)", "access"); return; } @@ -2433,7 +2348,7 @@ if (vp == NULL) { *status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_SYMLINK_END, - "rfs_symlink_end:(%S)", "stale"); + "rfs_symlink_end:(%S)", "stale"); return; } @@ -2441,7 +2356,7 @@ VN_RELE(vp); *status = NFSERR_ROFS; TRACE_1(TR_FAC_NFS, TR_RFS_SYMLINK_END, - "rfs_symlink_end:(%S)", "rofs"); + "rfs_symlink_end:(%S)", "rofs"); return; } @@ -2450,7 +2365,7 @@ VN_RELE(vp); *status = puterrno(error); TRACE_1(TR_FAC_NFS, TR_RFS_SYMLINK_END, - "rfs_symlink_end:(%S)", "sattr"); + "rfs_symlink_end:(%S)", "sattr"); return; } @@ -2458,28 +2373,24 @@ VN_RELE(vp); *status = NFSERR_INVAL; TRACE_1(TR_FAC_NFS, TR_RFS_SYMLINK_END, - "rfs_symlink_end:(%S)", "no mode"); + "rfs_symlink_end:(%S)", "no mode"); return; } va.va_type = VLNK; va.va_mask |= AT_TYPE; - TRACE_0(TR_FAC_NFS, TR_VOP_SYMLINK_START, - "vop_symlink_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_SYMLINK_START, "vop_symlink_start:"); error = VOP_SYMLINK(vp, args->sla_from.da_name, &va, args->sla_tnm, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_SYMLINK_END, - "vop_symlink_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_SYMLINK_END, "vop_symlink_end:"); /* * Force new data and metadata out to stable storage. */ - TRACE_0(TR_FAC_NFS, TR_VOP_LOOKUP_START, - "vop_lookup_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_LOOKUP_START, "vop_lookup_start:"); lerror = VOP_LOOKUP(vp, args->sla_from.da_name, &svp, NULL, 0, NULL, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_LOOKUP_END, - "vop_lookup_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_LOOKUP_END, "vop_lookup_end:"); if (!lerror) { (void) VOP_FSYNC(svp, 0, cr); VN_RELE(svp); @@ -2494,8 +2405,7 @@ *status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_SYMLINK_END, - "rfs_symlink_end:(%S)", "done"); + TRACE_1(TR_FAC_NFS, TR_RFS_SYMLINK_END, "rfs_symlink_end:(%S)", "done"); } void * rfs_symlink_getfh(struct nfsslargs *args) @@ -2518,8 +2428,7 @@ vnode_t *vp; char *name = args->ca_da.da_name; - TRACE_0(TR_FAC_NFS, TR_RFS_MKDIR_START, - "rfs_mkdir_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_MKDIR_START, "rfs_mkdir_start:"); /* * Disallow NULL paths @@ -2527,7 +2436,7 @@ if (name == NULL || *name == '\0') { dr->dr_status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_MKDIR_END, - "rfs_mkdir_end:(%S)", "access"); + "rfs_mkdir_end:(%S)", "access"); return; } @@ -2535,7 +2444,7 @@ if (vp == NULL) { dr->dr_status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_MKDIR_END, - "rfs_mkdir_end:(%S)", "stale"); + "rfs_mkdir_end:(%S)", "stale"); return; } @@ -2543,7 +2452,7 @@ VN_RELE(vp); dr->dr_status = NFSERR_ROFS; TRACE_1(TR_FAC_NFS, TR_RFS_MKDIR_END, - "rfs_mkdir_end:(%S)", "rofs"); + "rfs_mkdir_end:(%S)", "rofs"); return; } @@ -2552,7 +2461,7 @@ VN_RELE(vp); dr->dr_status = puterrno(error); TRACE_1(TR_FAC_NFS, TR_RFS_MKDIR_END, - "rfs_mkdir_end:(%S)", "sattr"); + "rfs_mkdir_end:(%S)", "sattr"); return; } @@ -2560,18 +2469,16 @@ VN_RELE(vp); dr->dr_status = NFSERR_INVAL; TRACE_1(TR_FAC_NFS, TR_RFS_MKDIR_END, - "rfs_mkdir_end:(%S)", "no mode"); + "rfs_mkdir_end:(%S)", "no mode"); return; } va.va_type = VDIR; va.va_mask |= AT_TYPE; - TRACE_0(TR_FAC_NFS, TR_VOP_MKDIR_START, - "vop_mkdir_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_MKDIR_START, "vop_mkdir_start:"); error = VOP_MKDIR(vp, name, &va, &dvp, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_MKDIR_END, - "vop_mkdir_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_MKDIR_END, "vop_mkdir_end:"); if (!error) { /* @@ -2579,11 +2486,9 @@ * be returned to the client. */ va.va_mask = AT_ALL; /* We want everything */ - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, - "vop_getattr_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_START, "vop_getattr_start:"); error = VOP_GETATTR(dvp, &va, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, - "vop_getattr_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_GETATTR_END, "vop_getattr_end:"); /* check for overflows */ if (!error) { acl_perm(vp, exi, &va, cr); @@ -2608,8 +2513,7 @@ dr->dr_status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_MKDIR_END, - "rfs_mkdir_end:(%S)", "done"); + TRACE_1(TR_FAC_NFS, TR_RFS_MKDIR_END, "rfs_mkdir_end:(%S)", "done"); } void * rfs_mkdir_getfh(struct nfscreatargs *args) @@ -2628,8 +2532,7 @@ int error; vnode_t *vp; - TRACE_0(TR_FAC_NFS, TR_RFS_RMDIR_START, - "rfs_rmdir_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_RMDIR_START, "rfs_rmdir_start:"); /* * Disallow NULL paths @@ -2637,7 +2540,7 @@ if (da->da_name == NULL || *da->da_name == '\0') { *status = NFSERR_ACCES; TRACE_1(TR_FAC_NFS, TR_RFS_RMDIR_END, - "rfs_rmdir_end:(%S)", "access"); + "rfs_rmdir_end:(%S)", "access"); return; } @@ -2645,7 +2548,7 @@ if (vp == NULL) { *status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_RMDIR_END, - "rfs_rmdir_end:(%S)", "stale"); + "rfs_rmdir_end:(%S)", "stale"); return; } @@ -2653,7 +2556,7 @@ VN_RELE(vp); *status = NFSERR_ROFS; TRACE_1(TR_FAC_NFS, TR_RFS_RMDIR_END, - "rfs_rmdir_end:(%S)", "rofs"); + "rfs_rmdir_end:(%S)", "rofs"); return; } @@ -2666,11 +2569,9 @@ * supplying a vnode known to exist and illegal to * remove. */ - TRACE_0(TR_FAC_NFS, TR_VOP_RMDIR_START, - "vop_rmdir_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RMDIR_START, "vop_rmdir_start:"); error = VOP_RMDIR(vp, da->da_name, rootdir, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_RMDIR_END, - "vop_rmdir_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RMDIR_END, "vop_rmdir_end:"); /* * Force modified data and metadata out to stable storage. @@ -2690,8 +2591,7 @@ else *status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_RMDIR_END, - "rfs_rmdir_end:(%S)", "done"); + TRACE_1(TR_FAC_NFS, TR_RFS_RMDIR_END, "rfs_rmdir_end:(%S)", "done"); } void * rfs_rmdir_getfh(struct nfsdiropargs *da) @@ -2710,15 +2610,14 @@ struct uio uio; vnode_t *vp; - TRACE_0(TR_FAC_NFS, TR_RFS_READDIR_START, - "rfs_readdir_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_READDIR_START, "rfs_readdir_start:"); vp = nfs_fhtovp(&rda->rda_fh, exi); if (vp == NULL) { rd->rd_entries = NULL; rd->rd_status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_READDIR_END, - "rfs_readdir_end:(%S)", "stale"); + "rfs_readdir_end:(%S)", "stale"); return; } @@ -2727,21 +2626,17 @@ rd->rd_entries = NULL; rd->rd_status = NFSERR_NOTDIR; TRACE_1(TR_FAC_NFS, TR_RFS_READDIR_END, - "rfs_readdir_end:(%S)", "notdir"); + "rfs_readdir_end:(%S)", "notdir"); return; } - TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_START, - "vop_rwlock_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_START, "vop_rwlock_start:"); (void) VOP_RWLOCK(vp, V_WRITELOCK_FALSE, NULL); - TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_END, - "vop_rwlock_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWLOCK_END, "vop_rwlock_end:"); - TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_START, - "vop_access_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_START, "vop_access_start:"); error = VOP_ACCESS(vp, VREAD, 0, cr); - TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_END, - "vop_access_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_ACCESS_END, "vop_access_end:"); if (error) { rd->rd_entries = NULL; goto bad; @@ -2777,11 +2672,9 @@ /* * read directory */ - TRACE_0(TR_FAC_NFS, TR_VOP_READDIR_START, - "vop_readdir_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_READDIR_START, "vop_readdir_start:"); error = VOP_READDIR(vp, &uio, cr, &iseof); - TRACE_0(TR_FAC_NFS, TR_VOP_READDIR_END, - "vop_readdir_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_READDIR_END, "vop_readdir_end:"); /* * Clean up @@ -2801,11 +2694,9 @@ } bad: - TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_START, - "vop_rwunlock_start:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_START, "vop_rwunlock_start:"); VOP_RWUNLOCK(vp, V_WRITELOCK_FALSE, NULL); - TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, - "vop_rwunlock_end:"); + TRACE_0(TR_FAC_NFS, TR_VOP_RWUNLOCK_END, "vop_rwunlock_end:"); #if 0 /* notyet */ /* @@ -2823,8 +2714,7 @@ rd->rd_status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_READDIR_END, - "rfs_readdir_end:(%S)", "done"); + TRACE_1(TR_FAC_NFS, TR_RFS_READDIR_END, "rfs_readdir_end:(%S)", "done"); } void * rfs_readdir_getfh(struct nfsrddirargs *rda) @@ -2847,14 +2737,13 @@ struct statvfs64 sb; vnode_t *vp; - TRACE_0(TR_FAC_NFS, TR_RFS_STATFS_START, - "rfs_statfs_start:"); + TRACE_0(TR_FAC_NFS, TR_RFS_STATFS_START, "rfs_statfs_start:"); vp = nfs_fhtovp(fh, exi); if (vp == NULL) { fs->fs_status = NFSERR_STALE; TRACE_1(TR_FAC_NFS, TR_RFS_STATFS_END, - "rfs_statfs_end:(%S)", "stale"); + "rfs_statfs_end:(%S)", "stale"); return; } @@ -2872,8 +2761,7 @@ fs->fs_status = puterrno(error); - TRACE_1(TR_FAC_NFS, TR_RFS_STATFS_END, - "rfs_statfs_end:(%S)", "done"); + TRACE_1(TR_FAC_NFS, TR_RFS_STATFS_END, "rfs_statfs_end:(%S)", "done"); } void * rfs_statfs_getfh(fhandle_t *fh) diff -r 09764a26229e -r e67c98912955 usr/src/uts/common/fs/vnode.c --- a/usr/src/uts/common/fs/vnode.c Fri Sep 14 10:25:36 2007 -0700 +++ b/usr/src/uts/common/fs/vnode.c Fri Sep 14 11:24:08 2007 -0700 @@ -103,6 +103,39 @@ int vopstats_enabled = 1; /* + * forward declarations for internal vnode specific data (vsd) + */ +static void *vsd_realloc(void *, size_t, size_t); + +/* + * VSD -- VNODE SPECIFIC DATA + * The v_data pointer is typically used by a file system to store a + * pointer to the file system's private node (e.g. ufs inode, nfs rnode). + * However, there are times when additional project private data needs + * to be stored separately from the data (node) pointed to by v_data. + * This additional data could be stored by the file system itself or + * by a completely different kernel entity. VSD provides a way for + * callers to obtain a key and store a pointer to private data associated + * with a vnode. + * + * Callers are responsible for protecting the vsd by holding v_lock + * for calls to vsd_set() and vsd_get(). + */ + +/* + * vsd_lock protects: + * vsd_nkeys - creation and deletion of vsd keys + * vsd_list - insertion and deletion of vsd_node in the vsd_list + * vsd_destructor - adding and removing destructors to the list + */ +static kmutex_t vsd_lock; +static uint_t vsd_nkeys; /* size of destructor array */ +/* list of vsd_node's */ +static list_t *vsd_list = NULL; +/* per-key destructor funcs */ +static void (**vsd_destructor)(void *); + +/* * The following is the common set of actions needed to update the * vopstats structure from a vnode op. Both VOPSTATS_UPDATE() and * VOPSTATS_UPDATE_IO() do almost the same thing, except for the @@ -859,8 +892,7 @@ if (error = vn_createat(pnamep, seg, &vattr, excl, mode, &vp, crwhy, - (filemode & ~(FTRUNC|FEXCL)), - umask, startvp)) + (filemode & ~(FTRUNC|FEXCL)), umask, startvp)) return (error); } else { /* @@ -2027,6 +2059,7 @@ vp->v_femhead = NULL; /* Must be done before vn_reinit() */ vp->v_path = NULL; vp->v_mpssdata = NULL; + vp->v_vsd = NULL; vp->v_fopdata = NULL; return (0); @@ -2099,6 +2132,7 @@ free_fopdata(vp); } vp->v_mpssdata = NULL; + vsd_free(vp); } /* @@ -2184,6 +2218,7 @@ free_fopdata(vp); } vp->v_mpssdata = NULL; + vsd_free(vp); kmem_cache_free(vn_cache, vp); } @@ -3647,3 +3682,262 @@ VOPSTATS_UPDATE(vp, vnevent); return (err); } + +/* + * Default destructor + * Needed because NULL destructor means that the key is unused + */ +/* ARGSUSED */ +void +vsd_defaultdestructor(void *value) +{} + +/* + * Create a key (index into per vnode array) + * Locks out vsd_create, vsd_destroy, and vsd_free + * May allocate memory with lock held + */ +void +vsd_create(uint_t *keyp, void (*destructor)(void *)) +{ + int i; + uint_t nkeys; + + /* + * if key is allocated, do nothing + */ + mutex_enter(&vsd_lock); + if (*keyp) { + mutex_exit(&vsd_lock); + return; + } + /* + * find an unused key + */ + if (destructor == NULL) + destructor = vsd_defaultdestructor; + + for (i = 0; i < vsd_nkeys; ++i) + if (vsd_destructor[i] == NULL) + break; + + /* + * if no unused keys, increase the size of the destructor array + */ + if (i == vsd_nkeys) { + if ((nkeys = (vsd_nkeys << 1)) == 0) + nkeys = 1; + vsd_destructor = + (void (**)(void *))vsd_realloc((void *)vsd_destructor, + (size_t)(vsd_nkeys * sizeof (void (*)(void *))), + (size_t)(nkeys * sizeof (void (*)(void *)))); + vsd_nkeys = nkeys; + } + + /* + * allocate the next available unused key + */ + vsd_destructor[i] = destructor; + *keyp = i + 1; + + /* create vsd_list, if it doesn't exist */ + if (vsd_list == NULL) { + vsd_list = kmem_alloc(sizeof (list_t), KM_SLEEP); + list_create(vsd_list, sizeof (struct vsd_node), + offsetof(struct vsd_node, vs_nodes)); + } + + mutex_exit(&vsd_lock); +} + +/* + * Destroy a key + * + * Assumes that the caller is preventing vsd_set and vsd_get + * Locks out vsd_create, vsd_destroy, and vsd_free + * May free memory with lock held + */ +void +vsd_destroy(uint_t *keyp) +{ + uint_t key; + struct vsd_node *vsd; + + /* + * protect the key namespace and our destructor lists + */ + mutex_enter(&vsd_lock); + key = *keyp; + *keyp = 0; + + ASSERT(key <= vsd_nkeys); + + /* + * if the key is valid + */ + if (key != 0) { + uint_t k = key - 1; + /* + * for every vnode with VSD, call key's destructor + */ + for (vsd = list_head(vsd_list); vsd != NULL; + vsd = list_next(vsd_list, vsd)) { + /* + * no VSD for key in this vnode + */ + if (key > vsd->vs_nkeys) + continue; + /* + * call destructor for key + */ + if (vsd->vs_value[k] && vsd_destructor[k]) + (*vsd_destructor[k])(vsd->vs_value[k]); + /* + * reset value for key + */ + vsd->vs_value[k] = NULL; + } + /* + * actually free the key (NULL destructor == unused) + */ + vsd_destructor[k] = NULL; + } + + mutex_exit(&vsd_lock); +} + +/* + * Quickly return the per vnode value that was stored with the specified key + * Assumes the caller is protecting key from vsd_create and vsd_destroy + * Assumes the caller is holding v_lock to protect the vsd. + */ +void * +vsd_get(vnode_t *vp, uint_t key) +{ + struct vsd_node *vsd; + + /* + * The caller needs to pass a valid vnode. + */ + ASSERT(vp != NULL); + if (vp == NULL) + return (NULL); + + vsd = vp->v_vsd; + + if (key && vsd != NULL && key <= vsd->vs_nkeys) + return (vsd->vs_value[key - 1]); + return (NULL); +} + +/* + * Set a per vnode value indexed with the specified key + * Assumes the caller is holding v_lock to protect the vsd. + */ +int +vsd_set(vnode_t *vp, uint_t key, void *value) +{ + struct vsd_node *vsd = vp->v_vsd; + + if (key == 0) + return (EINVAL); + if (vsd == NULL) + vsd = vp->v_vsd = kmem_zalloc(sizeof (*vsd), KM_SLEEP); + + /* + * If the vsd was just allocated, vs_nkeys will be 0, so the following + * code won't happen and we will continue down and allocate space for + * the vs_value array. + * If the caller is replacing one value with another, then it is up + * to the caller to free/rele/destroy the previous value (if needed). + */ + if (key <= vsd->vs_nkeys) { + vsd->vs_value[key - 1] = value; + return (0); + } + + ASSERT(key <= vsd_nkeys); + + if (vsd->vs_nkeys == 0) { + mutex_enter(&vsd_lock); /* lock out vsd_destroy() */ + /* + * Link onto list of all VSD nodes. + */ + list_insert_head(vsd_list, vsd); + mutex_exit(&vsd_lock); + } + + /* + * Allocate vnode local storage and set the value for key + */ + vsd->vs_value = vsd_realloc(vsd->vs_value, + vsd->vs_nkeys * sizeof (void *), + key * sizeof (void *)); + vsd->vs_nkeys = key; + vsd->vs_value[key - 1] = value; + + return (0); +} + +/* + * Called from vn_free() to run the destructor function for each vsd + * Locks out vsd_create and vsd_destroy + * Assumes that the destructor *DOES NOT* use vsd + */ +void +vsd_free(vnode_t *vp) +{ + int i; + struct vsd_node *vsd = vp->v_vsd; + + if (vsd == NULL) + return; + + if (vsd->vs_nkeys == 0) { + kmem_free(vsd, sizeof (*vsd)); + vp->v_vsd = NULL; + return; + } + + /* + * lock out vsd_create and vsd_destroy, call + * the destructor, and mark the value as destroyed. + */ + mutex_enter(&vsd_lock); + + for (i = 0; i < vsd->vs_nkeys; i++) { + if (vsd->vs_value[i] && vsd_destructor[i]) + (*vsd_destructor[i])(vsd->vs_value[i]); + vsd->vs_value[i] = NULL; + } + + /* + * remove from linked list of VSD nodes + */ + list_remove(vsd_list, vsd); + + mutex_exit(&vsd_lock); + + /* + * free up the VSD + */ + kmem_free(vsd->vs_value, vsd->vs_nkeys * sizeof (void *)); + kmem_free(vsd, sizeof (struct vsd_node)); + vp->v_vsd = NULL; +} + +/* + * realloc + */ +static void * +vsd_realloc(void *old, size_t osize, size_t nsize) +{ + void *new; + + new = kmem_zalloc(nsize, KM_SLEEP); + if (old) { + bcopy(old, new, osize); + kmem_free(old, osize); + } + return (new); +} diff -r 09764a26229e -r e67c98912955 usr/src/uts/common/sys/vnode.h --- a/usr/src/uts/common/sys/vnode.h Fri Sep 14 10:25:36 2007 -0700 +++ b/usr/src/uts/common/sys/vnode.h Fri Sep 14 11:24:08 2007 -0700 @@ -51,6 +51,7 @@ #include #include #include +#include #ifdef _KERNEL #include #endif /* _KERNEL */ @@ -169,6 +170,16 @@ } vtype_t; /* + * VSD - Vnode Specific Data + * Used to associate additional private data with a vnode. + */ +struct vsd_node { + list_node_t vs_nodes; /* list of all VSD nodes */ + uint_t vs_nkeys; /* entries in value array */ + void **vs_value; /* array of value/key */ +}; + +/* * Many of the fields in the vnode are read-only once they are initialized * at vnode creation time. Other fields are protected by locks. * @@ -182,6 +193,7 @@ * v_count * v_shrlocks * v_path + * v_vsd * * A special lock (implemented by vn_vfswlock in vnode.c) protects: * v_vfsmountedhere @@ -249,6 +261,7 @@ struct vnode *v_msprev; /* list of vnodes on an mset */ krwlock_t v_mslock; /* protects v_mset */ void *v_fopdata; /* list of file ops event watches */ + struct vsd_node *v_vsd; /* vnode specific data */ } vnode_t; #define IS_DEVVP(vp) \ @@ -924,6 +937,13 @@ void vnevent_mountedover(vnode_t *); int vnevent_support(vnode_t *); +/* Vnode specific data */ +void vsd_create(uint_t *, void (*)(void *)); +void vsd_destroy(uint_t *); +void *vsd_get(vnode_t *, uint_t); +int vsd_set(vnode_t *, uint_t, void *); +void vsd_free(vnode_t *); + /* Context identification */ u_longlong_t fs_new_caller_id();