diff options
-rw-r--r-- | module/zfs/zfs_ioctl.c | 10 | ||||
-rw-r--r-- | tests/runfiles/linux.run | 2 | ||||
-rw-r--r-- | tests/zfs-tests/tests/functional/cli_root/zpool_create/Makefile.am | 3 | ||||
-rwxr-xr-x | tests/zfs-tests/tests/functional/cli_root/zpool_create/zpool_create_tempname.ksh | 68 |
4 files changed, 79 insertions, 4 deletions
diff --git a/module/zfs/zfs_ioctl.c b/module/zfs/zfs_ioctl.c index b1ac149b3..eacbf930d 100644 --- a/module/zfs/zfs_ioctl.c +++ b/module/zfs/zfs_ioctl.c @@ -1519,6 +1519,7 @@ zfs_ioc_pool_create(zfs_cmd_t *zc) nvlist_t *rootprops = NULL; nvlist_t *zplprops = NULL; dsl_crypto_params_t *dcp = NULL; + char *spa_name = zc->zc_name; if ((error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size, zc->zc_iflags, &config))) @@ -1535,6 +1536,7 @@ zfs_ioc_pool_create(zfs_cmd_t *zc) nvlist_t *nvl = NULL; nvlist_t *hidden_args = NULL; uint64_t version = SPA_VERSION; + char *tname; (void) nvlist_lookup_uint64(props, zpool_prop_to_name(ZPOOL_PROP_VERSION), &version); @@ -1569,6 +1571,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, dcp); @@ -1576,9 +1582,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); diff --git a/tests/runfiles/linux.run b/tests/runfiles/linux.run index 1d0b2ef91..eecac8f6e 100644 --- a/tests/runfiles/linux.run +++ b/tests/runfiles/linux.run @@ -317,7 +317,7 @@ tests = ['zpool_create_001_pos', 'zpool_create_002_pos', 'zpool_create_features_001_pos', 'zpool_create_features_002_pos', 'zpool_create_features_003_pos', 'zpool_create_features_004_neg', 'zpool_create_features_005_pos', - 'create-o_ashift'] + 'create-o_ashift', 'zpool_create_tempname'] tags = ['functional', 'cli_root', 'zpool_create'] [tests/functional/cli_root/zpool_destroy] diff --git a/tests/zfs-tests/tests/functional/cli_root/zpool_create/Makefile.am b/tests/zfs-tests/tests/functional/cli_root/zpool_create/Makefile.am index 89b36fa99..3c595935a 100644 --- a/tests/zfs-tests/tests/functional/cli_root/zpool_create/Makefile.am +++ b/tests/zfs-tests/tests/functional/cli_root/zpool_create/Makefile.am @@ -32,7 +32,8 @@ dist_pkgdata_SCRIPTS = \ zpool_create_features_003_pos.ksh \ zpool_create_features_004_neg.ksh \ zpool_create_features_005_pos.ksh \ - create-o_ashift.ksh + create-o_ashift.ksh \ + zpool_create_tempname.ksh dist_pkgdata_DATA = \ zpool_create.cfg \ diff --git a/tests/zfs-tests/tests/functional/cli_root/zpool_create/zpool_create_tempname.ksh b/tests/zfs-tests/tests/functional/cli_root/zpool_create/zpool_create_tempname.ksh new file mode 100755 index 000000000..1e6fcea03 --- /dev/null +++ b/tests/zfs-tests/tests/functional/cli_root/zpool_create/zpool_create_tempname.ksh @@ -0,0 +1,68 @@ +#!/bin/ksh -p +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# Copyright 2018, loli10K <[email protected]>. All rights reserved. +# + +. $STF_SUITE/include/libtest.shlib + +# +# DESCRIPTION: +# 'zpool create -t <tempname>' can create a pool with the specified temporary +# name. The pool should be present in the namespace as <tempname> until exported +# +# STRATEGY: +# 1. Create a pool with '-t' option +# 2. Verify the pool is created with the specified temporary name +# + +verify_runnable "global" + +function cleanup +{ + destroy_pool $TESTPOOL + destroy_pool $TEMPPOOL + +} + +log_assert "'zpool create -t <tempname>' can create a pool with the specified" \ + " temporary name." +log_onexit cleanup + +TEMPPOOL="tempname.$$" +typeset poolprops=('comment=text' 'ashift=12' 'listsnapshots=on' 'autoexpand=on' + 'autoreplace=on' 'delegation=off' 'failmode=continue') +typeset fsprops=('canmount=off' 'mountpoint=none' 'utf8only=on' + 'casesensitivity=mixed' 'version=1' 'normalization=formKD') + +for poolprop in "${poolprops[@]}"; do + for fsprop in "${fsprops[@]}"; do + # 1. Create a pool with '-t' option + log_must zpool create $TESTPOOL -t $TEMPPOOL \ + -O $fsprop -o $poolprop $DISKS + # 2. Verify the pool is created with the specified temporary name + log_must poolexists $TEMPPOOL + log_mustnot poolexists $TESTPOOL + propname="$(awk -F= '{print $1}' <<< $fsprop)" + propval="$(awk -F= '{print $2}' <<< $fsprop)" + log_must test "$(get_prop $propname $TEMPPOOL)" == "$propval" + propname="$(awk -F= '{print $1}' <<< $poolprop)" + propval="$(awk -F= '{print $2}' <<< $poolprop)" + log_must test "$(get_pool_prop $propname $TEMPPOOL)" == "$propval" + # Cleanup + destroy_pool $TEMPPOOL + done +done + +log_pass "'zpool create -t <tempname>' successfully creates pools with" \ + " temporary names" |