Hello from ZFS Town
Friday, 6 February 2025

Hello from ZFS Town! It’s Friday, 6 June 2025 and I’m your host, Rob Norris.

NOTE

hello

Introducing ZFS AnyRaid, Sponsored by Eshtek — HexOS

At the beginning of this year, we made the decision to invest a substantial chunk of capital to support an open source project for which we have great personal interest.  ZFS AnyRaid will give users the ability to mix different sized drives in a pool, a highly-requested feature since our la

Upstream activity

#17280 zcp: get_prop: fix encryptionroot and encryption

@snajpa 2025-04-27-2025-05-28 closed

https://github.com/openzfs/zfs/issues/12337

#17367 zfs_cmd: reorganise zfs_cmd_t to match original size

@robn 2025-05-22-2025-05-28 closed

2aa3fbe761 extended zinject_record_t, and in doing so inadvertently extended zfs_cmd_t, which broke compatibility with userspace tools without the change.

#17372 Only interrupt active disk I/Os in failmode=continue

@pcd1193182 2025-05-23-2025-05-28 closed

failmode=continue is in a sorry state. Originally designed to fix a very specific problem, it causes crashes and panics for most people who end up trying to use it. At this point, we should either remove it entirely, or try to make it more usable.

#17379 Add FreeBSD posix_fadvise support

@amotin 2025-05-26-2025-05-29 closed

See #13694 (née #9807) for motivation and context. The present PR is for feature parity on FreeBSD.

#17381 events: include zio type in IO error reports

@robn 2025-05-27-2025-05-30 closed

I am making more and varied IO shapes that fail aggressively. This patch is helping me!

#17382 zio_add_child: collapse into a single function

@robn 2025-05-27-2025-05-31 closed

In my work I’m often hooking up different things to zios, and changing in both places is easy to miss. The only difference is the locking, and that’s easy enough to handle with a boolean.

#17383 ZVOL: Comment platform-specific empty functions bodies on FreeBSD side

@fuporovvStack 2025-05-27-2025-05-28 closed

Resolve some XXXs.

#17384 ZVOL: Make zvol_inhibit_dev module parameter platform-independent

@fuporovvStack 2025-05-27-2025-05-29 closed

Unify ZFS kernel module parameters between Linux and FreeBSD.

#17385 ZVOL: Make zvol_prefetch_bytes module parameter platform-independent

@fuporovvStack 2025-05-27-2025-05-31 closed

Unify ZFS kernel module parameters names between Linux and FreeBSD.

#17386 ZVOL: Make zvol_volmode module parameter platform-independent

@fuporovvStack 2025-05-27-2025-05-31 closed

Unify ZFS kernel module parameters names between Linux and FreeBSD.

#17388 zio: add separate pipeline stages for logical IO

@robn 2025-05-28- open

The “logical” IO responsible for farming work out to the vdevs goes through the VDEV_IO stages, even though it does no IO itself, does not have a vdev set, and is not a “vdev” child IO.

This means the VDEV_IO stages need special handling for this particular kind of IO, some of it totally irrelevant to real vdev IO (eg config lock, retry, etc). It also leads to some confusing asymmetries, eg the DVA throttle is held in the logical, and then released in pieces in the children.

(I can elaborate on what I’m doing if more justification is needed, but I’m hopeful this stands on its own as a good cleanup).

#17391 Improve allocation fallback handling

@amotin 2025-05-28-2025-05-31 closed

Created a pool with very small dedup vdev and observed DDT leaking to special vdev. Reduced special vdev size and observed further leaks to normal vdev.

#17392 zfs-2.2.8 patchset

@tonyhutter 2025-05-28- open

Support EL9.6

#17393 Linux 6.15 compat: META

@tonyhutter 2025-05-28-2025-05-28 closed

Update the META file to reflect compatibility with the 6.15 kernel.

#17394 abd_os: move headers from libzpool to libspl

@robn 2025-05-29-2025-05-30 closed

5b9e695 added specific userspace versions of abd_os.h and abd_impl_os.h for libzpool. However, abd.h and abd_impl.h, which include them, are packaged with libzfs, so other programs building against libzfs can fail to build, either because the headers aren’t installed, or because they aren’t on any standard include path.

