Hello from ZFS Town
Friday, 30 February 2025

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

NOTE

hello

#14876 Allow opt-in of zvol blocks in special class

@don-brady 2023-05-17-2025-05-24 closed

The zfs special_small_blocks property allows a dataset to opt-in to using the special vdev class for small block allocations. This property is currently considered valid for filesystems but invalid for volumes. This distinction is somewhat arbitrary for an opt-in policy. In some situations, a small volume (relative to the size of the special class) might benefit from using the special class.

#17280 zcp: get_prop: fix encryptionroot and encryption

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

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

#17363 Fix off-by-one bug in range tree code

@pcd1193182 2025-05-21-2025-05-23 closed

Without this fix, zfs_range_tree_find_in could return an overlap when the found range starts immediately after the searched range, with no actual overlap. For example, a tree with only a range from 10 to 14 inclusive (start 10, size 5), would return an overlap if you called zfs_range_tree_find_in(rt, 0, 10, ...)

#17366 ZTS: testing for leaked key mappings in encrypted non-raw send

@gamanakis 2025-05-22-2025-05-24 closed

See issue #12014.

#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.

#17368 Expose dataset encryption status via fast stat path

@ixhamza 2025-05-22-2025-05-27 closed

In truenas_pylibzfs, we query list of encrypted datasets several times, which is expensive. This commit exposes a public API zfs_is_encrypted() to get encryption status from fast stat path without having to refresh the properties.

#17370 Allow opt-in of zvol blocks in special class

@Pesc0 2025-05-23-2025-05-23 closed

Rebase of https://github.com/openzfs/zfs/pull/14876 Please review carefully, I am not at all familiar with the codebase.

#17371 2.3.3 staging prep

@robn 2025-05-23-2025-05-28 closed

Hopefully not treading on any toes, but I figured we’re gonna want a new release soon with the dataset hold fixes, so I put this branch together with every nice thing on master lately.

#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.

#17373 ZIL: Improve write log size accounting

@amotin 2025-05-23-2025-05-24 closed

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Performance enhancement (non-breaking change which improves efficiency)
  • Code cleanup (non-breaking change which makes code smaller or more readable)
  • Quality assurance (non-breaking change which makes the code more robust against bugs)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Library ABI change (libzfs, libzfs_core, libnvpair, libuutil and libzfsbootenv)
  • Documentation (a change to man pages or other documentation)

#17375 tunables: remove legacy FreeBSD aliases

@robn 2025-05-24- open

These are old pre-OpenZFS tunable names that have long been available via either conventional ZFS_MODULE_PARAM tunables or through kstats. It seems there’s no point doubling up on them after so many years, and it’s time for them to go.

I’d love an old FreeBSD hand or two to look over them though. FreeBSD generally doesn’t churn much, so it wouldn’t surprise me if there is critical code and documentation that relies on these to remain. I’m in no hurry to nuke anything in use; on the contrary, I’d like to find out and make sure it’s properly documented and tested on our side. So please review this!

#17376 tunables: remove obsolete Linux modparams

@robn 2025-05-24-2025-05-27 closed

There’s a couple of stray Linux tunables that are easy to get rid of. This is them.

#17377 tunables: general code cleanup

@robn 2025-05-24-2025-05-28 closed

Our tunables/module parameters infrastructure has accumulated a lot of cruft over time, making it pretty difficult to work with. I’ve been working quietly over the last year on a general uplift. The first thing to do though is make a run at the obvious things, which is this PR: a goodie bag of miscellaneous tunable-related cleanups.

This PR is just the internal code cleanup. See #17375 and #17376 for the user-visible changes (removing old tunables proper).

#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 merged

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 merged

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- open

Unify ZFS kernel module parameters names between Linux and FreeBSD.

#17386 ZVOL: Make zvol_volmode module parameter platform-independent

@fuporovvStack 2025-05-27- open

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- open

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 merged

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 merged

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Performance enhancement (non-breaking change which improves efficiency)
  • Code cleanup (non-breaking change which makes code smaller or more readable)
  • Quality assurance (non-breaking change which makes the code more robust against bugs)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Library ABI change (libzfs, libzfs_core, libnvpair, libuutil and libzfsbootenv)
  • Documentation (a change to man pages or other documentation)

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

@robn 2025-05-29-2025-05-30 merged

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

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Performance enhancement (non-breaking change which improves efficiency)
  • Code cleanup (non-breaking change which makes code smaller or more readable)
  • Quality assurance (non-breaking change which makes the code more robust against bugs)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Library ABI change (libzfs, libzfs_core, libnvpair, libuutil and libzfsbootenv)
  • Documentation (a change to man pages or other documentation)

#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 merged

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