diff options
author | mm <mm@FreeBSD.org> | 2012-07-30 23:14:24 +0000 |
---|---|---|
committer | mm <mm@FreeBSD.org> | 2012-07-30 23:14:24 +0000 |
commit | cf6d705d5b2f458f6a07c3c33eac90bca667108a (patch) | |
tree | addacafc54e9b837dfab0af6ec0b6b7eff091cbb /cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c | |
parent | 06da175461004ed723c6216f456b4ddbaa2fc997 (diff) | |
download | FreeBSD-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.c | 25 |
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); } |