The branch main has been updated by mm:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=c170aa9f37e4ce9338a0f26e3e983f7123ea8c1a

commit c170aa9f37e4ce9338a0f26e3e983f7123ea8c1a
Author:     Martin Matuska <m...@freebsd.org>
AuthorDate: 2021-02-26 21:52:41 +0000
Commit:     Martin Matuska <m...@freebsd.org>
CommitDate: 2021-02-26 23:05:50 +0000

    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:             ba27dd8be821792e15bdabfac69fd6cab0cf9dd3
---
 sys/contrib/openzfs/cmd/zpool/zpool_main.c           | 2 ++
 sys/contrib/openzfs/cmd/ztest/ztest.c                | 3 +++
 sys/contrib/openzfs/lib/libzfs/libzfs_status.c       | 2 ++
 sys/contrib/openzfs/module/zcommon/zfeature_common.c | 2 ++
 4 files changed, 9 insertions(+)

diff --git a/sys/contrib/openzfs/cmd/zpool/zpool_main.c 
b/sys/contrib/openzfs/cmd/zpool/zpool_main.c
index 29252e6a24f4..e89eb3bea770 100644
--- a/sys/contrib/openzfs/cmd/zpool/zpool_main.c
+++ b/sys/contrib/openzfs/cmd/zpool/zpool_main.c
@@ -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)" : "";
diff --git a/sys/contrib/openzfs/cmd/ztest/ztest.c 
b/sys/contrib/openzfs/cmd/ztest/ztest.c
index cfa1290d78d1..1a030280704a 100644
--- a/sys/contrib/openzfs/cmd/ztest/ztest.c
+++ b/sys/contrib/openzfs/cmd/ztest/ztest.c
@@ -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
diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_status.c 
b/sys/contrib/openzfs/lib/libzfs/libzfs_status.c
index fadae9388ac1..5e5cb5f5d440 100644
--- a/sys/contrib/openzfs/lib/libzfs/libzfs_status.c
+++ b/sys/contrib/openzfs/lib/libzfs/libzfs_status.c
@@ -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);
diff --git a/sys/contrib/openzfs/module/zcommon/zfeature_common.c 
b/sys/contrib/openzfs/module/zcommon/zfeature_common.c
index e95a85e89ba2..fc0e09605eef 100644
--- a/sys/contrib/openzfs/module/zcommon/zfeature_common.c
+++ b/sys/contrib/openzfs/module/zcommon/zfeature_common.c
@@ -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);
        }
_______________________________________________
dev-commits-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "dev-commits-src-all-unsubscr...@freebsd.org"

Reply via email to