mirror_zfs/include/sys
Paul Dagnelie a46ce73ca8 Make ganging redundancy respect redundant_metadata property (#17073)
The redundant_metadata setting in ZFS allows users to trade resilience
for performance and space savings. This applies to all data and metadata
blocks in zfs, with one exception: gang blocks. Gang blocks currently
just take the copies property of the IO being ganged and, if it's 1,
sets it to 2. This means that we always make at least two copies of a
gang header, which is good for resilience. However, if the users care
more about performance than resilience, their gang blocks will be even
more of a penalty than usual.

We add logic to calculate the number of gang headers copies directly,
and store it as a separate IO property. This is stored in the IO
properties and not calculated when we decide to gang because by that
point we may not have easy access to the relevant information about what
kind of block is being stored. We also check the redundant_metadata
property when doing so, and use that to decide whether to store an extra
copy of the gang headers, compared to the underlying blocks.

Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.

Signed-off-by: Paul Dagnelie <paul.dagnelie@klarasystems.com>
Co-authored-by: Paul Dagnelie <paul.dagnelie@klarasystems.com>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
2025-08-05 13:10:40 -04:00
..
crypto SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
fm SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
fs SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
lua SPDX: license tags: MIT 2025-04-16 09:59:44 -07:00
sysevent SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zstd SPDX: license tags: BSD-3-Clause 2025-04-16 09:59:44 -07:00
abd_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
abd.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
aggsum.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
arc_impl.h During pool export flush the ARC asynchronously 2025-06-17 10:50:26 -07:00
arc.h During pool export flush the ARC asynchronously 2025-06-17 10:50:26 -07:00
asm_linkage.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
avl_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
avl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
bitmap.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
bitops.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
blake3.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
blkptr.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
bplist.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
bpobj.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
bptree.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
bqueue.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
brt_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
brt.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
btree.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dataset_kstats.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dbuf.h Make ganging redundancy respect redundant_metadata property (#17073) 2025-08-05 13:10:40 -04:00
ddt_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
ddt.h FDT dedup log sync -- remove incremental 2025-08-05 12:15:21 -04:00
dmu_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dmu_objset.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dmu_recv.h cred: properly pass and test creds on other threads (#17273) 2025-05-28 16:00:28 -07:00
dmu_redact.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dmu_send.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dmu_traverse.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dmu_tx.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dmu_zfetch.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dmu.h Improve block cloning transactions accounting 2025-06-17 10:50:26 -07:00
dnode.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dsl_bookmark.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dsl_crypt.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dsl_dataset.h cred: properly pass and test creds on other threads (#17273) 2025-05-28 16:00:28 -07:00
dsl_deadlist.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dsl_deleg.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dsl_destroy.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dsl_dir.h cred: properly pass and test creds on other threads (#17273) 2025-05-28 16:00:28 -07:00
dsl_pool.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dsl_prop.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dsl_scan.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dsl_synctask.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
dsl_userhold.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
edonr.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
efi_partition.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
frame.h Linux build: silence objtool warnings 2025-06-17 10:50:26 -07:00
hkdf.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
metaslab_impl.h range_tree: Provide more debug details upon unexpected add/remove 2025-08-05 12:34:54 -04:00
metaslab.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
mmp.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
mntent.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
mod.h SPDX: license tags: GPL-2.0-or-later 2025-04-16 09:59:44 -07:00
multilist.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
nvpair_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
nvpair.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
objlist.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
pathname.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
qat.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
range_tree.h range_tree: Provide more debug details upon unexpected add/remove 2025-08-05 12:34:54 -04:00
rrwlock.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
sa_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
sa.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
sha2.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
skein.h SPDX: license tags: LicenseRef-OpenZFS-ThirdParty-PublicDomain 2025-04-16 09:59:45 -07:00
spa_checkpoint.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
spa_checksum.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
spa_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
spa_log_spacemap.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
spa.h During pool export flush the ARC asynchronously 2025-06-17 10:50:26 -07:00
space_map.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
space_reftree.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
sysevent.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
txg_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
txg.h txg: generalise txg_wait_synced_sig() to txg_wait_synced_flags() (#17284) 2025-05-28 16:00:28 -07:00
u8_textprep_data.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
u8_textprep.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
uberblock_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
uberblock.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
uio_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
unique.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
uuid.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
vdev_disk.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
vdev_draid.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
vdev_file.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
vdev_impl.h range_tree: Provide more debug details upon unexpected add/remove 2025-08-05 12:34:54 -04:00
vdev_indirect_births.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
vdev_indirect_mapping.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
vdev_initialize.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
vdev_raidz_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
vdev_raidz.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
vdev_rebuild.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
vdev_removal.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
vdev_trim.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
vdev.h FDT dedup log sync -- remove incremental 2025-08-05 12:15:21 -04:00
xvattr.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zap_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zap_leaf.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zap.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zcp_global.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zcp_iter.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zcp_prop.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zcp_set.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zcp.h cred: properly pass and test creds on other threads (#17273) 2025-05-28 16:00:28 -07:00
zfeature.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_acl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_bootenv.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_chksum.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_context.h cred: properly pass and test creds on other threads (#17273) 2025-05-28 16:00:28 -07:00
zfs_debug.h FDT dedup log sync -- remove incremental 2025-08-05 12:15:21 -04:00
zfs_delay.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_file.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_fuid.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_ioctl_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_ioctl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_onexit.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_project.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_quota.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_racct.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_ratelimit.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_refcount.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_rlock.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_sa.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_stat.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_sysfs.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_vfsops.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_vnops.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zfs_znode.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zil_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zil.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zio_checksum.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zio_compress.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zio_crypt.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zio_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zio.h Make ganging redundancy respect redundant_metadata property (#17073) 2025-08-05 13:10:40 -04:00
zrlock.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zthr.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zvol_impl.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00
zvol.h SPDX: license tags: CDDL-1.0 2025-04-16 09:59:44 -07:00