Print this page
Send zone's rootvp to untraverse()

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/nfs/nfs_srv.c
          +++ new/usr/src/uts/common/fs/nfs/nfs_srv.c
↓ open down ↓ 408 lines elided ↑ open up ↑
 409  409  /*
 410  410   * Given mounted "dvp" and "exi", go upper mountpoint
 411  411   * with dvp/exi correction
 412  412   * Return 0 in success
 413  413   */
 414  414  int
 415  415  rfs_climb_crossmnt(vnode_t **dvpp, struct exportinfo **exip, cred_t *cr)
 416  416  {
 417  417          struct exportinfo *exi;
 418  418          vnode_t *dvp = *dvpp;
      419 +        vnode_t *zone_rootvp;
 419  420  
 420      -        ASSERT3U((*exip)->exi_zoneid, ==, curzone->zone_id);
 421      -        ASSERT((dvp->v_flag & VROOT) || VN_IS_CURZONEROOT(dvp));
      421 +        zone_rootvp = (*exip)->exi_ne->exi_root->exi_vp;
      422 +        ASSERT((dvp->v_flag & VROOT) || VN_CMP(zone_rootvp, dvp));
 422  423  
 423  424          VN_HOLD(dvp);
 424      -        dvp = untraverse(dvp);
      425 +        dvp = untraverse(dvp, zone_rootvp);
 425  426          exi = nfs_vptoexi(NULL, dvp, cr, NULL, NULL, FALSE);
 426  427          if (exi == NULL) {
 427  428                  VN_RELE(dvp);
 428  429                  return (-1);
 429  430          }
 430  431  
 431      -        ASSERT3U(exi->exi_zoneid, ==, curzone->zone_id);
      432 +        ASSERT3U(exi->exi_zoneid, ==, (*exip)->exi_zoneid);
 432  433          exi_rele(*exip);
 433  434          *exip = exi;
 434  435          VN_RELE(*dvpp);
 435  436          *dvpp = dvp;
 436  437  
 437  438          return (0);
 438  439  }
 439  440  /*
 440  441   * Directory lookup.
 441  442   * Returns an fhandle and file attributes for file name in a directory.
↓ open down ↓ 2723 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX