mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +03:00
Fix pool creation with feature@allocation_classes disabled
When "feature@allocation_classes" is not enabled on the pool no vdev with "special" or "dedup" allocation type should be allowed to exist in the vdev tree. Reviewed-by: Pavel Zakharov <pavel.zakharov@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: loli10K <ezomori.nozomu@gmail.com> Closes #9427 Closes #9429
This commit is contained in:
committed by
Brian Behlendorf
parent
2516a87821
commit
715c996d3b
@@ -5620,6 +5620,7 @@ spa_create(const char *pool, nvlist_t *nvroot, nvlist_t *props,
|
||||
uint64_t version, obj;
|
||||
boolean_t has_features;
|
||||
boolean_t has_encryption;
|
||||
boolean_t has_allocclass;
|
||||
spa_feature_t feat;
|
||||
char *feat_name;
|
||||
char *poolname;
|
||||
@@ -5664,6 +5665,7 @@ spa_create(const char *pool, nvlist_t *nvroot, nvlist_t *props,
|
||||
|
||||
has_features = B_FALSE;
|
||||
has_encryption = B_FALSE;
|
||||
has_allocclass = B_FALSE;
|
||||
for (nvpair_t *elem = nvlist_next_nvpair(props, NULL);
|
||||
elem != NULL; elem = nvlist_next_nvpair(props, elem)) {
|
||||
if (zpool_prop_feature(nvpair_name(elem))) {
|
||||
@@ -5673,6 +5675,8 @@ spa_create(const char *pool, nvlist_t *nvroot, nvlist_t *props,
|
||||
VERIFY0(zfeature_lookup_name(feat_name, &feat));
|
||||
if (feat == SPA_FEATURE_ENCRYPTION)
|
||||
has_encryption = B_TRUE;
|
||||
if (feat == SPA_FEATURE_ALLOCATION_CLASSES)
|
||||
has_allocclass = B_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5686,6 +5690,12 @@ spa_create(const char *pool, nvlist_t *nvroot, nvlist_t *props,
|
||||
return (error);
|
||||
}
|
||||
}
|
||||
if (!has_allocclass && zfs_special_devs(nvroot)) {
|
||||
spa_deactivate(spa);
|
||||
spa_remove(spa);
|
||||
mutex_exit(&spa_namespace_lock);
|
||||
return (ENOTSUP);
|
||||
}
|
||||
|
||||
if (has_features || nvlist_lookup_uint64(props,
|
||||
zpool_prop_to_name(ZPOOL_PROP_VERSION), &version) != 0) {
|
||||
|
||||
Reference in New Issue
Block a user