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);
          }