Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 Sep 2023 15:51:30 -0700
From:      Mark Millard <marklmi@yahoo.com>
To:        Alexander Motin <mav@FreeBSD.org>, Current FreeBSD <freebsd-current@freebsd.org>
Subject:   Re: vfs.zfs.bclone_enabled (was: FreeBSD 14.0-BETA2 Now Available)
Message-ID:  <5C769ACC-F264-4BAB-AF7B-8C463A4BD99E@yahoo.com>
References:  <5C769ACC-F264-4BAB-AF7B-8C463A4BD99E.ref@yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Alexander Motin <mav_at_FreeBSD.org> wrote on
Date: Mon, 18 Sep 2023 13:26:56 UTC :

> block_cloning feature is marked as READONLY_COMPAT. It should not=20
> require any special handling from the boot code.

=46rom stand/libsa/zfs/zfsimpl.c but adding a comment about the
read-only compatibility status of each entry:

/*
 * List of ZFS features supported for read
 */
static const char *features_e: vfs.zfs.bclone_enabled
        "com.datto:bookmark_v2",		// READ-ONLY COMPATIBLE =
no
        "com.datto:encryption",			// READ-ONLY COMPATIBLE =
no
        "com.datto:resilver_defer",		// READ-ONLY COMPATIBLE =
yes
        "com.delphix:bookmark_written",		// READ-ONLY COMPATIBLE =
no
        "com.delphix:device_removal",		// READ-ONLY COMPATIBLE =
no
        "com.delphix:embedded_data",		// READ-ONLY COMPATIBLE =
no
        "com.delphix:extensible_dataset",	// READ-ONLY COMPATIBLE =
no
        "com.delphix:head_errlog",		// READ-ONLY COMPATIBLE =
no
        "com.delphix:hole_birth",		// READ-ONLY COMPATIBLE =
no
        "com.delphix:obsolete_counts",		// READ-ONLY COMPATIBLE =
yes
        "com.delphix:spacemap_histogram",	// READ-ONLY COMPATIBLE =
yes
        "com.delphix:spacemap_v2",		// READ-ONLY COMPATIBLE =
yes
        "com.delphix:zpool_checkpoint",		// READ-ONLY COMPATIBLE =
yes
        "com.intel:allocation_classes",		// READ-ONLY COMPATIBLE =
yes
        "com.joyent:multi_vdev_crash_dump",	// READ-ONLY COMPATIBLE =
no
        "com.klarasystems:vdev_zaps_v2",	// READ-ONLY COMPATIBLE =
no
        "org.freebsd:zstd_compress",		// READ-ONLY COMPATIBLE =
no
        "org.illumos:lz4_compress",		// READ-ONLY COMPATIBLE =
no
        "org.illumos:sha512",			// READ-ONLY COMPATIBLE =
no
        "org.illumos:skein",			// READ-ONLY COMPATIBLE =
no
        "org.open-zfs:large_blocks",		// READ-ONLY COMPATIBLE =
no
        "org.openzfs:blake3",			// READ-ONLY COMPATIBLE =
no
        "org.zfsonlinux:allocation_classes",	// READ-ONLY COMPATIBLE =
yes
        "org.zfsonlinux:large_dnode",		// READ-ONLY COMPATIBLE =
no
        NULL
};

So it appears that the design is that both "no" and "yes" ones
that are known to be supported are listed and anything else is
supposed to lead to rejection until explicitly added as
known-compatibile.

This matches up with stand/libsa/zfs/zfsimpl.c 's:

static int
nvlist_check_features_for_read(nvlist_t *nvl)
{
        nvlist_t *features =3D NULL;
        nvs_data_t *data;
        nvp_header_t *nvp;
        nv_string_t *nvp_name;
        int rc;
       =20
        rc =3D nvlist_find(nvl, ZPOOL_CONFIG_FEATURES_FOR_READ,
            DATA_TYPE_NVLIST, NULL, &features, NULL);
        switch (rc) {
        case 0:
                break;          /* Continue with checks */
       =20
        case ENOENT:
                return (0);     /* All features are disabled */
       =20
        default:
                return (rc);    /* Error while reading nvlist */
        }
       =20
        data =3D (nvs_data_t *)features->nv_data;
        nvp =3D &data->nvl_pair;  /* first pair in nvlist */
       =20
        while (nvp->encoded_size !=3D 0 && nvp->decoded_size !=3D 0) {
                int i, found;
       =20
                nvp_name =3D (nv_string_t *)((uintptr_t)nvp + =
sizeof(*nvp));
                found =3D 0;

                for (i =3D 0; features_for_read[i] !=3D NULL; i++) {
                        if (memcmp(nvp_name->nv_data, =
features_for_read[i],
                            nvp_name->nv_size) =3D=3D 0) {
                                found =3D 1;
                                break;
                        }
                }

                if (!found) {
                        printf("ZFS: unsupported feature: %.*s\n",
                            nvp_name->nv_size, nvp_name->nv_data);
                        rc =3D EIO;
                }
                nvp =3D (nvp_header_t *)((uint8_t *)nvp + =
nvp->encoded_size);
        }
        nvlist_destroy(features);

        return (rc);
}

I do not know if vfs.zfs.bclone_enabled=3D0 leads the loader
to see vs. not-see a "com.fudosecurity:block_cloning".

=3D=3D=3D
Mark Millard
marklmi at yahoo.com




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5C769ACC-F264-4BAB-AF7B-8C463A4BD99E>