summaryrefslogtreecommitdiffstats
path: root/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c
diff options
context:
space:
mode:
authormm <mm@FreeBSD.org>2012-07-30 23:14:24 +0000
committermm <mm@FreeBSD.org>2012-07-30 23:14:24 +0000
commitcf6d705d5b2f458f6a07c3c33eac90bca667108a (patch)
treeaddacafc54e9b837dfab0af6ec0b6b7eff091cbb /cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c
parent06da175461004ed723c6216f456b4ddbaa2fc997 (diff)
downloadFreeBSD-src-cf6d705d5b2f458f6a07c3c33eac90bca667108a.zip
FreeBSD-src-cf6d705d5b2f458f6a07c3c33eac90bca667108a.tar.gz
Partial MFV (illumos-gate 13753:2aba784c276b)
2762 zpool command should have better support for feature flags References: https://www.illumos.org/issues/2762 MFC after: 2 weeks
Diffstat (limited to 'cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c')
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c
index af0707a..560bacd 100644
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c
@@ -44,6 +44,7 @@
#include <string.h>
#include <unistd.h>
#include "libzfs_impl.h"
+#include "zfeature_common.h"
/*
* Message ID table. This must be kept in sync with the ZPOOL_STATUS_* defines
@@ -319,6 +320,30 @@ check_status(nvlist_t *config, boolean_t isimport)
if (SPA_VERSION_IS_SUPPORTED(version) && version != SPA_VERSION)
return (ZPOOL_STATUS_VERSION_OLDER);
+ /*
+ * Usable pool with disabled features
+ */
+ if (version >= SPA_VERSION_FEATURES) {
+ int i;
+ nvlist_t *feat;
+
+ if (isimport) {
+ feat = fnvlist_lookup_nvlist(config,
+ ZPOOL_CONFIG_LOAD_INFO);
+ feat = fnvlist_lookup_nvlist(feat,
+ ZPOOL_CONFIG_ENABLED_FEAT);
+ } else {
+ feat = fnvlist_lookup_nvlist(config,
+ ZPOOL_CONFIG_FEATURE_STATS);
+ }
+
+ for (i = 0; i < SPA_FEATURES; i++) {
+ zfeature_info_t *fi = &spa_feature_table[i];
+ if (!nvlist_exists(feat, fi->fi_guid))
+ return (ZPOOL_STATUS_FEAT_DISABLED);
+ }
+ }
+
return (ZPOOL_STATUS_OK);
}
OpenPOWER on IntegriCloud