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

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 ↓ 409 lines elided ↑ open up ↑
 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  419  
 420      -        ASSERT3P((*exip)->exi_zone, ==, curzone);
      420 +        ASSERT3U((*exip)->exi_zoneid, ==, curzone->zone_id);
 421  421          ASSERT((dvp->v_flag & VROOT) || VN_IS_CURZONEROOT(dvp));
 422  422  
 423  423          VN_HOLD(dvp);
 424  424          dvp = untraverse(dvp);
 425  425          exi = nfs_vptoexi(NULL, dvp, cr, NULL, NULL, FALSE);
 426  426          if (exi == NULL) {
 427  427                  VN_RELE(dvp);
 428  428                  return (-1);
 429  429          }
 430  430  
 431      -        ASSERT3P(exi->exi_zone, ==, curzone);
      431 +        ASSERT3U(exi->exi_zoneid, ==, curzone->zone_id);
 432  432          exi_rele(*exip);
 433  433          *exip = exi;
 434  434          VN_RELE(*dvpp);
 435  435          *dvpp = dvp;
 436  436  
 437  437          return (0);
 438  438  }
 439  439  /*
 440  440   * Directory lookup.
 441  441   * Returns an fhandle and file attributes for file name in a directory.
↓ open down ↓ 40 lines elided ↑ open up ↑
 482  482                  VN_HOLD(dvp);
 483  483          } else {
 484  484                  dvp = nfs_fhtovp(fhp, exi);
 485  485                  if (dvp == NULL) {
 486  486                          dr->dr_status = NFSERR_STALE;
 487  487                          return;
 488  488                  }
 489  489          }
 490  490  
 491  491          exi_hold(exi);
 492      -        ASSERT3P(exi->exi_zone, ==, curzone);
      492 +        ASSERT3U(exi->exi_zoneid, ==, curzone->zone_id);
 493  493  
 494  494          /*
 495  495           * Not allow lookup beyond root.
 496  496           * If the filehandle matches a filehandle of the exi,
 497  497           * then the ".." refers beyond the root of an exported filesystem.
 498  498           */
 499  499          if (strcmp(da->da_name, "..") == 0 &&
 500  500              EQFID(&exi->exi_fid, (fid_t *)&fhp->fh_len)) {
 501  501                  if ((exi->exi_export.ex_flags & EX_NOHIDE) &&
 502  502                      ((dvp->v_flag & VROOT) || VN_IS_CURZONEROOT(dvp))) {
↓ open down ↓ 2662 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX