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,10 +1490,11 @@
 {
         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,10 +1506,11 @@
         }
 
         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,20 +1529,24 @@
                 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(zc->zc_name,
+        if (!error && (error = zfs_set_prop_nvlist(spa_name,
             ZPROP_SRC_LOCAL, rootprops, NULL)) != 0)
-                (void) spa_destroy(zc->zc_name);
+                (void) spa_destroy(spa_name);
 
 pool_props_bad:
         nvlist_free(rootprops);
         nvlist_free(zplprops);
         nvlist_free(config);