974 */
975 if (dotdot) {
976 ASSERT3U(exi->exi_zoneid, ==, curzone->zone_id);
977 /*
978 * If dotdotting at the root of a filesystem, then
979 * need to traverse back to the mounted-on filesystem
980 * and do the dotdot lookup there.
981 */
982 if ((dvp->v_flag & VROOT) || VN_IS_CURZONEROOT(dvp)) {
983
984 /*
985 * If at the system root, then can
986 * go up no further.
987 */
988 if (VN_CMP(dvp, ZONE_ROOTVP()))
989 return (puterrno4(ENOENT));
990
991 /*
992 * Traverse back to the mounted-on filesystem
993 */
994 dvp = untraverse(dvp);
995
996 /*
997 * Set the different_export flag so we remember
998 * to pick up a new exportinfo entry for
999 * this new filesystem.
1000 */
1001 different_export = 1;
1002 } else {
1003
1004 /*
1005 * If dotdotting above an export point then set
1006 * the different_export to get new export info.
1007 */
1008 different_export = nfs_exported(exi, dvp);
1009 }
1010 }
1011
1012 /*
1013 * Get the vnode for the component "nm".
1014 */
2715
2716 /*
2717 * If dotdotting, then need to check whether it's
2718 * above the root of a filesystem, or above an
2719 * export point.
2720 */
2721 if (dotdot) {
2722 ASSERT(cs->exi != NULL);
2723 ASSERT3U(cs->exi->exi_zoneid, ==, curzone->zone_id);
2724 /*
2725 * If dotdotting at the root of a filesystem, then
2726 * need to traverse back to the mounted-on filesystem
2727 * and do the dotdot lookup there.
2728 */
2729 if ((cs->vp->v_flag & VROOT) || VN_IS_CURZONEROOT(cs->vp)) {
2730
2731 /*
2732 * If at the system root, then can
2733 * go up no further.
2734 */
2735 if (VN_CMP(cs->vp, ZONE_ROOTVP()))
2736 return (puterrno4(ENOENT));
2737
2738 /*
2739 * Traverse back to the mounted-on filesystem
2740 */
2741 cs->vp = untraverse(cs->vp);
2742
2743 /*
2744 * Set the different_export flag so we remember
2745 * to pick up a new exportinfo entry for
2746 * this new filesystem.
2747 */
2748 different_export = 1;
2749 } else {
2750
2751 /*
2752 * If dotdotting above an export point then set
2753 * the different_export to get new export info.
2754 */
2755 different_export = nfs_exported(cs->exi, cs->vp);
2756 }
2757 }
2758
2759 error = VOP_LOOKUP(cs->vp, nm, &vp, NULL, 0, NULL, cs->cr,
2760 NULL, NULL, NULL);
2761 if (error)
|
974 */
975 if (dotdot) {
976 ASSERT3U(exi->exi_zoneid, ==, curzone->zone_id);
977 /*
978 * If dotdotting at the root of a filesystem, then
979 * need to traverse back to the mounted-on filesystem
980 * and do the dotdot lookup there.
981 */
982 if ((dvp->v_flag & VROOT) || VN_IS_CURZONEROOT(dvp)) {
983
984 /*
985 * If at the system root, then can
986 * go up no further.
987 */
988 if (VN_CMP(dvp, ZONE_ROOTVP()))
989 return (puterrno4(ENOENT));
990
991 /*
992 * Traverse back to the mounted-on filesystem
993 */
994 dvp = untraverse(ne, dvp);
995
996 /*
997 * Set the different_export flag so we remember
998 * to pick up a new exportinfo entry for
999 * this new filesystem.
1000 */
1001 different_export = 1;
1002 } else {
1003
1004 /*
1005 * If dotdotting above an export point then set
1006 * the different_export to get new export info.
1007 */
1008 different_export = nfs_exported(exi, dvp);
1009 }
1010 }
1011
1012 /*
1013 * Get the vnode for the component "nm".
1014 */
2715
2716 /*
2717 * If dotdotting, then need to check whether it's
2718 * above the root of a filesystem, or above an
2719 * export point.
2720 */
2721 if (dotdot) {
2722 ASSERT(cs->exi != NULL);
2723 ASSERT3U(cs->exi->exi_zoneid, ==, curzone->zone_id);
2724 /*
2725 * If dotdotting at the root of a filesystem, then
2726 * need to traverse back to the mounted-on filesystem
2727 * and do the dotdot lookup there.
2728 */
2729 if ((cs->vp->v_flag & VROOT) || VN_IS_CURZONEROOT(cs->vp)) {
2730
2731 /*
2732 * If at the system root, then can
2733 * go up no further.
2734 */
2735 if (VN_IS_CURZONEROOT(cs->vp))
2736 return (puterrno4(ENOENT));
2737
2738 /*
2739 * Traverse back to the mounted-on filesystem
2740 */
2741 cs->vp = untraverse(cs->exi->exi_ne, cs->vp);
2742
2743 /*
2744 * Set the different_export flag so we remember
2745 * to pick up a new exportinfo entry for
2746 * this new filesystem.
2747 */
2748 different_export = 1;
2749 } else {
2750
2751 /*
2752 * If dotdotting above an export point then set
2753 * the different_export to get new export info.
2754 */
2755 different_export = nfs_exported(cs->exi, cs->vp);
2756 }
2757 }
2758
2759 error = VOP_LOOKUP(cs->vp, nm, &vp, NULL, 0, NULL, cs->cr,
2760 NULL, NULL, NULL);
2761 if (error)
|