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>
        
*** 1490,1499 ****
--- 1490,1500 ----
  {
          int error;
          nvlist_t *config, *props = NULL;
          nvlist_t *rootprops = NULL;
          nvlist_t *zplprops = NULL;
+         char *spa_name = zc->zc_name;
  
          if (error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size,
              zc->zc_iflags, &config))
                  return (error);
  
*** 1505,1514 ****
--- 1506,1516 ----
          }
  
          if (props) {
                  nvlist_t *nvl = NULL;
                  uint64_t version = SPA_VERSION;
+                 char *tname;
  
                  (void) nvlist_lookup_uint64(props,
                      zpool_prop_to_name(ZPOOL_PROP_VERSION), &version);
                  if (!SPA_VERSION_IS_SUPPORTED(version)) {
                          error = SET_ERROR(EINVAL);
*** 1527,1546 ****
                  VERIFY(nvlist_alloc(&zplprops, NV_UNIQUE_NAME, KM_SLEEP) == 0);
                  error = zfs_fill_zplprops_root(version, rootprops,
                      zplprops, NULL);
                  if (error != 0)
                          goto pool_props_bad;
          }
  
          error = spa_create(zc->zc_name, config, props, zplprops);
  
          /*
           * Set the remaining root properties
           */
!         if (!error && (error = zfs_set_prop_nvlist(zc->zc_name,
              ZPROP_SRC_LOCAL, rootprops, NULL)) != 0)
!                 (void) spa_destroy(zc->zc_name);
  
  pool_props_bad:
          nvlist_free(rootprops);
          nvlist_free(zplprops);
          nvlist_free(config);
--- 1529,1552 ----
                  VERIFY(nvlist_alloc(&zplprops, NV_UNIQUE_NAME, KM_SLEEP) == 0);
                  error = zfs_fill_zplprops_root(version, rootprops,
                      zplprops, NULL);
                  if (error != 0)
                          goto pool_props_bad;
+ 
+                 if (nvlist_lookup_string(props,
+                     zpool_prop_to_name(ZPOOL_PROP_TNAME), &tname) == 0)
+                         spa_name = tname;
          }
  
          error = spa_create(zc->zc_name, config, props, zplprops);
  
          /*
           * Set the remaining root properties
           */
!         if (!error && (error = zfs_set_prop_nvlist(spa_name,
              ZPROP_SRC_LOCAL, rootprops, NULL)) != 0)
!                 (void) spa_destroy(spa_name);
  
  pool_props_bad:
          nvlist_free(rootprops);
          nvlist_free(zplprops);
          nvlist_free(config);