Recent OpenZFS work, by @robn.
(Summary by the AI π€, read more about that).
- Current Focus Areas
- Pull requests: Active Β· Recently completed
- Day journal
Current Focus Areas
-
Mounts / snapshot automounting β A colleague’s report of bind mount failures after
zfs recv -Fopened into structural work on ZFS dataset mount handling. #18415 landed a targeted fix for thez_teardown_lock/namespace_semdeadlock. Thesnapshot-mount-directbranch is the structural replacement β eliminating the userspace round-trip entirely with direct in-kernelvfsmountreferences. Thesnapshot-mount-cleanupbranch is the current active work, refactoring the ctldir state machine (mounting flag β state enum, unmount split into named/snapentry variants, expiry under entry lock) before further integration. -
Log spacemap condense β #16747 adds on-demand log-spacemap flush and a
zpool condensecommand, allowing operators to flush log spacemaps ahead of export to avoid long export times on large pools. Originally opened in 2023, now re-lifed with rework to close txgs immediately during condense and flush based on a percentage of dirty unflushed blocks rather than a fixed metaslab count. -
NFS4 change cookie β A user report of random
EINVALon NFS4 clients after kernel 6.18.14 (#18487) pointed at a locking gap in ZFS’sSTATX_CHANGE_COOKIEpath. The change cookie combines coarsectimewith a per-objectz_seqcounter;z_seqwas not always read or written under lock, and was also reset on every znode eviction, allowing regressed cookies. Two complementary fixes are in flight: #18573 (ixhamza) persistsz_seqvia a newSA_ZPL_SEQSA attribute so it survives znode eviction; thestatx-cookie-seq-lockbranch addresses the locking gap. User bisect has since narrowed the issue to kernels 6.19+; 6.18 LTS is unaffected. -
ZAP subsystem β A series of improvements to the ZFS Attribute Processor (ZAP) key-value store. Source reorganisation, internal locking uplift,
_by_dnode()API uplift, a Β΅nit-based unit test framework with mocks, and core/cursor/misc function tests have all landed (#18516, #18546, #18551, #18564, #18586, #18603, #18619, #18630, #18654), building a test suite now at 50+ tests. The pipeline ahead fills remaining gaps:zap-unit-fatzap(fatzap: shrink, collision, pointer table growth, cursor cross-leaf) andzap-backend-api(azap_opsvtable); community contributor @chrislongros has #18638 (mixed-case ZAP tests, approved) and #18639 (uint64-key tests) open; #18643 (namecheck tests) merged by behlendorf. #7633, the old ZTS casenorm integration test tracking issue, is now assigned to robn. -
zstats β New work to unify ZFS statistics across platforms. ZFS currently uses OS-specific kstat/sysctl/procfs APIs throughout, making cross-platform work and statistics introspection inconsistent. The
zstatsbranch introduces azstatsabstraction layer with a unified API for counters, gauges, and atomic operations, with initial conversions ofabd_os(Linux and FreeBSD) anddbufstats.
Pull requests
Active
| PR | Title | Status |
|---|---|---|
| #18652 | zbookmark_compare: handle “marker” bookmarks with negative levels | revised to handle all marker levels explicitly; active review discussion |
| #16747 | On-demand log-spacemap flush; zpool condense command |
approved; investigating CI test flake (autotrim interaction) |
Recently completed
| PR | Title | Status |
|---|---|---|
| #18654 | unit/zap: key case normalization tests | applied directly by behlendorf 9 Jun |
| #18630 | zap: misc function removal / uplift / tests | applied directly by behlendorf 5 Jun |
Gone Cold
| PR | Title | Last activity |
|---|---|---|
| #17985 | bootenv: reorganise and document | 28 May β awaiting FreeBSD review |
Day journal
12 Jun (Friday)
- dsl_scan β Continued review discussion on #18652 β acknowledged reviewer suggestion to renumber
ZB_*marker constants; agreed current approach is right (renumbering is a large, invasive change for limited benefit)
11 Jun (Thursday)
- dsl_scan β Pushed update to #18652 branch
zbookmark-compare-marker: rewrote comparison to handle all three marker bookmark levels explicitly; responded to reviewer’s question about whetherZB_DNODE_LEVELcan reachzbookmark_compare(argues it mostly can’t β it is a sentinel forTRAVERSE_PRE/TRAVERSE_POSTrather than a real block reference) - Log spacemap condense β Commented on #16747: zloop runs consistently locally to completion in ~12 min; noted CI pool uses autotrim which is absent in local testing; investigating whether that is the source of the CI flake
- NFS4 change cookie β Reviewed and approved #18573 β “Persist z_seq across znode eviction” (ixhamza); persists
z_seqvia newSA_ZPL_SEQSA attribute so the NFS4 change cookie survives znode eviction; directly addresses the root cause identified in #18487 analysis; ixhamza had briefed robn early - Reviewed and approved #18638 β “unit/zap: add MT_MATCH_CASE mixed-case test” (chrislongros); adds ZAP mixed-case table test coverage; noted
U8_TEXTPREP_TOUPPERis also valid for Unicode normalization forms andMT_MATCH_CASEdefangs it
10 Jun (Wednesday)
-
Log spacemap condense β Pushed two updates to
condense-log-spacemapsfor #16747: reworked the debug condense target to properly track and cancel the delay task; added a ztest hook for the regular condense path (ztest exercises the actual condense, not the debug target) -
Assigned #7633 β “Test case: casenorm test group”; old tracking issue for ZTS casenorm integration tests needing update for Linux, directly relevant to ongoing ZAP casenorm work
-
#18643 (unit/namecheck: test name validation by chrislongros) merged by behlendorf
9 Jun (Tuesday)
-
dsl_scan β Opened #18652 β “zbookmark_compare: handle ‘marker’ bookmarks with negative levels”; correct fix for #14777, superseding #18598 and #18612; marker bookmarks (
ZB_ROOT_LEVEL,ZB_ZIL_LEVEL,ZB_DNODE_LEVEL) represent valid dataset-level blocks but negative levels makeBP_SPANBunsafe; fix sorts them ahead of “true” object blocks without performing any level arithmetic β they’re typically dataset metadata needed first anyway; ZTS running -
Log spacemap condense β Pushed fix to
condense-log-spacemapsand responded to review on #16747: the debug condense target had a quirk wherespa_condense_debug_tasktasks linger on the delay taskq for up to 1s after condense completes; the task exits without re-arming on the next tick; documented the behaviour in-source -
ZAP β Commented on #18639 β “unit/zap: uint64 keys” (chrislongros); adds
test_zap_uint64_keyscoveringZAP_FLAG_UINT64_KEYfatzap (the key format used by DDT and BRT); robn had overlapping WIP inzap-unit-uint64-keysand pushed that branch; noted the PR covers the core operations well -
ZAP β Commented on #18638 (chrislongros,
unit/zap: zap_lookup_norm) β noted overlap with ownzap-unit-casenormwork; was about to post own PR today but #18638 had turned up first; coordinated and posted #18654 as a companion -
Reviewed and approved #18643 β “unit/namecheck: test name validation” (chrislongros); first unit test suite contributed independently of the test framework author β tests pool, dataset, snapshot, bookmark, component, permset, mountpoint, and depth namecheck functions; inline suggestions on naming style, avoiding unnecessary state restoration in forked tests
-
ZAP β Opened #18654 β “unit/zap: key case normalization tests”; extends mock ZAP creation to accept normalisation flags; tests
MT_NORMALIZElookups across five Unicode normalization forms (U8_TEXTPREP_TOUPPER, NFC, NFD, NFKC, NFKD); tests conflict flag and real-name return inzap_lookup_norm_by_dnode(); testszap_remove_norm_by_dnode() -
#18654 (unit/zap: key case normalization tests) applied directly by behlendorf
-
#18643 (unit/namecheck: test name validation) approved and merged by behlendorf β “great to see the unit testing getting fleshed out”; suggested
test_btree,test_range_tree, ortest_raidzas next candidates -
#16747 (On-demand log-spacemap flush;
zpool condensecommand) approved by behlendorf
6 Jun (Saturday)
- dsl_scan β Withdrew #18612 β confirmed with amotin that skipping
ZB_ROOT_LEVELprefetch entirely was wrong; these bookmarks do point to data the prefetcher needs; working on correct approach
5 Jun (Friday)
-
ZAP β Opened #18630 β “zap: misc function removal / uplift / tests”; removes
zap_increment_int()(long unused, potentially buggy) andzap_join()/zap_join_key()/zap_join_increment()(last seen 2017, too narrowly focused); addszap_increment_by_dnode(),_by_dnode()variants for thezap_*_intandzap_*_int_keyfamilies, andzap_value_search_by_dnode(); all new API variants get unit tests; addsunit_rand_uint64()andunit_rand_str()helpers to the test framework; ZAP test suite now at 40 tests -
#18630 (zap: misc function removal / uplift / tests) applied directly by behlendorf
4 Jun (Thursday)
-
ZAP β Updated #18619 β pushed
unit-coverage-prettybranch with lcov 1.x support (lcov 1.14 / Alma 8.10 compatibility); worked around several 1.x quirks to produce the same text report from older tooling; responded to behlendorf’s review -
dsl_scan β Responded to amotin’s inline review on #18612 β agreed with amotin’s analysis; had forgotten that the prefetcher and scanner are separate threads each walking the tree, not a single pass where prefetch is set up ahead of each visit; that means rootbp is meaningful to prefetch and the fix is wrong; planning to withdraw #18612 once amotin weighs in with a better approach
-
Reviewed #18625 β “PG_writeback may stuck with writeback_iter” (tiehexue, related to #18454); pushed back on the analysis β the claim that
writeback_iterandwrite_cache_pagescoexist and conflict applies only to a narrow HWE window (6.17 on Ubuntu 24.04); the proposed fix applies 6.18+ writeback code back to 6.10 where it isn’t needed -
#18619 (unit: produce a text coverage report) approved by behlendorf
-
#18619 (unit: produce a text coverage report) applied directly by behlendorf
3 Jun (Wednesday)
-
ZAP β Opened #18619 β “unit: produce a text coverage report”; adds
scripts/coverage_report.plwhich parses lcov/geninfo tracefiles and emits a text report immediately aftermake unit-coverage, showing per-file line/branch/function coverage; splits coverage targets intounit-coverage(text) andunit-coverage-html(full HTML); truecolor terminal colouring with fallback; Makefile improvements and doc updates -
#18603 (zap: add
zap_cursor_init_by_dnode; cursor unit tests; mock dnode refcounts) applied directly by behlendorf -
amotin raised question on #18612 β whether the
ZB_ROOT_LEVELbookmark’s rootbp points toobjset_phys_tand should still be prefetched to allowdsl_scan_prefetch_cb()to queue object prefetches
2 Jun (Tuesday)
-
ZAP β Traced
zpool_error_scrub_001_postest hang on #18603 CI to error scrub carrying a live cursor indsl_scan_tthat is reinitialised on resume but not finalised on cancel; addeddsl_scan: close errorscrub cursor on pauseas a new first commit; final rebase to master; also restoredzc_objset/zc_zapobjfields inzap_cursor_tfor source compatibility (annotated “do not use” to document the ABI break) -
ZAP β Restructured additional ZAP unit test work into focused branches:
zap-unit-misc(test additions forzap_joinandzap_value_search),zap-unit-casenorm(case normalisation),zap-unit-fatzap(fatzap: shrink, collision, pointer table growth, cursor cross-leaf) -
Log spacemap condense β Rebased
condense-log-spacemapsto master; behlendorf responded to naming concern on #16747 β considered extendingzpool syncinstead of a newzpool condensesubcommand but is leaning toward keeping “condense” as it’s descriptive and likely to accumulate more data structures -
#18612 (dsl_scan_prefetch: don’t prefetch
ZB_ROOT_LEVELbookmarks) approved by behlendorf
1 Jun (Monday)
-
Closed #18598 β withdrew zbookmark PR after amotin’s review prompted deeper analysis; the observed UBSAN shift values (-5, -7, -10) are explained by negative level constants (
ZB_ROOT_LEVEL = -1,ZB_ZIL_LEVEL = -2,ZB_DNODE_LEVEL = -3) combined with validibsvalues, which bypass the existingIMPLYassertions; theibs == 0guard was addressing the wrong root cause -
Opened #18612 β “dsl_scan_prefetch: don’t prefetch
ZB_ROOT_LEVELbookmarks”; correct fix for #14777;dsl_scan_visit_rootbp()creates a marker bookmark withlevel == ZB_ROOT_LEVEL(-1) and passes it todsl_scan_prefetch(), which sorts the list viazbookmark_compare()β that callsBP_SPANB()with a negative level, producing the undefined shift; fix: skip prefetch whenlevel == ZB_ROOT_LEVEL(nothing to prefetch anyway, matching howtraverse_prefetcher()handlesZB_DNODE_LEVEL); also assertslevel >= 0inzbookmark_compare()for future protection; full ZTS passed -
Published
zio-crypt-commonβ initial work on a cross-platform encryption interface forzio_crypt; establishes an OS abstraction layer, lifts common code, and adds adapters for Linux/userspace (ICP) and FreeBSD -
#18603 (zap: add
zap_cursor_init_by_dnode; cursor unit tests) approved by amotin
31 May (Sunday)
- ZAP β Responded to amotin’s review on #18603 about always taking the dnode and
zap_thold in_init()rather than deferring; pushed updatedzap-unit-cursormakingzap_cursor_init()and friends returnint; adopted a deferred-error model where a failed init zeros the cursor enough thatzap_cursor_retrieve()returnsEIOandzap_cursor_fini()is a no-op, preserving existing call-site patterns while still handling init failures
30 May (Saturday)
-
Commented on #18593 β continued discussion on auto-loading the kernel module when
zpool list/statusis invoked; outlined the behavioural ambiguity introduced if the module is not loaded (“no pools available” currently gives a definitive answer from the kernel; without loading it would be ambiguous between “no pools” and “module not loaded”) -
Reviewed (changes requested) #18605 β “fix: add buffer-length check in rdwr_efi.c” (orbisai0security); pushed back on “high severity” framing β
strcpyis not a security issue in itself and the author’s own analysis showed the path is not exploitable; requested appropriate severity description and squash to a single commit -
#18603 (zap: add
zap_cursor_init_by_dnode; cursor unit tests) reviewed by amotin β suggested always taking the dnode hold in_init()to allow assertions in cursor operations
29 May (Thursday)
- ZAP β Created
zap-unit-cursorbranch and opened #18603 β “zap: addzap_cursor_init_by_dnode; cursor unit tests; mock dnode refcounts”; addszap_cursor_init_by_dnode()andzap_cursor_init_serialized_by_dnode(), which must hold the dnode until the firstzap_cursor_retrieve()call; adds light refcounting to mock dnodes so tests can verify all holds are released on cleanup; cursor tests cover walking, multiple scenarios, and serialization (applied directly by behlendorf 3 Jun) - Pushed
splice-readβ WIP: Linuxsplice_readfile operation to supportsendfile(),splice(), andtee()on ZFS files; reviving earlier exploratory work
28 May (Wednesday)
- Opened #18598 from
zbookmark-compare-underflow-fixβ “zbookmark_compare: avoid negative shift in block span calculation”;BP_SPANBsubtractsSPA_BLKPTRSHIFTfromibsbefore using it as a shift count;ibs=0is a legal value and with unsigned math the subtract underflows, making the shift amount undefined behaviour; fix only callsBP_SPANBwhenibsis non-zero, otherwise uses the block id directly; ZTS passed; fixes #14777 - bootenv β Rebased
bootenv-cleanuponto master for #17985; commented asking FreeBSD loader maintainers (@bsdimp, @kevans91, @tsoome) to weigh in ahead of the 2.5 betas; noted the upcoming FreeBSD dev summit as an opportunity - Closed #17951 β “compat 6.18 clang - build failing”; already fixed
- Closed #16680 β “block clone and bulk deletions (Veeam)”; concluded the throttling side was addressed by #18043 and remaining design notes are captured elsewhere
27 May (Wednesday)
-
Log spacemap condense β Added basic
zpool condensetests to #16747: introduced adebugcondense type (compiled only withZFS_DEBUG) that runs a series of delay tasks to bump stats then completes after 10s, used as a hook for test observation; raised naming concern on #16747 β “condense” may be confusing given other unrelated condense operations in ZFS (indirect, metaslab, livelist); proposed the operation might be better described as a log-to-primary flush -
Investigated #18593 β “zpool list/status should not force the zfs kernel to be loaded” (thegushi, FreeBSD 15); located the relevant
libzfs_load_module()function on Linux and FreeBSD; noted the behaviour has been present since 2010 on Linux and 2007 on FreeBSD and would be a visible change; offeredstrace -f zpool listfor further diagnosis -
#18586 (unit/zap: test “core” ZAP operations) applied directly by behlendorf
-
#18588 (config: detect the right way to get pthreads) merged by behlendorf
26 May (Tuesday)
- Log spacemap condense β Responded to behlendorf’s inline review comments on #16747; rebased
condense-log-spacemapsonto current master
25 May (Sunday)
- Opened #18588 from
pthread-linkageβ “config: detect the right way to get pthreads”; replaces the ad-hoc mix of-pthread/-lpthreadflags with theAX_PTHREADautoconf macro, which produces the correctCFLAGSandLIBSfor the target platform; ensures consistent thread state across compilation units regardless of whether they were compiled with-pthread(on Linux,-pthreaddefines_REENTRANTwhile-lpthreaddoes not); also avoids undefined behaviour when two units β one compiled with-pthread, one without β call across each other; tested on Linux (gcc+glibc) and FreeBSD (clang) (merged by behlendorf 26 May) - ZAP β Opened #18586 from
zap-unit-coreβ “unit/zap: test ‘core’ ZAP operations”; extends ZAP unit tests to cover core operations (add, update, remove, count, contains, length); tests are constrained to single-uint64_tvalues since that’s what both ZAP types share; addszap_contains_by_dnode()and exposeszap_update_by_dnode(),zap_length_by_dnode(), andzap_get_stats_by_dnode(); also includes two unit framework improvements: zero coverage counters before a coverage run, and aTOPTMakefile arg to pass options through to the test binary (applied directly by behlendorf 26 May) - Reviewed (changes requested) #18585 β
fs_parseAPI compatibility shim for kernel 5.4.0 (tiehexue); adds m4 macro to detect changedfs_parsesignature and wrapper inzpl_super.c; acknowledged as a good start, requested changes and squash to a single commit
23 May (Saturday)
-
ZAP β Fixed packaging issues surfaced during #18564 CI runs: added FreeBSD 15.0-RELEASE to the CI matrix, reduced CI scope on push events (skip full run; only run full CI when workflow files change), updated ZTS sanity.run for the new unit test binary; then rebased
zap-unit-redux,zap-by-dnode-more,zap-backend-api, andzap-unit-moreonto master; deletedzap-unitbranch -
#18564 (Unit testing framework: Β΅nit framework, dnode/dbuf/dmu_tx mocks, initial ZAP test suite) applied directly by behlendorf
22 May (Friday)
- ZAP β Triaged #18572 β ZAP-leaf chunk-chain corruption causing soft lockup in
zfs_readdir/zap_lookup(happyaron, Debian 2.3.2);le->le_nextwalks into freelist chunks becausel_hash[]entries can point at chunks on the freelist, looping forever with no termination guard; theASSERT3Uguards are debug-only and compile away in production; recognised as a patch from a prior customer recovery scenario that was never upstreamed; pushedzap-chunk-loop-stopperwith the defensive fix:zap_leaf: defend against chunk lists with no end marker; noted the root issue appears to be behind #10825, #5346 and several other historical corruption reports - Reviewed (changes requested) #18568 β
zap: TinyZAP for multi-uint64 entries(akashb-22); new on-disk ZAP format between MicroZAP and FatZAP for multi-integer values and long keys (Lustre FID use case); on-board with the concept but the implementation approach is convoluted β requested simplification; behlendorf also engaged positively on direction - Commented on #18488 β Ubuntu 26.04 ZFS-with-7.0 thread: engaged with john-cabaj (Ubuntu ZFS package maintainer); explained the “experimental” warning mechanism; 2.3.7/2.4.2 releases (in review now) will add official 7.0 support
21 May (Thursday)
-
Reviewed and approved #18570 β
zpl_xattr: stop heap-allocating prefixed xattr names(anodos325); replaces kmem_asprintf with stack buffer for xattr name construction (bounded by XATTR_NAME_MAX=255), avoiding 3% overhead seen in samba profiling; ixhamza and behlendorf also approved; noted additional refactor opportunity -
#18563 (linux/super: properly apply ro/rw mount option to superblock) applied directly by behlendorf
20 May (Wednesday)
-
Mounts β Created
mount-ro-rwbranch and opened #18563 β “linux/super: properly apply ro/rw mount option to superblock”; regression from #18339: commit f5a9e3a622 changed howSB_RDONLYwas applied β it set readonly when a mount hadro, but never cleared it when the mount hadrw, so the dataset’sreadonly=property always won over an explicitmount -o rw; fix checksfc->sb_flags_maskto detect whether the option set or cleared readonly; includes lifted ZTS helpers and a new consistency test; fixes #18557 -
ZAP β Opened #18564 β “Unit testing framework”; introduces Β΅nit as an in-tree unit test framework (two files, no external dependency; each test runs in an isolated fork); three commits: framework itself, dnode/dbuf/dmu_tx mock infrastructure, and an initial ZAP test suite; groundwork from #18516/#18546/#18551 already landed; behlendorf positive: “exactly the kind of infrastructure we want” (applied directly by behlendorf 23 May)
-
#18558 (
spl_kvmalloc: remove__GFP_COMPbefore calling vmalloc()) merged by behlendorf
19 May (Tuesday)
-
Opened #18558 from
spl-kvmalloc-no-gfp-compβ “spl_kvmalloc: remove__GFP_COMPbefore calling vmalloc()”; fixes #18556; a prior commit stopped passing__GFP_COMPforKM_VMEMallocations, but the fallback path for non-KM_VMEMallocations tovmalloc()still passed it, generating a warning on Linux 7.0; full ZTS on 7.0.8 passed (merged by behlendorf same day) -
Triage on #18557 β
mount -o rwnot granting write access onreadonly=ondatasets since 2.4.2; confirmed as own regression from #18339; started working up a test case -
ZAP β Rebased
zap-unit,zap-by-dnode-more,zap-backend-api, andzap-unit-reduxafter #18551 was applied; deletedzap-by-dnodebranch -
#18551 (zap: make
_by_dnode()API variants be the primary implementation) applied directly by behlendorf -
#18554 (config: show progress output for kernel API checks) merged by behlendorf
18 May (Monday)
- Opened #18554 from
configure-kernel-check-progressβ “config: show progress output for kernel API checks”; adds a background job inZFS_LINUX_TEST_COMPILE_ALLthat watchesbuild.logand prints a running counter as modules compile; inactive in silent mode or when stdout is not a terminal; prompted by a user asking why configure appeared to hang atchecking for available kernel interfaces...(merged by behlendorf same day)
17 May (Sunday)
- Commented on #18549 β user report (alex-moch) of UBSAN array-index-out-of-bounds in
zap.con Linux 7.0 withCONFIG_UBSAN; explained no actual memory bug β UBSAN doesn’t understand the full-block allocation pattern wheremz_chunks[]covers the rest of the block past the header; pointed to fix - ZAP β Created
mz-chunks-flexbranch and opened #18550 β “zap_impl: use flex array field formzap_phys_t.mz_chunks[]”;mzap_phys_tis always a full-block allocation withmz_chunks[]as an array over the remaining block; UBSAN complains because the declared size is[1]; fix converts to a C99 flexible array member β pure type annotation, no behavior change; fixes #18549 (merged by behlendorf same day) - ZAP β Opened #18551 β “zap: make
_by_dnode()API variants be the primary implementation”; PR 3/N in the ZAP cleanup series following #18546; reorganises so_by_dnode()functions are the actual implementation, with objset+object variants as thin wrappers around them β same pattern as thezap_lock()/zap_lock_by_dnode()change from #18546; rebasedzap-unit,zap-by-dnode,zap-by-dnode-more,zap-backend-api, andzap-unit-reduxon top
16 May (Saturday)
-
ZAP β Continued
zap-unitbranch: reorganised mock DMU infrastructure β split mock helpers intomock_dmu.c/mock_dmu.h, separating test fixtures from test cases intest_zap.c; rebased dependent branches (zap-by-dnode,zap-by-dnode-more,zap-backend-api) -
#18535 (zstream: fix crashes when refcount tracking enabled) applied directly by behlendorf
-
#18546 (zap: internal locking uplift) applied directly by behlendorf
15 May (Friday)
-
ZAP β Created
zap-lockbranch and opened #18546 β “zap: internal locking uplift”: renameslockdir/unlockdirtolock/unlock; makeszap_lock()a simple wrapper aroundzap_lock_by_dnode(), reducing repetition and error scope; simplifiesmzap_create_impl()and the fatzap lock upgrade dance; cleans up refcount tags now thatzap_lock_by_dnode()is the sole locking path; PR 2/N in the ZAP cleanup series; rebasedzap-uniton top (applied directly by behlendorf 15 May) -
Log spacemap condense β amotin reported a
VERIFY0(nvlist_add_nvlist)crash in #16747 testing; fixed the nvlist bug inspa_log_spacemap.c, pushed tocondense-log-spacemaps, and responded to amotin’s inline review comment -
zstream β Fixed amotin’s review nit on #18535: missing
signal.hinclude; pushed fix and confirmed it compiles on FreeBSD 15+; PR now has approvals from both amotin and behlendorf -
Responded to behlendorf’s question (on #18536 thread) about enabling
reference_tracking_enable=1by default in debug builds β shared timing comparison from recent ZTS runs -
#18536 (refcount tag fixups: three mismatched hold/rele tags across zap, ddt_log, dsl_bookmark) applied directly by behlendorf
14 May (Thursday)
-
Log spacemap condense β Continued inline review discussion on #16747: addressed amotin’s comments about
spa_estimate_metaslabs_to_flush()complexity insideMAX()and txg targeting; changed tospa_syncing_txg(spa) + 1to ensure at least one flush round; rebased and pushedcondense-log-spacemaps -
zstream β Created
zstream-refcount-crashbranch and opened #18535 β running tests with ABD refcount tracking enabled found crashes inzstream’s compress and decompress paths:zfs_refcount_init()had not been called, so the kmem cache used for tracking was not set up; two commits: signal handler setup (matchingzdb/ztest) andzfs_refcount_init()/_fini()calls around the main work (applied directly by behlendorf 15 May) -
Created
refcount-fixupsbranch and opened #18536 β “refcount tag fixups”; same ZTS run with refcount tracking surfaced three mismatched hold/rele tags:zap_lookup_length_uint64_impl()/zap_prefetch_uint64_impl()usedFTAGforzap_unlockdir()when the matchingzap_lockdir()was called by their caller (fixed by threading the caller’s tag through);ddt_log_begin()/ddt_log_commit()both usedFTAGfor a shared dbuf array (fixed by using theddt_log_update_t *as tag);dsl_bookmark_create_sync_impl_snap()usedFTAGfor an internal redaction list hold that didn’t match the caller-provided tag (applied directly by behlendorf 15 May) -
zstats β Created
zstatsbranch: initial work on a cross-platform ZFS statistics abstraction layer β azstatsAPI to replace the mix of OS-specific kstat/sysctl/procfs implementations with a unified interface; first conversions ofabd_os(Linux and FreeBSD) anddbufstatsto the new API; adds atomic counter support, grouping, and a macro layer to reduce boilerplate
13 May (Tuesday)
-
Approved #18520 β Fix double free for blocks cloned after DDT prune (amotin); amotin incorporated the
zfs_valstr.cupdate and added DDT/BRT CI tests -
Mounts β Opened #18529 from
mount-source-optionβzpl_super: handle ‘source’ mount option directly;vfs_parse_fs_param_source()was not available before 5.14 and not backported to LTS kernels; handling it directly in zfs removes the need for a configure check; fixes #18528 (merged by behlendorf same day) -
ZAP β Created
zap-by-dnode-morebranch extendingzap-by-dnodewith additional_by_dnode()variants; cleaned upzap-api-splitbranch now that #18516 has landed -
#18520 (Fix double free for blocks cloned after DDT prune) applied directly by behlendorf
12 May (Monday)
-
Reviewed (changes requested) #18520 β Fix double free for blocks cloned after DDT prune (amotin); suggested picking a
zfs_valstr.cupdate commit from robn/zfs to go with the fix -
Log spacemap condense β Addressed amotin’s inline review comments on #16747: bounds safety of condense-type array, stats macro approach,
txg_kicksemantics, metaslab estimation insideMAX(), and a superfluous conditional; pushed updatedcondense-log-spacemapsbranch -
#18516 (zap: reorganise and improve documentation) applied directly by behlendorf
11 May (Sunday)
- ZAP β Created
zap-backend-apibranch: adds microzap unit test coverage (lookup, length, remove, count, cursor retrieve, stats) and introduces a ZAP backend operations API β azap_opsvtable with function pointers for open/close/prefetch/add/update/remove/byteswap, making the backend switchable between microzap and fatzap without conditional dispatch through the frontend
10 May (Sunday)
- ZAP β Opened #18516 from
zap-api-splitβ “zap: reorganise and improve documentation”; PR 1/N in a planned series for comprehensive ZAP unit tests and a modular backend; splits the existingzap.c/zap_micro.cinto five files: frontend API, common internals, microzap, fatzap core, and fatzap leaf (applied directly by behlendorf 12 May)
9 May (Saturday)
- ZAP β Continued
zap-api-split: public and internal interface cleanup
8 May (Friday)
- ZAP β Started
zap-api-splitbranch: split ZAP implementation out from two source files into five, separating frontend, common internals, and the two storage backends (microzap and fatzap)
7 May (Thursday)
- Commented on #18454 β user report of permanent system hangs on kernel 6.12 (Debian 13):
folio_end_writeback()not called in all exit paths ofzpl_writepages, leaving folios stuck inPG_writebackstate; acknowledged and noted it’s in queue
6 May (Wednesday)
- ZAP API β Continued
zap-unit-reduxbranch: expanding fatzap coverage β cursor iteration and cross-leaf transitions, case normalisation, uint64 key type, fatzap_remove, format sanity checks, and upgrade path tests
5 May (Tuesday)
- NFS4 change cookie β Continued triage on #18487: user bisect narrowed issue to kernels 6.19+, 6.18 LTS series unaffected β reduces urgency; planning to set up local reproduction environment
- ZAP API β Restructured ZAP work into named branches: created
zap-by-dnode(holding the_by_dnode()API additions: zap_join, zap_value_search, int-key family, zap_contains, zap_stats, zap_remove_norm) andzap-unit-redux(fresh approach to the unit test structure, split fromzap-unit)
4 May (Monday)
- NFS4 change cookie β Continued
statx-cookie-seq-lockbranch: second commit ensures allctime/z_sequpdates are done atomically under lock; commented on #18487 with full root cause analysis β insufficient locking in theSTATX_CHANGE_COOKIEpath allowsz_seqreads to race with updates, producing a stale change cookie that NFS interprets as “no change”, causingEINVALon cached directory entries; kernel 6.18.14 change likely shifted timing to expose it more reliably - ZAP API β Created
zap-unitbranch: initial unit test infrastructure for ZAP covering fatzap multi-leaf remove, shrink/reclamation, normalization (NFD, NFKC, NFKD), and initial tests for the new_by_dnode()function family
3 May (Sunday)
- Commented on #18487 β NFS4 random
EINVALon clients after kernel ~6.18.14; initial triage, suspecting locking issue around NFS change cookie (STATX_CHANGE_COOKIE/z_seq); createdstatx-cookie-seq-lockbranch with first fix:zfs_getattr_fastnow readsz_sequnder lock; posted initial patch for community testing - Closed #18488 β Ubuntu 26.04 shipping ZFS 2.4.1 with kernel 7.0 “SERIOUS DATA LOSS” warning; explained the warning is correct: there are no official OpenZFS releases for kernel 7.0, the package is an unofficial Ubuntu build
2 May (Saturday)
- #18466 (libzfs/mnttab: restore ability to enable/disable cache) applied directly by behlendorf
- #18471 (Linux 7.1 compat: revert
d_u.d_aliasrename back tod_alias) merged by behlendorf
1 May (Friday)
- Commented on #18471 β responded to reviewer question about including 7.1 patches under a 7.0 META for 2.4.2 build compatibility
- Mounts β Continued
snapshot-mount-cleanupbranch: snapentry state machine completeness β unmounting entries always transition through the dead state rather than jumping directly to inactive; matched snapentry lifetime to the parent snapdir dentry
30 Apr (Thursday)
-
Mounts β Created
snapshot-mount-cleanupbranch β ctldir locking refactor: mounting flag replaced with a state enum, states added for unmounting and inactive, unmount split into named and snapentry variants, expiry moved under entry lock with snapshot lock reduced to AVL-only scope -
#18475 (AUTHORS: add names of recent new contributors) merged by behlendorf
29 Apr (Wednesday)
- Opened #18475 β AUTHORS: add names of recent new contributors; routine
update_authors.plrun (merged 30 Apr) - Mounts β Pushed final
mnttab-cache-enable-disableupdate for #18466: added repro from #18464 as alibzfstest case, verified fix passes - Commented on #18464 β explained rationale for keeping
libzfs_mnttab_cache()callable but as a no-op for upgrade compatibility
28 Apr (Tuesday)
- Linux 7.1 compat β Opened #18471 β Linux 7.1 compat:
struct dentry’sd_u.d_aliasfield reverts to plaind_aliasin 7.1-rc1 (reverting a 3.18 rename); single-commit fix, compile-checked on 4.18+/5.15+/6.8+, ZTS running (merged 2 May) - Mounts β Continued
snapshot-mount-direct: restore refcounts via dentry holds - Mounts β Started
snapentry-dentry-lifecyclebranch: ctldir interface cleanup (remove flags arg tozfsctl_snapshot_unmount(), delay param fromzfsctl_snapshot_unmount_delay(), unused args fromzfsctl_snapshot_alloc); implemented concurrent mounter holding inmanage_transitand direct mount creation in the automount graft path
27 Apr (Sunday)
-
Mounts β Continued
snapshot-mount-direct: tracking pathwalk intent through the VFS layer -
#18466 (libzfs/mnttab: restore ability to enable/disable cache) approved by prakashsurya
25 Apr (Saturday)
-
Commented on #18464 β regression in #18296:
libzfs_mnttab_cache(hdl, B_FALSE)became a no-op after “always enable the cache” change; Delphix’s multi-handle pool breaks because mounts via one handle populate its AVL, makingZFS_PROP_MOUNTEDreturn wrong answers on other handles; acknowledged regression and referenced #18466 as fix -
Opened #18466 β libzfs/mnttab: restore ability to enable/disable cache; restores disabled mode by flushing AVL on each
libzfs_mnttab_find()call when disabled; cache defaults to off,zfsexplicitly re-enables (applied directly by behlendorf 2 May) -
Mounts β Continued
snapshot-mount-direct: basic teardown function forzfsctl_destroy; separated dentry and parent mount tracking; expiry shape and noop stub -
#18466 (libzfs/mnttab: restore ability to enable/disable cache) approved by ixhamza and behlendorf
24 Apr (Friday)
- Mounts β Continued
snapshot-mount-direct: passing back mount flags throughmanage_transit; lifted and renamedzpl_snapdir_ttozpl_snapentry_t; initial unified snapentry shape
23 Apr (Thursday)
- Mounts β Continued
snapshot-mount-direct:manage_transitcallback writeup; dentry private management fixup
17 Apr (Friday)
-
Mounts β Continued
snapshot-mount-direct: working toward hooking automount via themanage_transitkernel callback β initial trigger implementation and struct scaffolding for transit state -
Created
casenormbranch β WIP: ZFS case normalization; ZTS helper program and initial test conversion -
#18435 (Linux 7.0 compat: META, by behlendorf) merged; commented confirming all 7.0 release candidates and the final release tested clean
15 Apr (Wednesday)
- Mounts β Continued
snapshot-mount-direct: debug on ioctl unmount paths; investigating invalidate flow and delayed-work scheduling; extensive tracing added
14 Apr (Tuesday)
- Mounts β Continued
snapshot-mount-direct: extra ref on returned automount; discoveredzfs_parse_fs_string()takes 3 args in Linux 6.18 and added a compat fix on the branch; debug on automount lifecycle
11 Apr (Saturday)
- Commented on #18422 β
zfs, zpool: ignore SIGPIPE in main()(chrislongros); argued the blanket approach is too broad β interval and long-running modes (zpool iostat <pool> 1,zpool events -f) should not ignore SIGPIPE; questioned whether the motivating scenario actually produces exit 141
10 Apr (Friday)
- Mounts β Continued
snapshot-mount-direct: substantial locking and lifecycle rework β restoredMNT_INTERNALwithzfsctl_destroy()support; direct snapshot unmount at parent teardown; timer disarm on detach; reimplemented rename around the new locking structure; ref counting fixes and mount ownership checks - Linux 7.1 compat β Created
linux-7.1-compatbranch β initial investigation:d_u.d_aliasrenamed back tod_aliasin upcoming kernels
8 Apr (Wednesday)
-
Mounts β Continued
snapshot-mount-direct: reverted to single lock model, fixing lock bugs, extensive locking debug work; getting close -
Reviewed and approved #18415 β fix snapshot automount deadlock during concurrent
zfs recv(ixhamza); dropsz_teardown_lockbeforecall_usermodehelper()to break the deadlock cycle withnamespace_sem; fixes #18409 and #18073 -
Commented on #18409 β snapshot automount deadlock during concurrent
zfs recv; this is exactly the deadlock classsnapshot-mount-directeliminates (snapshot automount holdsz_teardown_lock(R)acrosscall_usermodehelper, blocking onnamespace_sem(W)while/proc/self/mountinforeaders holdnamespace_sem(R)and wait onz_teardown_lock); noted #18073 as possible duplicate -
Commented on #18333 β
zfs_resume_fs()bail path deadlock and use-after-free; asked whether now resolved by #18310 merging -
#18407 (add ability to set user properties while changing encryption key) merged by behlendorf
-
#18415 (fix snapshot automount deadlock during concurrent
zfs recv) applied directly by behlendorf
7 Apr (Tuesday)
- Mounts β Continued
snapshot-mount-direct: reworking locking model β new locking theory and initial implementation - Opened #18407 β add ability to set user properties while changing encryption key; port of illumos change by @ahrens; extends
zfs change-key -o ...to apply user properties in the same transaction as the key change, using the existing properties nvlist already threaded through toZFS_IOC_CHANGE_KEY(merged 8 Apr) - Commented on #18402 β continued discussion on “RFE: speed up SEEK_DATA syscalls”; real improvement requires considering dirty/uncommitted buffers which is very difficult; practical advice is tuning via
zfs_dmu_offset_next_sync
6 Apr (Monday)
- Log spacemap condense β Agreed with amotin that metaslabs are the natural unit of flushing; reworked #16747 to count dirty metaslabs at condense start and flush N% per txg (default 5%, ~20s total); pushed
log_spacemap: add counter for unflushed metaslabstocondense-log-spacemapsand commented with updated approach - Commented on #18402 β “RFE: speed up SEEK_DATA syscalls”; explained
zfs_dmu_offset_next_synctunable: disabling it trades hole-detection accuracy for performance by skipping the txg sync
3 Apr (Friday)
-
fs_context β Responded to behlendorf’s follow-up question on #18377; pushed rebase of
kernel-mount-params-direct -
Mounts β Continued
snapshot-mount-direct: mnt mismatch protection, MNT_NOSUID handling, cancel expire time on force unmount -
#18377 (
linux/super: reimplement in-kernel mount options parser forfs_context) approved and applied directly by behlendorf
2 Apr (Thursday)
- Mounts β Continued
snapshot-mount-directbranch: reworked snapshot entry model for multiple snapentries per snapshot; locking rejig; unmounting by snapentry rather than snapname β progressing toward propervfsmount-backed snapshot lifecycle management
1 Apr (Wednesday)
- fs_context β Commented on #18377 β responded to behlendorf’s review question about using
GFP_KERNELin the fs_context callback - Commented on #15918 β kernel BUG at mm/usercopy.c report; pointed to #17129 as potentially related (worker thread spinning in EFAULT loop after parent thread destroyed)
31 Mar (Tuesday)
-
fs_context β Rebased #18377 onto current master and added a new commit to
kernel-mount-params-direct: workaround for kernels that enforce “forbidden” mount options and reject them beforezpl_get_tree()sees them; commented on PR to describe the new commit -
#18376 (Linux 7.0: ensure LSMs get to process mount options) merged by behlendorf
30 Mar (Monday)
- Log spacemap condense β Addressed amotin’s review comments on #16747: fixed metaslab sorting, made
-ttarget argument optional (defaults toall), added-afor all-pools support followingscrub/resilverprecedent; pushed ABI bump oncondense-log-spacemaps - Log spacemap condense β Asked amotin on #16747 about how to pace incremental spacemap flushing β per-metaslab and per-block approaches both feel too arbitrary; wondering if the right answer is some central IO scheduling layer (the same structural problem FDT had)
28 Mar (Saturday)
- Commented on #18381 β user crash report from USB device removal; user on ZFS 2.1, which is well out of support; advised upgrade to 2.3/2.4 series, noting zed OOM fix and disk detection improvements since 2.2
27 Mar (Friday)
- fs_context β Opened #18377 from
kernel-mount-params-directβlinux/super: reimplement in-kernel mount options parser forfs_context; removes old monolithic parser, moves options setup ontofs_contextas a structured “intent” before mount/remount; foundational for snapshot automounting without userspace round-trips, libmount integration, and eventual removal ofmount.zfs - fs_context β Opened #18376 from new
lsm-mount-optsbranch β Linux 7.0: ensure LSMs get to process mount options; when a filesystem provides.parse_monolithic, the kernel skips LSM option processing entirely β breaking SELinuxcontext/fscontext/defcontext/rootcontextproperties since #18339; fix by callingsecurity_sb_eat_lsm_opts()before stashing remaining options forzfs_domount()(merged 31 Mar)
26 Mar (Thursday)
- fs_context β Continued
kernel-mount-params-directbranch: addedvfs_tallocator and made it public; matchedvfs_tlifetime tofs_context; removedzfs_mnt_t(passing mount params directly instead); removedparse_monolithicβ further simplification of the mount parameter stack, aligning object lifetimes with thefs_contextmodel and removing intermediate structures
25 Mar (Wednesday)
- Mounts β Continued
mountsetbranch: introducedzfs_mountset_iteriterator API andlibzfs_mountset_apply; migratedzpool_disable_datasets,zfs_iter_mounted,unshare_unmount, and mount-list callers to use the new iterator; removedzfs_mountset_foreach; markedzfs_mount/zfs_unmountas deprecated β the iterator-based model is becoming the primary interface
23 Mar (Monday)
- #18356 (pyzfs: update license tags/classifiers) merged by behlendorf
22 Mar (Sunday)
- Created
header-splitbranch β WIP: exploring moving ZFS/SPL headers out ofsys/to newzfs/andspl/namespaces
21 Mar (Saturday)
- fs_context β Continued
kernel-mount-params-directbranch β added better lifetime control and dup-on-copy for context; removed old options parser; mount parameter parsing in the kernel viafs_contextparams API taking cleaner shape
20 Mar (Friday)
- fs_context β Created
kernel-mount-params-directbranch β reworking mount parameter parsing to happen directly in the kernel via thefs_contextparams API, continuing the flattening work from thealways-fs-contextbranch - Log spacemap β Re-lifed #16747 β on-demand log-spacemap flush and
zpool condensecommand; reworked to close txg immediately during condense (like scrub) and flush based on % of dirty unflushed blocks rather than a fixed metaslab count - Opened #18356 β pyzfs: update license tags/classifiers; fix deprecated setuptools license classifier warning by switching to SPDX identifier and adding
spdxchecktag (merged 23 Mar) - Reviewed and approved #18354 β Linux 7.0: autoconf: remove copy-from-user-inatomic API checks (john-cabaj); PowerPC build fix removing an unnecessary API check that now pulls in a GPL-only symbol
18 Mar (Wednesday)
-
Mounts β Created
snapshot-mount-directbranch β reworkingzfs_ctldirsnapshot mounting to hold avfsmountdirectly in the snapshot entry; refactoring snap/snapmount paths, removing chroot handling, options allocation, andse_path/mountpoint generation; exploring autoexpiry via dentry invalidation and investigating a leakedzfsvfsreference -
#18339 (linux/super: require
fs_context, remove support for old mount API) approved by behlendorf and applied directly
17 Mar (Tuesday)
-
fs_context β Opened #18339 β linux/super: require
fs_context, remove support for old mount API; first PR from thealways-fs-contextbranch β drops theHAVE_FS_CONTEXT-gated old entry points, flattens the call chain intozpl_get_tree()andzpl_reconfigure(); full ZTS on 6.12.63, compile-checked back to 4.18; note scoped tozpl_super.conly, further cleanup in subsequent PRs -
Responded to amotin’s review comment on #18331 β explained that
generic_setleasepredatesfilelock.h: it has always existed but its declaration moved fromfs.htofilelock.hat some point, so the#ifdef HAVE_FILELOCK_HEADERguard is for the include only, not the symbol -
#18331 (Linux 7.0: also set setlease handler on directories) approved by amotin and behlendorf; merged by tonyhutter
16 Mar (Monday)
-
Mounts β Continued
mountsetbranch: pushedzfs_mountset_applyprototype and initial hacks wiring it into mount callers β exploring an apply-based model for executing a set of mount operations as a unit -
Mounts β Created
always-fs-contextbranch β fullinit_fs_contextadoption: dropsHAVE_FS_CONTEXTcompatibility shims entirely and refuses to build withoutfs_context; follow-through on #18260’s groundwork and the 2.5 goal flagged by behlendorf -
Commented on #18316 β statx requires
<sys/stat.h>include file (wbx-github/uClibc-ng build failure in Buildroot); suggested using configure to detect statx and skip the test binary if absent; then retracted in favour of @jolivain’s similar-but-better solution -
#18331 (Linux 7.0: also set setlease handler on directories) confirmed working by satmandu on 7.0.0-rc3
15 Mar (Sunday)
- Opened #18331 β Linux 7.0: also set
setleasehandler on directories; prompted by @satmandu’s report of NFS access failures on 7.0 (worked on 6.19); #18215 added the regular-file setlease handler but missed directory file ops, causingEINVALwhen the NFS server tries to take a directory lease
14 Mar (Saturday)
- Mounts β Continued
mountsetbranch: added initialmountbuilder/mountoptAPIs β a structured layer for constructing mount operations and managing mount options, building on top of thezfs_mountsetabstraction
13 Mar (Friday)
- Mounts β Continued
mountsetbranch: convertedzpool_disable_datasetsto mountset; reworkedzfs_unmountandzfs_unsharefor the new API; migration through the remaining libzfs/cmd mount callers continuing
12 Mar (Thursday)
-
Mounts β Continued
mountsetbranch: convertedunshare_unmount_path,zfs_do_userspace,zfs_for_each,zfs_path_to_zhandle, andzinjectto the mountset API; removed legacygetextmntentfrom libspl; branch migrating steadily through the remaining libzfs/cmd mount callers -
Opened #18312 β config: fix
STATX_MNT_IDdetection;_GNU_SOURCEwas not defined in the configure check, sosys/stat.hwouldn’t producestruct statxorSTATX_*defines; missed when a prior change switched fromlinux/stat.htosys/stat.h -
Opened #18313 β contrib/debian: add
zilstat.1to Debian packaging install lists; CI fix following #18303 (zilstat: add man page) which caused Debian packaging to fail -
Commented on #18310 β
s_activeleak fix inzfsvfs_hold()whenz_unmountedis true (mischivus); agreed a leak exists but raised questions about whetherzfsvfs_rele()would be more appropriate and what happens in thezfsvfs_create()fallback path -
#18312 (config: fix
STATX_MNT_IDdetection) approved by ixhamza; merged by behlendorf -
#18313 (contrib/debian: add zilstat.1 manpage to installation list) approved by ixhamza; merged by behlendorf
11 Mar (Wednesday)
- Mounts β Continued
mountsetbranch: convertedunshare_unmountandzfs_iter_mountedto use the mountset iterator, migrating more of libzfs off the legacy mnttab API - Reviewed (changes requested) #18304 β README: add FreeBSD 14.4-RELEASE alongside 15.0 (grahamperrin); suggested listing only the latest release of each series rather than accumulating every version
10 Mar (Tuesday)
-
Mounts β Started
mountsetbranch β concrete implementation of thezfs_mountsetabstraction sketched in the #18296 design discussion: interface definition, libmount-based Linux backend, libzfs global mountset instance, and migration ofzfs_is_mountedand the legacylibzfs_mnttabAPI to use the new interface -
#18295 (Linux: remove minimum version requirement) applied directly by behlendorf
-
#18296 (libzfs: mnttab cleanup) applied directly by behlendorf
9 Mar (Monday)
-
Linux support β Opened #18295 β remove minimum Linux kernel version requirement; prefer configure checks over a version gate; document actually-supported distros and kernels in README instead
-
Mounts β Opened #18296 β libzfs mnttab cleanup; pulls
libzfs_mnttab_*functions intolibzfs_mnttab.c, general modernisation (SPL mutexes, alloc/free helpers), removes unused legacystruct extmnttabandgettmntany(); preparatory cleanup carried across every mount management prototype, sent separately since it stands on its own -
Mounts β Commented on #18296 in response to @lundman β sketched design direction for mount abstraction: opaque mntent object representing a dataset/mountpoint pair, with OS-specific methods (mount, unmount, property changes, sort); libmount wrapping on Linux, direct implementation on FreeBSD/Windows; libzfs and tools would only ever interact through the abstraction
-
Mounts β Started
libzfs-mnttab-libmountbranch β WIP initial shape of OS-specific mount API, integrating mnttab cleanup changes with the libmount work into a new branch; first cut at the opaque object abstraction described in the design comment -
Reviewed and approved #18290 β FreeBSD: improve dmesg kernel message prefix (concussious); noted Linux mixes
ZFS:andzfs:prefixes too, consistency wouldn’t hurt -
Closed #17351 β rename
zedbinary tozfs-zed; no compelling case made; resolving namespace clashes in a global shared namespace is out of scope -
Linux support β Responded to review nit on #18295 β fixed “prioritise” spelling; pushed updated branch
-
Mounts β Responded to review nit from @ixhamza on #18296 β fixed commit title typos (
mnntab/gettmntany); pushed updated branch -
#18295 (Linux: remove minimum version requirement) approved by behlendorf
-
#18296 (libzfs: mnttab cleanup) approved by behlendorf and ixhamza
8 Mar (Sunday)
- Linux support β Started
linux-no-minimumbranch β prompted byfs-contextadoption work; investigated minimum kernel version requirement; found 4.18 minimum is RHEL8-derived, no longer compiles with modern toolchains, and doesn’t reflect actual support commitments
7 Mar (Saturday)
- Mounts β Split
mountcache-initialbranch offmountcacheβ isolating the initial mountcache infrastructure (the/proc/mountinfoparser, dual-tree cache,zfs_is_mountedintegration) as a discrete unit for submission as a PR
6 Mar (Friday)
-
Commented on #17000 β design discussion on
zfs create -ppsyntax for creating parents withcanmount=no; suggested-O canmount=noas a general “properties for implicitly-created parents” alternative (intelfx); conceded it was a stretch; behlendorf resolved to proceed with-pp(intelfx) -
#18281 (libzpool: lift zfs_file ops out to separate source file) merged by behlendorf
5 Mar (Thursday)
-
SHA-512 / SIMD build β Opened #18285 β separate SIMD compile checks for userspace and kernel toolchains;
HAVE_SIMD()selector macro picks the right set at compile time; eliminates Ubuntu 24.04 builder failures whereobjtoolrejects SHA512EXT in the kernel module even though the host compiler supports it -
#18285 (separate SIMD compile checks for userspace and kernel) approved by behlendorf and directly applied
4 Mar (Wednesday)
-
SHA-512 / SIMD build β Investigated behlendorf’s report of Ubuntu 24.04 build failure in #18233; diagnosed as toolchain/kernel mismatch: compiler supports SHA512EXT but
objtoolin the kernel rejects it; responded with intent to fix properly; startedsimd-configbranch β refactoring SIMD feature detection to test against both host and kernel toolchains separately -
Opened #18281 β split
zfs_file_*ops out oflibzpool/kernel.cinto a newlibzpool/zfs_file_os.csource file; cleanup requested by @lundman to ease porting work (merged 6 Mar) -
#18259 (more consistent
TREE_*macro use in AVL comparators) merged by behlendorf -
#18281 (libzpool: lift zfs_file ops out to separate source file) approved by lundman
3 Mar (Tuesday)
-
Mounts β Created
libmountbranch β WIP: reworking ZFS userspace mount management to use Linux’slibmountlibrary; detect and link libmount, initial mount/unmount through it,mnttab_cacheremade as a libmount wrapper,zfs_iter_mountedreimplemented over mtab -
Responded to amotin’s review nits on #18259 β removed unneeded
lvb != rvbredundancy (good catch); defended belt-and-suspenders wrapping ofzbookmark_compare()(AVL comparators must return -1/0/1, non-AVL functions could break at distance if changed); pushed updated branch -
#18259 (more consistent
TREE_*macro use in AVL comparators) reviewed by amotin with nits
2 Mar (Monday)
- Commented on #18259 β responded to amotin’s Clang disassembly feedback; pushed rebase to master with
||β|inzfs_refcount_compareto eliminate extra branch (tradeoff: load instead, on same cacheline); noted potential for separate search vs insertion comparator as a future idea
27 Feb (Friday)
- Mounts β Created
fs-context-upliftbranch β WIP: beginning fullinit_fs_contextmount API adoption, next step following #18260 - Commented on #18259 β posted annotated disassembly showing macro changes produce identical codegen in kernel and userspace builds; noted
spa_mapping_key_compare()as another candidate for the same treatment
26 Feb (Thursday)
- #18233 (SHA-512 via Intel SHA512 extension) merged by behlendorf
- #18260 (prefer
fs_contextmount API when available, groundwork for fullinit_fs_contextadoption) merged by behlendorf
25 Feb (Wednesday)
- Mounts β Continued progress on
mountcachebranch: built out core mountcache infrastructure β alloc/free, locking (rrwlock),/proc/mountinforefresh, dual-tree lookup (by dataset and by mountpoint), integrated cache intolibzfs_handle_t, wired upzfs_is_mountedto use it; then filtered non-ZFS mount entries out of cache, generalised foreach iterator - SHA-512 performance β Responded to review comment on #18233 β clarified
0.00 CPBvalues insha2_testoutput when the CPU MHz argument is omitted; not a regression - SHA-512 performance β Posted performance results on Core Ultra 9 285K VM for #18233: sha512ext at 1.82 CPB vs avx2 at 3.18 CPB (~1.75x faster on Arrow Lake desktop)
- Reviewed and approved #18261 β remove deprecated Fedora 41 from CI (tonyhutter)
24 Feb (Tuesday)
-
Linux 7.0 compat β Commented on #18216: confirmed full ZTS pass on 7.0-rc1; maintainer flagged
init_fs_contextfull adoption as a 2.5 goal -
SHA-512 performance β Rebased #18233 to master; shared first real hardware test results (Core Ultra 7 258V, ThinkPad X1 gen 13): sha512ext hashes 1GiB in 205ms vs avx2 at 945ms β ~4.6x faster; in-kernel test to follow
-
Opened #18259 β more consistent use of
TREE_CMP()/TREE_ISIGN()/TREE_PCMP()macros in AVL comparators; ZTS pass on Linux; notes a few curious constructions worth discussing (merged 4 Mar) -
Linux 7.0 compat β Opened #18260 β prefer new
fs_contextmount API when available (compiles back to 5.2), inverting the 7.0 compat shim check; sending to CI to verify support range before fullinit_fs_contextadoption (merged 26 Feb) -
#18216 (Linux 7.0 compat:
blk_queue_nonrot,posix_acl_to_xattr, legacy mount API removal) merged by behlendorf -
#18233 (SHA-512 via Intel SHA512 extension) approved by tonyhutter
23 Feb (Monday)
- Mounts β Started new
mountcachebranch β fresh approach to mount caching, starting with an initial/proc/mountinfoparser - Mounts β Started
kernel-mount-directbranch β reworkingzfs_ctldirsnapshot mounting to hold avfsmountdirectly in the snapshot entry rather than going through the automount path - Started
superblock-experimentsbranch β early WIP: reimagining superblock vs inode relationship
22 Feb (Sunday)
- #18215 (
F_SETLEASEcompatibility fix) merged - #18233 (SHA-512 via Intel SHA512 extension) approved by AttilaFueloep; nit about
.bytedirectives inzfs_sha512_transform_sha512ext
20 Feb (Friday)
- #18230 (
zdb --keycrash fix and test harness improvements) merged by behlendorf - #18216 (
blk_queue_nonrot/posix_acl_to_xattr/legacy mount API changes) approved by behlendorf
19 Feb (Thursday)
-
SHA-512 performance β Responded to two review comments on #18233 β fixed bugs in cpuid detection logic caught by reviewer; pushed
sha512ext(multiple iterations) -
SHA-512 performance β Fixed
$NFawk bug; pushedsha2-test-all-correct(final) -
Mounts β Commented on #18205 β investigated full unmount/remount approach; concluded it needs more work; PR left as safety-check only for now
-
Mounts β Created
mnttab-cache-highlanderbranch (WIP: mount table caching) -
#18232 (
sha2_testcorrectness checks for all implementations) merged by behlendorf -
#18216 (Linux 7.0 compat) approved by tonyhutter
18 Feb (Wednesday)
- SHA-512 performance β Created
sha512extandsha2-test-all-correctbranches - SHA-512 performance β Opened #18232 β extend
sha2_testcorrectness checks to all implementations; fix output formatting andget_cpu_freqfor variable-frequency CPUs (merged 19 Feb) - SHA-512 performance β Opened #18233 β
icp: SHA-512 via Intel SHA512 extension; tested via Intel SDE with Arrow Lake emulation; requesting community testing on real hardware (merged 26 Feb) - SHA-512 performance β Pushed
sha512extandsha2-test-all-correctbranches (iteration) - Linux 7.0 compat β Pushed
setleasebranch; commented on #18215 β addressed review feedback on commit structure - Mounts β Commented on #18207 β discussed canonical vs. use-time normalisation of
mountpoint=; noted cross-OS implications - SHA-512 performance β Responded to review on #18230 β leftover error-threading code in
zdb_derive_key()
17 Feb (Tuesday)
- SHA-512 performance β Created
sha512-avx512branch and pushed β deleted same day (AVX-512 approach abandoned) - SHA-512 performance β Created
zdb-load-key-smarterbranch; opened #18230 β fixzdb --keycrash on unencrypted datasets; fix test harness to catch silentzdbassertion failures (merged 20 Feb)
16 Feb (Monday)
- Linux 7.0 compat β Pushed
setleasebranch; responded to review on #18215, fixed commit split - Code review: #18222, #18133
15 Feb (Sunday)
- Linux 7.0 compat β Created
setleasebranch; opened #18215 β explicitly set.setlease = generic_setleaseto survive removal of kernel fallback in 7.0 (merged 22 Feb) - Linux 7.0 compat β Pushed
linux-7.0-compatbranch; opened #18216 β handleblk_queue_nonrotrename, newposix_acl_to_xattrsignature, legacy mount API removal - Code review: #18214
14 Feb (Saturday)
- Linux 7.0 compat β Created
linux-7.0-compatbranch
13 Feb (Friday)
- Mounts β Commented on #18205 β worked out root cause (outstanding long holds prevent destroy); updated PR description
12 Feb (Thursday)
- Mounts β Created
flatten-mount-pointbranch; opened #18207 β flattenmountpoint=parameter before sort inmountpoint_cmp, fixing mount ordering when trailing slashes present - Mounts β Commented on #18205 responding to CI failures
11 Feb (Wednesday)
- Linux 6.19 compat β Approved #18197 META update to mark 6.19 support (tonyhutter) β merged; 6.19 work now fully landed
- Mounts β Created
no-busy-receive-destroybranch; opened #18205 β abortzfs recv -FwithEBUSYwhen dataset has outstanding bind mounts
9 Feb (Monday)
- Linux 6.19 compat β Confirmed ZTS run passed on 6.19 release day; #18053 effectively complete
- Opened and merged #18189 β AUTHORS update