#17395 Set spa_final_txg in spa_unload()

@amotin 2025-05-29-2025-05-30 closed

I’ve noticed that after some dedup tests system reboot ends up in assertion about ms_defer tree not empty. It seems to be caused by DDT flushing still freeing some blocks while ZFS trying to reach a final steady state due to spa_final_txg, while being set by spa_export_common() on pool export, is not set when spa_unload() is called by spa_evict_all() on system reboot/shutdown. Setting spa_final_txg in spa_unload() fixes this issue.

#17396 linux/zvol_os: don’t try to set disk ops if alloc fails

@robn 2025-05-29-2025-05-30 closed

Just a trivial crasher noticed during experimenting.

If the kernel fails to allocate the gendisk, zvo_disk will be NULL, and derefencing it will explode.

#17397 ZTS: Add AlmaLinux 10

@mcmilk 2025-05-29-2025-05-30 closed

[no summary]

#17398 ZIL: “crash” the ZIL if the pool suspends during fallback

@robn 2025-05-29- open

Currently, if something goes wrong inside the ZIL, zil_commit() it will fall back to a full txg sync, which provides the same semantics, just slower. If pool suspends, txg_wait_synced_flags() will block until the pool resumes. The end result is that syncing ops like fsync() block regardless of how failmode= is set.

Since #17355, txg_wait_synced_flags() can bail out if the pool suspends while waiting. We can use this feature to not block zil_commit() if the pool suspends, but instead unwind and return an error. Once wired back through, this allows fsync() and friends to return EIO rather than blocking forever.

This is an obvious good, as it allows applications to take alternate action when the pool suspends, rather than just waiting forever.

(Further information in my BSDCan 2024 talk “Why fsync() on OpenZFS can’t fail, and what happens when it does”, if you like that sort of thing).

#17399 vdev_disk: remove classic IO submission

@robn 2025-05-29-2025-05-30 closed

Since it was disabled for 2.3, there’s been no confirmed sightings of strange IO errors, misalignments or related shenanigans. Absence of evidence and all that, but I’d rather fix bugs in the new code than in the old.

“It isn’t hubris until he’s failed.” – Chrisjen Avasarala

#17400 Skip faulting removed vdevs and clarify removal status

@ixhamza 2025-05-29-2025-05-30 closed

Fixes a race condition where vdev_remove_wanted may be set after probe initiation, causing redundant fault and removal events. Clarifies the ZPOOL_STATUS_REMOVED_DEV message, which previously implied that removal was always manual.

#17401 Linux build: always use objtool

@AttilaFueloep 2025-05-29-2025-05-30 closed

Closes #17364

#17403 CI: Retire Ubuntu 20.04 builder

@behlendorf 2025-05-30-2025-05-30 closed

Keep the CI green, retire builders which are EOL.

#17405 ZVOL: Return early, if volmode is ZFS_VOLMODE_NONE on FreeBSD side

@fuporovvStack 2025-05-30- open

Return early, if volmode is ZFS_VOLMODE_NONE on FreeBSD side

#17406 Rename zvol kernel module parameters sysctls on FreeBSD side

@fuporovvStack 2025-05-30-2025-05-30 closed

Make modules parameters names different for FreeBSD and Linux.

#17407 Make rewrite use Uncached I/O

@amotin 2025-05-30-2025-05-31 closed

Rewrite is a one-time/rare bulk administrative operation, which should minimally affect payload caching. Plus some avoided memory copies in its data path allow to significantly increase its speed. I was thinking about this from the beginning, but the rewrite and Uncached I/O control patches landed about the same time.

My tests show reduction of time to rewrite 28GB of uncompressed files on NVMe pool from 17 to 9 seconds and minimal ARC usage.

#17408 CI: Retire Fedora 40 builder

@behlendorf 2025-05-30-2025-05-31 closed

Keep the CI green, retire builders which are EOL.

#17409 Include class name into struct metaslab_class

@amotin 2025-06-01- open

With increasing number of metaslab classes it can be helpful for debugging to know what we are looking at.