We are excited to announce the fourth release candidate (RC4) of OpenZFS 2.3.0.
Key Features in OpenZFS 2.3.0 RC4:
- RAIDZ Expansion (#15022): Add new devices to an existing RAIDZ pool, increasing storage capacity without downtime.
- Fast Dedup (#15896): A major performance upgrade to the original OpenZFS deduplication functionality.
- Direct IO (#10018): Allows bypassing the ARC for reads/writes, improving performance in scenarios like NVMe devices where caching may hinder efficiency.
- JSON (#16217): Optional JSON output for the most used commands.
- Long names (#15921): Support for file and directory names up to 1023 characters.
- Bug Fixes: A series of critical bug fixes addressing issues reported in previous versions.
- Supported Platforms:
- Linux kernels 4.18 - 6.12,
- FreeBSD releases 13.3, 14.0, and 14.1.
Changes (zfs-2.3.0-rc3...zfs-2.3.0-rc4)
- Fix DR_OVERRIDDEN use-after-free race in dbuf_sync_leaf #16854
- BRT: Check bv_mos_entries in brt_entry_lookup() #16851
- Remove unnecessary CSTYLED escapes on top-level macro invocations #16840
- cstyle: ignore old non-POSIX types in macro invocations #16840
- cstyle: understand macro params can be empty #16840
- cstyle: understand basic top-level macro invocations #16840
- Optimize RAIDZ expansion #15680 #16825
- Fix false assertion in dmu_tx_dirty_buf() on cloning #16825
- zdb_il: use flex array member to access ZIL records #16832
- Improve speculative prefetcher for block cloning #16814
- Allow dsl_deadlist_open() return errors #16836
- FreeBSD: Remove an incorrect assertion in zfs_getpages() #16810 #16834
- Add ability to scrub from last scrubbed txg #16301
- Fix race in libzfs_run_process_impl #16801
- FreeBSD: Remove some illumos compat from vnode.h #16808
- FreeBSD: Return ifndef IN_BASE back to fix the build #16808
- zinject(8): rename "ioctl" to "flush" #16827
- Fix regression in dmu_buf_will_fill() #16829
- Add missing parenthesis in VERIFYF() #16826
- Linux: fix zfs_uio_dio_check_for_zero_page #16812 #16689 #16642
- Linux: Fix detection of register_sysctl_sz #16620 #16805
- zdb: show dedup table and log attributes #16755
- Assert if we're logging after final txg was set #16795
- FreeBSD: Reduce copy_file_range() source lock to shared #16789 #16797
- FreeBSD: Lock vnode in zfs_ioctl() #16789 #16796
- Linux: Fix zfs_prune panics #16770
- Linux 6.12 compat: META #16793
- BRT: Clear bv_entcount_dirty on destroy #16791
- BRT: More optimizations after per-vdev splitting #16773
- BRT: Rework structures and locks to be per-vdev #16740
- ZAP: Add by_dnode variants to lookup/prefetch_uint64 #16740
- BRT: Don't call brt_pending_remove() on holes/embedded #16740
- ZTS: Avoid embedded blocks in bclone/bclone_prop_sync #16740
- fix: block incompatible kernel from being installed #16139
- zio: Avoid sleeping in the I/O path #16785
- ZTS: Fix zpool_status_008_pos false positive #16769
- L2ARC: Stop rebuild before setting spa_final_txg #16714 #16782
- Remove hash_elements_max accounting from DBUF and ARC #16759
- Move "no name changes" from compression to checksum table #16776
- Expand zpool-remove.8 manpage with example results #16777
- Fix few __VA_ARGS typos in assertions #16780
- zed: prevent automatic replacement of offline vdevs #16751
- AUTHORS: refresh with recent new contributors #16762
- tests: fix uClibc for getversion.c #16735 #16741
- zvol_os.c: Increase optimal IO size #16750
- Fix some nits in zfs_getpages() #16758
- dsl_dataset: put IO-inducing frees on the pool deadlist #6783 #16708 #16722 #16697
- L2ARC: Move different stats updates earlier #16040 #16743
- Grab the rangelock unconditionally in zfs_getpages() #16643
- Fix a potential page leak in mappedread_sf() #16643
- Fix user properties output for zpool list #16734
- JSON: fix user properties output for zpool list #16734
How to Participate:
We encourage users and developers to test this release candidate and provide feedback. Your input is invaluable in ensuring the final release meets our community's needs. Please report any issues you encounter in our GitHub repository.