Re: git: 72a1cb05cd23 - main - rc(8): Add a zpoolupgrade rc.d script

From: Mark Millard <marklmi_at_yahoo.com>
Date: Tue, 08 Nov 2022 03:04:22 UTC
On Nov 7, 2022, at 16:34, Mark Millard <marklmi@yahoo.com> wrote:

> Warner Losh <imp_at_bsdimp.com> wrote on
> Date: Mon, 07 Nov 2022 21:23:11 UTC :
> 
>> On Mon, Nov 7, 2022 at 4:15 AM Alexander Leidinger <Alexander@leidinger.net>
>> wrote:
>> 
>>> 
>> . . .
>>> 
>>> And this brings me to a second topic, we don't have an explicit list
>>> of features which are supported by the bootloader (I had a look at the
>>> zfs and the boot related man pages, if I overlooked a place, then the
>>> other places should reference this important part with some text).
>>> 
>> 
>> There is a fixed list of features we support in the boot loader:
>> 
>> /*
>> * List of ZFS features supported for read
>> */
>> static const char *features_for_read[] = {
>> "org.illumos:lz4_compress",
>> "com.delphix:hole_birth",
>> "com.delphix:extensible_dataset",
>> "com.delphix:embedded_data",
>> "org.open-zfs:large_blocks",
>> "org.illumos:sha512",
>> "org.illumos:skein",
>> "org.zfsonlinux:large_dnode",
>> "com.joyent:multi_vdev_crash_dump",
>> "com.delphix:spacemap_histogram",
>> "com.delphix:zpool_checkpoint",
>> "com.delphix:spacemap_v2",
>> "com.datto:encryption",
>> "com.datto:bookmark_v2",
>> "org.zfsonlinux:allocation_classes",
>> "com.datto:resilver_defer",
>> "com.delphix:device_removal",
>> "com.delphix:obsolete_counts",
>> "com.intel:allocation_classes",
>> "org.freebsd:zstd_compress",
>> "com.delphix:bookmark_written",
>> "com.delphix:head_errlog",
> 
> As an example of a more general question
> (referencing a zpool feature, if I understand
> right):
> 
> com.delphix:head_errlog in the loaders from
> 13.1-RELEASE? 13.1-RELEASE-p3? 12.3-RELEASE*?
> (The future 12.4-RELEASE?)
> 
> head_errlog is an interesting example because of
> "man zpool-features" reporting the below --and it
> being fairly new:
> 
> "READ-ONLY COMPATIBLE  no"
> and:
> "This feature becomes active as soon as it is enabled and will
> never return to being enabled."
> 
> I guess the loader avoids types of read activity that cause the
> more general "READ-ONLY COMPATIBLE  no" status.
> 
> (I use the example just because I've indirectly
> run into it before, but in a more limited context.
> It may not be the best of examples for the general
> question.)
> 
> Does each RELEASE and release-update get its own,
> documented zpool feature list for its loaders?
> (There might be a question for a zfs vs. zpool
> feature distinction as well?)
> 
>> "org.openzfs:blake3",
>> NULL
>> };
> 
> The overall list definitely goes beyond what is
> listed in:
> 
> /usr/share/zfs/compatibility.d/openzfs-2.1-freebsd
> 
>> Any feature not on this list will cause the boot loader to reject the pool.
>> 
>> Whether or not it should do that by default, always, or never is an open
>> question. I've thought there should be a 'shoot footing' override that isn't
>> there today.
> 
> 

As I am not familiar with all the zpool features, I
did some exploration. An FYI from it follows.

(I originally built a list with things interlaced
but the reordering made it more readable. The
history explains some of the notation.)


In openzfs-2.1-freebsd list but not in Warner's list:

async_destroy           : not in Warner's list
bookmarks               : not in Warner's list
device_rebuild          : not in Warner's list
draid                   : not in Warner's list
empty_bpobj             : not in Warner's list
enabled_txg             : not in Warner's list
filesystem_limits       : not in Warner's list
livelist                : not in Warner's list
log_spacemap            : not in Warner's list
project_quota           : not in Warner's list
redacted_datasets       : not in Warner's list
redaction_bookmarks     : not in Warner's list
userobj_accounting      : not in Warner's list


Not in openzfs-2.1-freebsd list but in Warner's list:

not in openzfs-2.1-freebsd	: com.delphix:head_errlog
not in openzfs-2.1-freebsd	: org.openzfs:blake3
   
Not in openzfs-2.1-freebsd list nor in Warner's list:
(These are listed in "man zpool-features", as are the
rest of the various names listed.)

edonr
zilsaxattr


In both openzfs-2.1-freebsd list and in Warner's list:

allocation_classes      : org.zfsonlinux:allocation_classes
bookmark_v2             : com.datto:bookmark_v2
bookmark_written        : com.delphix:bookmark_written
device_removal          : com.delphix:device_removal
embedded_data           : com.delphix:embedded_data
encryption              : com.datto:encryption
extensible_dataset      : com.delphix:extensible_dataset
hole_birth              : com.delphix:hole_birth
large_blocks            : org.open-zfs:large_blocks
large_dnode             : org.zfsonlinux:large_dnode
lz4_compress            : org.illumos:lz4_compress
multi_vdev_crash_dump   : com.joyent:multi_vdev_crash_dump
obsolete_counts         : com.delphix:obsolete_counts
resilver_defer          : com.datto:resilver_defer
sha512                  : org.illumos:sha512
skein                   : org.illumos:skein
spacemap_histogram      : com.delphix:spacemap_histogram
spacemap_v2             : com.delphix:spacemap_v2
zpool_checkpoint        : com.delphix:zpool_checkpoint

===
Mark Millard
marklmi at yahoo.com