Print this page
Revert exi_zone to exi_zoneid, and install exi_ne backpointer

*** 163,175 **** exi->exi_fid = *fid; exi->exi_vp = vp; VN_HOLD(exi->exi_vp); exi->exi_visible = vis_head; exi->exi_count = 1; ! /* Caller will set exi_zone... */ ! /* XXX KEBE SAYS Uncomment me or fix in the caller */ ! /* exi->exi_zoneid = ne->ne_globals->nfs_zoneid; */ exi->exi_volatile_dev = (vfssw[vp->v_vfsp->vfs_fstype].vsw_flag & VSW_VOLATILEDEV) ? 1 : 0; mutex_init(&exi->exi_lock, NULL, MUTEX_DEFAULT, NULL); /* --- 163,173 ---- exi->exi_fid = *fid; exi->exi_vp = vp; VN_HOLD(exi->exi_vp); exi->exi_visible = vis_head; exi->exi_count = 1; ! exi->exi_zoneid = ne->ne_globals->nfs_zoneid; exi->exi_volatile_dev = (vfssw[vp->v_vfsp->vfs_fstype].vsw_flag & VSW_VOLATILEDEV) ? 1 : 0; mutex_init(&exi->exi_lock, NULL, MUTEX_DEFAULT, NULL); /*
*** 640,653 **** struct exp_visible *visp; struct exp_visible *vis_head = NULL; struct vattr va; treenode_t *tree_head = NULL; timespec_t now; ! nfs_export_t *ne = nfs_get_export(); ASSERT(RW_WRITE_HELD(&ne->exported_lock)); - ASSERT3P(curzone, ==, exip->exi_zone); gethrestime(&now); vp = exip->exi_vp; VN_HOLD(vp); --- 638,652 ---- struct exp_visible *visp; struct exp_visible *vis_head = NULL; struct vattr va; treenode_t *tree_head = NULL; timespec_t now; ! nfs_export_t *ne; + ne = exip->exi_ne; + ASSERT3P(ne, ==, nfs_get_export()); /* curzone reality check */ ASSERT(RW_WRITE_HELD(&ne->exported_lock)); gethrestime(&now); vp = exip->exi_vp; VN_HOLD(vp);
*** 659,674 **** fid.fid_len = MAXFIDSZ; error = vop_fid_pseudo(vp, &fid); if (error) break; ASSERT3U(exip->exi_zoneid, ==, curzone->zone_id); /* * The root of the file system, or the zone's root for * in-zone NFS service needs special handling */ ! if (vp->v_flag & VROOT || VN_IS_CURZONEROOT(vp)) { if (!exportdir) { struct exportinfo *exi; /* * Check if this VROOT dir is already exported. --- 658,674 ---- fid.fid_len = MAXFIDSZ; error = vop_fid_pseudo(vp, &fid); if (error) break; + /* XXX KEBE ASKS DO WE NEED THIS?!? */ ASSERT3U(exip->exi_zoneid, ==, curzone->zone_id); /* * The root of the file system, or the zone's root for * in-zone NFS service needs special handling */ ! if (vp->v_flag & VROOT || vp == EXI_TO_ZONEROOTVP(exip)) { if (!exportdir) { struct exportinfo *exi; /* * Check if this VROOT dir is already exported.
*** 696,707 **** * this as a pseudo export so that an NFS v4 * client can do lookups in it. */ new_exi = pseudo_exportfs(ne, vp, &fid, vis_head, NULL); - /* XXX KEBE SAYS NUKE ME */ - new_exi->exi_zone = exip->exi_zone; vis_head = NULL; } if (VN_IS_CURZONEROOT(vp)) { /* at system root */ --- 696,705 ----
*** 840,850 **** { treenode_t *tnode, *old_nd; treenode_t *connect_point = NULL; ASSERT(RW_WRITE_HELD(&ne->exported_lock)); ! ASSERT(curzone == exip->exi_zone || curzone == global_zone); /* * exi_tree can be null for the zone root * which means we're already at the "top" * and there's nothing more to "climb". --- 838,849 ---- { treenode_t *tnode, *old_nd; treenode_t *connect_point = NULL; ASSERT(RW_WRITE_HELD(&ne->exported_lock)); ! ASSERT(curzone->zone_id == exip->exi_zoneid || ! curzone->zone_id == global_zone->zone_id); /* * exi_tree can be null for the zone root * which means we're already at the "top" * and there's nothing more to "climb".
*** 1003,1013 **** /* * An exported root vnode has a sub-dir shared if it has a visible * list. i.e. if it does not have a visible list, then there is no * node in this filesystem leads to any other shared node. */ ! ASSERT3P(curzone, ==, exi->exi_zone); if (vp_is_exported && ((vp->v_flag & VROOT) || VN_IS_CURZONEROOT(vp))) { return (exi->exi_visible ? 1 : 0); } --- 1002,1012 ---- /* * An exported root vnode has a sub-dir shared if it has a visible * list. i.e. if it does not have a visible list, then there is no * node in this filesystem leads to any other shared node. */ ! ASSERT3P(curzone->zone_id, ==, exi->exi_zoneid); if (vp_is_exported && ((vp->v_flag & VROOT) || VN_IS_CURZONEROOT(vp))) { return (exi->exi_visible ? 1 : 0); }