Print this page
curzone reality check and teardown changes to use the RIGHT zone

@@ -409,10 +409,11 @@
 rfs_climb_crossmnt(vnode_t **dvpp, struct exportinfo **exip, cred_t *cr)
 {
         struct exportinfo *exi;
         vnode_t *dvp = *dvpp;
 
+        ASSERT3P((*exip)->exi_zone, ==, curzone);
         ASSERT((dvp->v_flag & VROOT) || VN_IS_CURZONEROOT(dvp));
 
         VN_HOLD(dvp);
         dvp = untraverse(dvp);
         exi = nfs_vptoexi(NULL, dvp, cr, NULL, NULL, FALSE);

@@ -419,10 +420,11 @@
         if (exi == NULL) {
                 VN_RELE(dvp);
                 return (-1);
         }
 
+        ASSERT3P(exi->exi_zone, ==, curzone);
         exi_rele(*exip);
         *exip = exi;
         VN_RELE(*dvpp);
         *dvpp = dvp;
 

@@ -479,10 +481,11 @@
                         return;
                 }
         }
 
         exi_hold(exi);
+        ASSERT3P(exi->exi_zone, ==, curzone);
 
         /*
          * Not allow lookup beyond root.
          * If the filehandle matches a filehandle of the exi,
          * then the ".." refers beyond the root of an exported filesystem.

@@ -1310,10 +1313,11 @@
         cred_t *savecred;
         int in_crit = 0;
         caller_context_t ct;
         nfs_srv_t *nsrv;
 
+        ASSERT3P(curzone, ==, ((exi == NULL) ? curzone : exi->exi_zone));
         nsrv = zone_getspecific(rfs_zone_key, curzone);
         if (!nsrv->write_async) {
                 rfs_write_sync(wa, ns, exi, req, cr, ro);
                 return;
         }