Hi,

there are mostly stabilization, refactoring and cleanup changes. There rest are minor performance optimizations due to caching or lock contention reduction and a few notable fixes.

Please pull, thanks.

Performance improvements:

  • minor speedup in logging when repeatedly allocated structure is preallocated only once, improves latency and decreases lock contention

  • minor throughput increase (+6%), reduced lock contention after clearing delayed allocation bits, applies to several common workload types

  • skip full quota rescan if a new relation is added in the same transaction

Fixes:

  • zstd fix for inline compressed file in subpage mode, updated version from the 6.8 time

  • proper qgroup inheritance ioctl parameter validation

  • more fiemap followup fixes after reduced locking done in 6.8

    • fix race when detecting delalloc ranges

Core changes:

  • more debugging code

    • added assertions for a very rare crash in raid56 calculation
    • tree-checker dumps page state to give more insights into possible reference counting issues
  • add checksum calculation offloading sysfs knob, for now enabled under DEBUG only to determine a good heuristic for deciding the offload or synchronous, depends on various factors (block group profile, device speed) and is not as clear as initially thought (checksum type)

  • error handling improvements, added assertions

  • more page to folio conversion (defrag, truncate), cached size and shift

  • preparation for more fine grained locking of sectors in subpage mode

  • cleanups and refactoring

    • include cleanups, forward declarations
    • pointer-to-structure helpers
    • redundant argument removals
    • removed unused code
    • slab cache updates, last use of SLAB_MEM_SPREAD removed