Skip to content

Commit

Permalink
FreeBSD: disable edonr in zfs_mod_supported_feature()
Browse files Browse the repository at this point in the history
Rather than conditionally compiling out the edonr code for FreeBSD
update zfs_mod_supported_feature() to indicate this feature is
unsupported.  This ensures that all spa features are defined on
every platform, even if they are not supported.

Reviewed-by: Ryan Moeller <ryan@ixsystems.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #11605 
Issue #11468
  • Loading branch information
behlendorf authored Feb 17, 2021
1 parent aef1830 commit 35ec517
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 7 deletions.
8 changes: 8 additions & 0 deletions cmd/zpool/zpool_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -8629,6 +8629,10 @@ upgrade_enable_all(zpool_handle_t *zhp, int *countp)
for (i = 0; i < SPA_FEATURES; i++) {
const char *fname = spa_feature_table[i].fi_uname;
const char *fguid = spa_feature_table[i].fi_guid;

if (!spa_feature_table[i].fi_zfs_mod_supported)
continue;

if (!nvlist_exists(enabled, fguid)) {
char *propname;
verify(-1 != asprintf(&propname, "feature@%s", fname));
Expand Down Expand Up @@ -8759,6 +8763,10 @@ upgrade_list_disabled_cb(zpool_handle_t *zhp, void *arg)
for (i = 0; i < SPA_FEATURES; i++) {
const char *fguid = spa_feature_table[i].fi_guid;
const char *fname = spa_feature_table[i].fi_uname;

if (!spa_feature_table[i].fi_zfs_mod_supported)
continue;

if (!nvlist_exists(enabled, fguid)) {
if (cbp->cb_first) {
(void) printf(gettext("\nSome "
Expand Down
2 changes: 0 additions & 2 deletions include/zfeature_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,7 @@ typedef enum spa_feature {
SPA_FEATURE_LARGE_DNODE,
SPA_FEATURE_SHA512,
SPA_FEATURE_SKEIN,
#if !defined(__FreeBSD__)
SPA_FEATURE_EDONR,
#endif
SPA_FEATURE_USEROBJ_ACCOUNTING,
SPA_FEATURE_ENCRYPTION,
SPA_FEATURE_PROJECT_QUOTA,
Expand Down
13 changes: 8 additions & 5 deletions module/zcommon/zfeature_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -222,9 +222,15 @@ zfs_mod_supported_feature(const char *name)
* features are supported.
*
* The equivalent _can_ be done on FreeBSD by way of the sysctl
* tree, but this has not been done yet.
* tree, but this has not been done yet. Therefore, we return
* that all features except edonr are supported.
*/
#if defined(_KERNEL) || defined(LIB_ZPOOL_BUILD) || defined(__FreeBSD__)
#if defined(__FreeBSD__)
if (strcmp(name, "org.illumos:edonr") == 0)
return (B_FALSE);
else
return (B_TRUE);
#elif defined(_KERNEL) || defined(LIB_ZPOOL_BUILD)
return (B_TRUE);
#else
return (zfs_mod_supported(ZFS_SYSFS_POOL_FEATURES, name));
Expand Down Expand Up @@ -440,8 +446,6 @@ zpool_feature_init(void)
skein_deps);
}

#if !defined(__FreeBSD__)

{
static const spa_feature_t edonr_deps[] = {
SPA_FEATURE_EXTENSIBLE_DATASET,
Expand All @@ -453,7 +457,6 @@ zpool_feature_init(void)
ZFEATURE_FLAG_PER_DATASET, ZFEATURE_TYPE_BOOLEAN,
edonr_deps);
}
#endif

{
static const spa_feature_t redact_books_deps[] = {
Expand Down

0 comments on commit 35ec517

Please sign in to comment.