Print this page
Send zone's rootvp to untraverse()
*** 414,436 ****
int
rfs_climb_crossmnt(vnode_t **dvpp, struct exportinfo **exip, cred_t *cr)
{
struct exportinfo *exi;
vnode_t *dvp = *dvpp;
! ASSERT3U((*exip)->exi_zoneid, ==, curzone->zone_id);
! ASSERT((dvp->v_flag & VROOT) || VN_IS_CURZONEROOT(dvp));
VN_HOLD(dvp);
! dvp = untraverse(dvp);
exi = nfs_vptoexi(NULL, dvp, cr, NULL, NULL, FALSE);
if (exi == NULL) {
VN_RELE(dvp);
return (-1);
}
! ASSERT3U(exi->exi_zoneid, ==, curzone->zone_id);
exi_rele(*exip);
*exip = exi;
VN_RELE(*dvpp);
*dvpp = dvp;
--- 414,437 ----
int
rfs_climb_crossmnt(vnode_t **dvpp, struct exportinfo **exip, cred_t *cr)
{
struct exportinfo *exi;
vnode_t *dvp = *dvpp;
+ vnode_t *zone_rootvp;
! zone_rootvp = (*exip)->exi_ne->exi_root->exi_vp;
! ASSERT((dvp->v_flag & VROOT) || VN_CMP(zone_rootvp, dvp));
VN_HOLD(dvp);
! dvp = untraverse(dvp, zone_rootvp);
exi = nfs_vptoexi(NULL, dvp, cr, NULL, NULL, FALSE);
if (exi == NULL) {
VN_RELE(dvp);
return (-1);
}
! ASSERT3U(exi->exi_zoneid, ==, (*exip)->exi_zoneid);
exi_rele(*exip);
*exip = exi;
VN_RELE(*dvpp);
*dvpp = dvp;