Print this page
5882 Temporary pool names
Reviewed by: Matt Ahrens <matt@delphix.com>
Reviewed by: Igor Kozhukhov <igor@dilos.org>
Reviewed by: John Kennedy <john.kennedy@delphix.com>
Approved by: Dan McDonald <danmcd@joyent.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/zfs_ioctl.c
          +++ new/usr/src/uts/common/fs/zfs/zfs_ioctl.c
↓ open down ↓ 1484 lines elided ↑ open up ↑
1485 1485          }
1486 1486  }
1487 1487  
1488 1488  static int
1489 1489  zfs_ioc_pool_create(zfs_cmd_t *zc)
1490 1490  {
1491 1491          int error;
1492 1492          nvlist_t *config, *props = NULL;
1493 1493          nvlist_t *rootprops = NULL;
1494 1494          nvlist_t *zplprops = NULL;
     1495 +        char *spa_name = zc->zc_name;
1495 1496  
1496 1497          if (error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size,
1497 1498              zc->zc_iflags, &config))
1498 1499                  return (error);
1499 1500  
1500 1501          if (zc->zc_nvlist_src_size != 0 && (error =
1501 1502              get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size,
1502 1503              zc->zc_iflags, &props))) {
1503 1504                  nvlist_free(config);
1504 1505                  return (error);
1505 1506          }
1506 1507  
1507 1508          if (props) {
1508 1509                  nvlist_t *nvl = NULL;
1509 1510                  uint64_t version = SPA_VERSION;
     1511 +                char *tname;
1510 1512  
1511 1513                  (void) nvlist_lookup_uint64(props,
1512 1514                      zpool_prop_to_name(ZPOOL_PROP_VERSION), &version);
1513 1515                  if (!SPA_VERSION_IS_SUPPORTED(version)) {
1514 1516                          error = SET_ERROR(EINVAL);
1515 1517                          goto pool_props_bad;
1516 1518                  }
1517 1519                  (void) nvlist_lookup_nvlist(props, ZPOOL_ROOTFS_PROPS, &nvl);
1518 1520                  if (nvl) {
1519 1521                          error = nvlist_dup(nvl, &rootprops, KM_SLEEP);
↓ open down ↓ 2 lines elided ↑ open up ↑
1522 1524                                  nvlist_free(props);
1523 1525                                  return (error);
1524 1526                          }
1525 1527                          (void) nvlist_remove_all(props, ZPOOL_ROOTFS_PROPS);
1526 1528                  }
1527 1529                  VERIFY(nvlist_alloc(&zplprops, NV_UNIQUE_NAME, KM_SLEEP) == 0);
1528 1530                  error = zfs_fill_zplprops_root(version, rootprops,
1529 1531                      zplprops, NULL);
1530 1532                  if (error != 0)
1531 1533                          goto pool_props_bad;
     1534 +
     1535 +                if (nvlist_lookup_string(props,
     1536 +                    zpool_prop_to_name(ZPOOL_PROP_TNAME), &tname) == 0)
     1537 +                        spa_name = tname;
1532 1538          }
1533 1539  
1534 1540          error = spa_create(zc->zc_name, config, props, zplprops);
1535 1541  
1536 1542          /*
1537 1543           * Set the remaining root properties
1538 1544           */
1539      -        if (!error && (error = zfs_set_prop_nvlist(zc->zc_name,
     1545 +        if (!error && (error = zfs_set_prop_nvlist(spa_name,
1540 1546              ZPROP_SRC_LOCAL, rootprops, NULL)) != 0)
1541      -                (void) spa_destroy(zc->zc_name);
     1547 +                (void) spa_destroy(spa_name);
1542 1548  
1543 1549  pool_props_bad:
1544 1550          nvlist_free(rootprops);
1545 1551          nvlist_free(zplprops);
1546 1552          nvlist_free(config);
1547 1553          nvlist_free(props);
1548 1554  
1549 1555          return (error);
1550 1556  }
1551 1557  
↓ open down ↓ 5010 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX