Print this page
Send nfs_export_t to untraverse()


 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)