mirror_zfs/module/os/linux/zfs
Paul Dagnelie 246e5883bb
Implement allocation size ranges and use for gang leaves (#17111)
When forced to resort to ganging, ZFS currently allocates three child
blocks, each one third of the size of the original. This is true
regardless of whether larger allocations could be made, which would
allow us to have fewer gang leaves. This improves performance when
fragmentation is high enough to require ganging, but not so high that
all the free ranges are only just big enough to hold a third of the
recordsize. This is also useful for improving the behavior of a future
change to allow larger gang headers.

We add the ability for the allocation codepath to allocate a range of
sizes instead of a single fixed size. We then use this to pre-allocate
the DVAs for the gang children. If those allocations fail, we fall back
to the normal write path, which will likely re-gang.

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-05-02 15:32:18 -07:00
..
abd_os.c Export correct symbols for Lustre Direct I/O 2025-04-24 13:55:21 -04:00
arc_os.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
mmp_os.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
policy.c cred: properly pass and test creds on other threads (#17273) 2025-04-29 16:27:48 -07:00
qat_compress.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
qat_crypt.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
qat.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
spa_misc_os.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
trace.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_disk.c Implement allocation size ranges and use for gang leaves (#17111) 2025-05-02 15:32:18 -07:00
vdev_label_os.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_raidz.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zfs_acl.c dmu_tx: rename dmu_tx_assign() flags from TXG_* to DMU_TX_* (#17143) 2025-03-18 16:04:22 -07:00
zfs_ctldir.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zfs_debug.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zfs_dir.c dmu_tx: rename dmu_tx_assign() flags from TXG_* to DMU_TX_* (#17143) 2025-03-18 16:04:22 -07:00
zfs_file_os.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zfs_ioctl_os.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zfs_racct.c SPDX: license tags: BSD-2-Clause 2025-03-13 17:56:46 -07:00
zfs_sysfs.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zfs_uio.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zfs_vfsops.c Report default quotas via kernel interfaces 2025-04-03 10:36:38 -07:00
zfs_vnops_os.c dmu_tx: rename dmu_tx_assign() flags from TXG_* to DMU_TX_* (#17143) 2025-03-18 16:04:22 -07:00
zfs_znode_os.c dmu_tx: rename dmu_tx_assign() flags from TXG_* to DMU_TX_* (#17143) 2025-03-18 16:04:22 -07:00
zio_crypt.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zpl_ctldir.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zpl_export.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zpl_file_range.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zpl_file.c Linux 6.0 compat: Check for migratepage VFS (#17217) 2025-04-10 17:36:31 -07:00
zpl_inode.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zpl_super.c Linux: Fix zfs_prune panics v2 (#17121) 2025-03-25 15:20:16 -07:00
zpl_xattr.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zvol_os.c dmu_tx: rename dmu_tx_assign() flags from TXG_* to DMU_TX_* (#17143) 2025-03-18 16:04:22 -07:00