zfs: add missing checks for unsupported features
After the merge of OpenZFS master-9312e0fd1 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" lists edonr in the list of upgradable features.
This is an accepted but not yet included bugfix by upstream.
Obtained from: https://github.com/openzfs/zfs/pull/11653
Differential Revision: https://reviews.freebsd.org/D28935
Reported by: garga (on freebsd-current@)
Reviewed by: freqlabs
X-MFC-with: ba27dd8be8
This commit is contained in:
parent
9e83a6a556
commit
c170aa9f37
@ -9030,6 +9030,8 @@ zpool_do_upgrade(int argc, char **argv)
|
||||
"---------------\n");
|
||||
for (i = 0; i < SPA_FEATURES; i++) {
|
||||
zfeature_info_t *fi = &spa_feature_table[i];
|
||||
if (!fi->fi_zfs_mod_supported)
|
||||
continue;
|
||||
const char *ro =
|
||||
(fi->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ?
|
||||
" (read-only compatible)" : "";
|
||||
|
@ -7592,6 +7592,9 @@ ztest_init(ztest_shared_t *zs)
|
||||
for (i = 0; i < SPA_FEATURES; i++) {
|
||||
char *buf;
|
||||
|
||||
if (!spa_feature_table[i].fi_zfs_mod_supported)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* 75% chance of using the log space map feature. We want ztest
|
||||
* 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);
|
||||
for (i = 0; i < SPA_FEATURES; i++) {
|
||||
zfeature_info_t *fi = &spa_feature_table[i];
|
||||
if (!fi->fi_zfs_mod_supported)
|
||||
continue;
|
||||
if (pool_features[i] &&
|
||||
!nvlist_exists(feat, fi->fi_guid))
|
||||
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++) {
|
||||
zfeature_info_t *feature = &spa_feature_table[i];
|
||||
if (!feature->fi_zfs_mod_supported)
|
||||
continue;
|
||||
if (strcmp(guid, feature->fi_guid) == 0)
|
||||
return (B_TRUE);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user