Print this page
Send zone's rootvp to untraverse()
*** 971,999 ****
/*
* If dotdotting, then need to check whether it's above the
* root of a filesystem, or above an export point.
*/
if (dotdot) {
! ASSERT3U(exi->exi_zoneid, ==, curzone->zone_id);
/*
* If dotdotting at the root of a filesystem, then
* need to traverse back to the mounted-on filesystem
* and do the dotdot lookup there.
*/
! if ((dvp->v_flag & VROOT) || VN_IS_CURZONEROOT(dvp)) {
/*
* If at the system root, then can
* go up no further.
*/
! if (VN_CMP(dvp, ZONE_ROOTVP()))
return (puterrno4(ENOENT));
/*
* Traverse back to the mounted-on filesystem
*/
! dvp = untraverse(dvp);
/*
* Set the different_export flag so we remember
* to pick up a new exportinfo entry for
* this new filesystem.
--- 971,1001 ----
/*
* If dotdotting, then need to check whether it's above the
* root of a filesystem, or above an export point.
*/
if (dotdot) {
! vnode_t *zone_rootvp = ne->exi_root->exi_vp;
!
! ASSERT3U(exi->exi_zoneid, ==, ne->exi_root->exi_zoneid);
/*
* If dotdotting at the root of a filesystem, then
* need to traverse back to the mounted-on filesystem
* and do the dotdot lookup there.
*/
! if ((dvp->v_flag & VROOT) || VN_CMP(dvp, zone_rootvp)) {
/*
* If at the system root, then can
* go up no further.
*/
! if (VN_CMP(dvp, zone_rootvp))
return (puterrno4(ENOENT));
/*
* Traverse back to the mounted-on filesystem
*/
! dvp = untraverse(dvp, zone_rootvp);
/*
* Set the different_export flag so we remember
* to pick up a new exportinfo entry for
* this new filesystem.
*** 2717,2746 ****
* If dotdotting, then need to check whether it's
* above the root of a filesystem, or above an
* export point.
*/
if (dotdot) {
ASSERT(cs->exi != NULL);
! ASSERT3U(cs->exi->exi_zoneid, ==, curzone->zone_id);
/*
* If dotdotting at the root of a filesystem, then
* need to traverse back to the mounted-on filesystem
* and do the dotdot lookup there.
*/
! if ((cs->vp->v_flag & VROOT) || VN_IS_CURZONEROOT(cs->vp)) {
/*
* If at the system root, then can
* go up no further.
*/
! if (VN_CMP(cs->vp, ZONE_ROOTVP()))
return (puterrno4(ENOENT));
/*
* Traverse back to the mounted-on filesystem
*/
! cs->vp = untraverse(cs->vp);
/*
* Set the different_export flag so we remember
* to pick up a new exportinfo entry for
* this new filesystem.
--- 2719,2750 ----
* If dotdotting, then need to check whether it's
* above the root of a filesystem, or above an
* export point.
*/
if (dotdot) {
+ vnode_t *zone_rootvp;
+
ASSERT(cs->exi != NULL);
! zone_rootvp = cs->exi->exi_ne->exi_root->exi_vp;
/*
* If dotdotting at the root of a filesystem, then
* need to traverse back to the mounted-on filesystem
* and do the dotdot lookup there.
*/
! if ((cs->vp->v_flag & VROOT) || VN_CMP(cs->vp, zone_rootvp)) {
/*
* If at the system root, then can
* go up no further.
*/
! if (VN_CMP(cs->vp, zone_rootvp))
return (puterrno4(ENOENT));
/*
* Traverse back to the mounted-on filesystem
*/
! cs->vp = untraverse(cs->vp, zone_rootvp);
/*
* Set the different_export flag so we remember
* to pick up a new exportinfo entry for
* this new filesystem.