Add missing checks for unsupported features
After 35ec517
it has become possible to import ZFS pools witn an
active org.illumos:edonr feature on FreeBSD, leading to a panic.
In addition, "zpool status" reported all pools without edonr
as upgradable and "zpool upgrade -v" reported edonr in the list
of upgradable features.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: Martin Matuska <mm@FreeBSD.org>
Closes #11653
This commit is contained in:
parent
778fa36ee7
commit
03ef8f09e1
|
@ -9030,6 +9030,8 @@ zpool_do_upgrade(int argc, char **argv)
|
||||||
"---------------\n");
|
"---------------\n");
|
||||||
for (i = 0; i < SPA_FEATURES; i++) {
|
for (i = 0; i < SPA_FEATURES; i++) {
|
||||||
zfeature_info_t *fi = &spa_feature_table[i];
|
zfeature_info_t *fi = &spa_feature_table[i];
|
||||||
|
if (!fi->fi_zfs_mod_supported)
|
||||||
|
continue;
|
||||||
const char *ro =
|
const char *ro =
|
||||||
(fi->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ?
|
(fi->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ?
|
||||||
" (read-only compatible)" : "";
|
" (read-only compatible)" : "";
|
||||||
|
|
|
@ -7592,6 +7592,9 @@ ztest_init(ztest_shared_t *zs)
|
||||||
for (i = 0; i < SPA_FEATURES; i++) {
|
for (i = 0; i < SPA_FEATURES; i++) {
|
||||||
char *buf;
|
char *buf;
|
||||||
|
|
||||||
|
if (!spa_feature_table[i].fi_zfs_mod_supported)
|
||||||
|
continue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 75% chance of using the log space map feature. We want ztest
|
* 75% chance of using the log space map feature. We want ztest
|
||||||
* to exercise both the code paths that use the log space map
|
* to exercise both the code paths that use the log space map
|
||||||
|
|
|
@ -482,6 +482,8 @@ check_status(nvlist_t *config, boolean_t isimport,
|
||||||
return (ZPOOL_STATUS_COMPATIBILITY_ERR);
|
return (ZPOOL_STATUS_COMPATIBILITY_ERR);
|
||||||
for (i = 0; i < SPA_FEATURES; i++) {
|
for (i = 0; i < SPA_FEATURES; i++) {
|
||||||
zfeature_info_t *fi = &spa_feature_table[i];
|
zfeature_info_t *fi = &spa_feature_table[i];
|
||||||
|
if (!fi->fi_zfs_mod_supported)
|
||||||
|
continue;
|
||||||
if (pool_features[i] &&
|
if (pool_features[i] &&
|
||||||
!nvlist_exists(feat, fi->fi_guid))
|
!nvlist_exists(feat, fi->fi_guid))
|
||||||
return (ZPOOL_STATUS_FEAT_DISABLED);
|
return (ZPOOL_STATUS_FEAT_DISABLED);
|
||||||
|
|
|
@ -100,6 +100,8 @@ zfeature_is_supported(const char *guid)
|
||||||
|
|
||||||
for (spa_feature_t i = 0; i < SPA_FEATURES; i++) {
|
for (spa_feature_t i = 0; i < SPA_FEATURES; i++) {
|
||||||
zfeature_info_t *feature = &spa_feature_table[i];
|
zfeature_info_t *feature = &spa_feature_table[i];
|
||||||
|
if (!feature->fi_zfs_mod_supported)
|
||||||
|
continue;
|
||||||
if (strcmp(guid, feature->fi_guid) == 0)
|
if (strcmp(guid, feature->fi_guid) == 0)
|
||||||
return (B_TRUE);
|
return (B_TRUE);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue