aboutsummaryrefslogtreecommitdiffstats
path: root/module/zcommon
diff options
context:
space:
mode:
authorloli10K <[email protected]>2020-01-07 00:40:06 +0100
committerBrian Behlendorf <[email protected]>2020-01-06 15:40:06 -0800
commitc24fa4b19a1b117945f3235e014f926fe93b0c5a (patch)
tree37178dc7c410829ef81f1f2c61c7df44d6d41710 /module/zcommon
parentbc9cef11fddfe8e6e240477084a49f4bad1fb4f3 (diff)
Fix "zpool add -n" for dedup, special and log devices
For dedup, special and log devices "zpool add -n" does not print correctly their vdev type: ~# zpool add -n pool dedup /tmp/dedup special /tmp/special log /tmp/log would update 'pool' to the following configuration: pool /tmp/normal /tmp/dedup /tmp/special /tmp/log This could lead storage administrators to modify their ZFS pools to unexpected and unintended vdev configurations. Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: loli10K <[email protected]> Closes #9783 Closes #9390
Diffstat (limited to 'module/zcommon')
-rw-r--r--module/zcommon/zfs_comutil.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/module/zcommon/zfs_comutil.c b/module/zcommon/zfs_comutil.c
index a3ff7d8e6..1cec60ac1 100644
--- a/module/zcommon/zfs_comutil.c
+++ b/module/zcommon/zfs_comutil.c
@@ -68,7 +68,7 @@ zfs_allocatable_devs(nvlist_t *nv)
* Are there special vdevs?
*/
boolean_t
-zfs_special_devs(nvlist_t *nv)
+zfs_special_devs(nvlist_t *nv, char *type)
{
char *bias;
uint_t c;
@@ -84,7 +84,11 @@ zfs_special_devs(nvlist_t *nv)
&bias) == 0) {
if (strcmp(bias, VDEV_ALLOC_BIAS_SPECIAL) == 0 ||
strcmp(bias, VDEV_ALLOC_BIAS_DEDUP) == 0) {
- return (B_TRUE);
+ if (type != NULL && strcmp(bias, type) == 0) {
+ return (B_TRUE);
+ } else if (type == NULL) {
+ return (B_TRUE);
+ }
}
}
}