Author: avg
Date: Fri Jun 22 09:41:13 2018
New Revision: 335546
URL: https://svnweb.freebsd.org/changeset/base/335546

Log:
  MFC r333630: Fix 'zpool create -t <tempname>'
  
  Creating a pool with a temporary name fails when we also specify custom
  dataset properties: this is because we mistakenly call
  zfs_set_prop_nvlist() on the "real" pool name which, as expected,
  cannot be found because the SPA is present in the namespace with the
  temporary name.

Modified:
  stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
==============================================================================
--- stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c        
Fri Jun 22 09:37:26 2018        (r335545)
+++ stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c        
Fri Jun 22 09:41:13 2018        (r335546)
@@ -1529,6 +1529,7 @@ zfs_ioc_pool_create(zfs_cmd_t *zc)
        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))
@@ -1544,6 +1545,7 @@ zfs_ioc_pool_create(zfs_cmd_t *zc)
        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);
@@ -1566,6 +1568,10 @@ zfs_ioc_pool_create(zfs_cmd_t *zc)
                    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);
@@ -1573,9 +1579,9 @@ zfs_ioc_pool_create(zfs_cmd_t *zc)
        /*
         * 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);
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to