[<prev] [next>] [day] [month] [year] [list]
Message-ID: <cover.1758696658.git.dsterba@suse.com>
Date: Wed, 24 Sep 2025 16:40:54 +0200
From: David Sterba <dsterba@...e.com>
To: torvalds@...ux-foundation.org
Cc: David Sterba <dsterba@...e.com>,
linux-btrfs@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: [GIT PULL] Btrfs updates for 6.18
Hi,
please pull the following updates for btrfs. There are no new features,
the changes are in the core code, notably tree-log error handling and
reporting improvements, and initial support for block size > page size.
(There's one build warning due to printk format mismatch reported on
i386, we'll fix it before rc1. I did not consider it serious enough to
rework and delay the whole pull request.)
Please pull, thanks.
Performance improvements:
- search data checksums in the commit root (previous transaction) to
avoid locking contention, this improves parallelism of read heavy/low
write workloads, and also reduces transaction commit time;
on real and reproducer workload the sync time went from minutes to
tens of seconds (workload and numbers are in the changelog)
Core:
- tree-log updates
- error handling improvements, transaction aborts
- add new error state 'O' (printed in status messages) when log replay
fails and is aborted
- reduced number of btrfs_path allocations when traversing the tree
- 'block size > page size' support
- basic implementation with limitations, under experimental build
- limitations: no direct io, raid56, encoded read (standalone and in
send ioctl), encoded write
- preparatory work for compression, removing implicit assumptions of
page and block sizes
- compression workspaces are now per-filesystem, we cannot assume
common block size for work memory among different filesystems
- tree-checker now verifies INODE_EXTREF item (which is implementing
hardlinks)
- tree leaf pretty printer updates, there were missing data from items,
keys/items
- move config option CONFIG_BTRFS_REF_VERIFY to CONFIG_BTRFS_DEBUG,
it's a debugging feature and not needed to be enabled separately
- more struct btrfs_path auto free updates
- use ref_tracker API for tracking delayed inodes, enabled by mount
option 'ref_verify', allowing to better pinpoint leaking references
- in zoned mode, avoid selecting data relocation zoned for ordinary data
block groups
- updated and enhanced error messages
- lots of cleanups and refactoring
----------------------------------------------------------------
The following changes since commit 07e27ad16399afcd693be20211b0dfae63e0615f:
Linux 6.17-rc7 (2025-09-21 15:08:52 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git tags/for-6.18-tag
for you to fetch changes up to 45c222468d33202c07c41c113301a4b9c8451b8f:
btrfs: use smp_mb__after_atomic() when forcing COW in create_pending_snapshot() (2025-09-23 09:02:17 +0200)
----------------------------------------------------------------
Boris Burkov (1):
btrfs: try to search for data csums in commit root
David Sterba (5):
btrfs: convert several int parameters to bool
btrfs: fix typos in comments and strings
btrfs: add unlikely annotations to branches leading to EUCLEAN
btrfs: add unlikely annotations to branches leading to EIO
btrfs: add unlikely annotations to branches leading to transaction abort
Filipe Manana (63):
btrfs: abort transaction on specific error places when walking log tree
btrfs: abort transaction in the process_one_buffer() log tree walk callback
btrfs: use local variable for the transaction handle in replay_one_buffer()
btrfs: return real error from read_alloc_one_name() in drop_one_dir_item()
btrfs: abort transaction where errors happen during log tree replay
btrfs: exit early when replaying hole file extent item from a log tree
btrfs: process inline extent earlier in replay_one_extent()
btrfs: use local key variable to pass arguments in replay_one_extent()
btrfs: collapse unaccount_log_buffer() into clean_log_buffer()
btrfs: use booleans in walk control structure for log replay
btrfs: rename replay_dest member of struct walk_control to root
btrfs: rename root to log in walk_down_log_tree() and walk_up_log_tree()
btrfs: add and use a log root field to struct walk_control
btrfs: deduplicate log root free in error paths from btrfs_recover_log_trees()
btrfs: stop passing transaction parameter to log tree walk functions
btrfs: stop setting log_root_tree->log_root to NULL in btrfs_recover_log_trees()
btrfs: always drop log root tree reference in btrfs_replay_log()
btrfs: pass walk_control structure to replay_xattr_deletes()
btrfs: move up the definition of struct walk_control
btrfs: pass walk_control structure to replay_dir_deletes()
btrfs: pass walk_control structure to check_item_in_log()
btrfs: pass walk_control structure to replay_one_extent()
btrfs: pass walk_control structure to add_inode_ref() and helpers
btrfs: pass walk_control structure to replay_one_dir_item() and replay_one_name()
btrfs: pass walk_control structure to drop_one_dir_item() and helpers
btrfs: pass walk_control structure to overwrite_item()
btrfs: use level argument in log tree walk callback process_one_buffer()
btrfs: use level argument in log tree walk callback replay_one_buffer()
btrfs: use the inode item boolean everywhere in overwrite_item()
btrfs: add current log leaf, key and slot to struct walk_control
btrfs: avoid unnecessary path allocation at fixup_inode_link_count()
btrfs: avoid path allocations when dropping extents during log replay
btrfs: avoid unnecessary path allocation when replaying a dir item
btrfs: remove redundant path release when processing dentry during log replay
btrfs: remove redundant path release when overwriting item during log replay
btrfs: add path for subvolume tree changes to struct walk_control
btrfs: stop passing inode object IDs to __add_inode_ref() in log replay
btrfs: remove pointless inode lookup when processing extrefs during log replay
btrfs: abort transaction if we fail to find dir item during log replay
btrfs: abort transaction if we fail to update inode in log replay dir fixup
btrfs: dump detailed info and specific messages on log replay failures
btrfs: send: index backref cache by node number instead of by sector number
btrfs: print-tree: print missing fields for inode items
btrfs: print-tree: print more information about dir items
btrfs: print-tree: print dir items for dir index and xattr keys too
btrfs: print-tree: print information about inode ref items
btrfs: print-tree: print information about inode extref items
btrfs: print-tree: print information about dir log items
btrfs: print-tree: print range information for extent csum items
btrfs: print-tree: print correct inline extent data size
btrfs: print-tree: print compression type for file extent items
btrfs: print-tree: move code for processing file extent item into helper
btrfs: print-tree: print key types as human readable strings
btrfs: store and use node size in local variable in check_eb_alignment()
btrfs: mark extent buffer alignment checks as unlikely
btrfs: mark as unlikely not uptodate extent buffer checks when navigating btrees
btrfs: mark leaf space and overflow checks as unlikely on insert and extension
btrfs: fix comment about nbytes increase at replay_one_extent()
btrfs: simplify inline extent end calculation at replay_one_extent()
btrfs: make the rule checking more readable for should_cow_block()
btrfs: annotate btrfs_is_testing() as unlikely and make it return bool
btrfs: remove pointless key offset setup in create_pending_snapshot()
btrfs: use smp_mb__after_atomic() when forcing COW in create_pending_snapshot()
Jiapeng Chong (1):
btrfs: remove duplicate inclusion of linux/types.h
Johannes Thumshirn (3):
btrfs: zoned: directly call do_zone_finish() from btrfs_zone_finish_endio_workfn()
btrfs: zoned: return error from btrfs_zone_finish_endio()
btrfs: zoned: don't fail mount needlessly due to too many active zones
Leo Martins (4):
btrfs: move ref-verify under CONFIG_BTRFS_DEBUG
btrfs: implement ref_tracker for delayed_nodes
btrfs: print leaked references in kill_all_delayed_nodes()
btrfs: add mount option for ref_tracker
Miquel Sabaté Solà (1):
btrfs: use kmalloc_array() for open-coded arithmetic in kmalloc()
Naohiro Aota (1):
btrfs: zoned: refine extent allocator hint selection
Qu Wenruo (31):
btrfs: replace double boolean parameters of cow_file_range()
btrfs: pass btrfs_inode pointer directly into btrfs_compress_folios()
btrfs: use blocksize to check if compression is making things larger
btrfs: simplify support block size check
btrfs: rework error handling of run_delalloc_nocow()
btrfs: enhance error messages for delalloc range failure
btrfs: make nocow_one_range() to do cleanup on error
btrfs: keep folios locked inside run_delalloc_nocow()
btrfs: add an fs_info parameter for compression workspace manager
btrfs: add workspace manager initialization for zstd
btrfs: add generic workspace manager initialization
btrfs: migrate to use per-fs workspace manager
btrfs: cleanup the per-module compression workspace managers
btrfs: rename btrfs_compress_op to btrfs_compress_levels
btrfs: reduce compression workspace buffer space to block size
btrfs: support all block sizes which is no larger than page size
btrfs: concentrate highmem handling for data verification
btrfs: introduce btrfs_bio_for_each_block() helper
btrfs: introduce btrfs_bio_for_each_block_all() helper
btrfs: cache max and min order inside btrfs_fs_info
btrfs: tree-checker: add inode extref checks
btrfs: return any hit error from extent_writepage_io()
btrfs: fix the incorrect max_bytes value for find_lock_delalloc_range()
btrfs: prepare compression folio alloc/free for bs > ps cases
btrfs: prepare zstd to support bs > ps cases
btrfs: prepare lzo to support bs > ps cases
btrfs: prepare zlib to support bs > ps cases
btrfs: prepare scrub to support bs > ps cases
btrfs: fix symbolic link reading when bs > ps
btrfs: add extra ASSERT()s to catch unaligned bios
btrfs: enable experimental bs > ps support
Sun YangKai (1):
btrfs: more trivial BTRFS_PATH_AUTO_FREE conversions
Thorsten Blum (1):
btrfs: scrub: replace max_t()/min_t() with clamp() in scrub_throttle_dev_io()
Xichao Zhao (1):
btrfs: use PTR_ERR_OR_ZERO() to simplify code inbtrfs_control_ioctl()
fs/btrfs/Kconfig | 12 +-
fs/btrfs/Makefile | 2 +-
fs/btrfs/accessors.c | 2 +-
fs/btrfs/backref.c | 26 +-
fs/btrfs/backref.h | 4 +-
fs/btrfs/bio.c | 54 +-
fs/btrfs/bio.h | 2 +
fs/btrfs/block-group.c | 30 +-
fs/btrfs/block-group.h | 2 +-
fs/btrfs/btrfs_inode.h | 16 +-
fs/btrfs/compression.c | 243 +++--
fs/btrfs/compression.h | 59 +-
fs/btrfs/ctree.c | 135 +--
fs/btrfs/defrag.c | 4 +-
fs/btrfs/delayed-inode.c | 186 ++--
fs/btrfs/delayed-inode.h | 93 ++
fs/btrfs/delayed-ref.c | 13 +-
fs/btrfs/delayed-ref.h | 9 +-
fs/btrfs/dev-replace.c | 12 +-
fs/btrfs/direct-io.c | 12 +
fs/btrfs/disk-io.c | 97 +-
fs/btrfs/disk-io.h | 3 +-
fs/btrfs/export.c | 2 +-
fs/btrfs/extent-io-tree.c | 4 +-
fs/btrfs/extent-io-tree.h | 2 +-
fs/btrfs/extent-tree.c | 104 +-
fs/btrfs/extent-tree.h | 7 +-
fs/btrfs/extent_io.c | 127 ++-
fs/btrfs/extent_io.h | 3 +-
fs/btrfs/extent_map.c | 22 +-
fs/btrfs/fiemap.c | 2 +-
fs/btrfs/file-item.c | 60 +-
fs/btrfs/file.c | 49 +-
fs/btrfs/free-space-cache.c | 6 +-
fs/btrfs/free-space-tree.c | 60 +-
fs/btrfs/fs.c | 48 +
fs/btrfs/fs.h | 41 +-
fs/btrfs/inode-item.c | 10 +-
fs/btrfs/inode.c | 506 ++++-----
fs/btrfs/ioctl.c | 69 +-
fs/btrfs/locking.c | 2 +-
fs/btrfs/locking.h | 2 +-
fs/btrfs/lzo.c | 93 +-
fs/btrfs/messages.c | 1 +
fs/btrfs/messages.h | 1 -
fs/btrfs/misc.h | 49 +
fs/btrfs/print-tree.c | 256 ++++-
fs/btrfs/qgroup.c | 44 +-
fs/btrfs/raid-stripe-tree.c | 17 +-
fs/btrfs/raid56.c | 121 ++-
fs/btrfs/raid56.h | 4 +-
fs/btrfs/ref-verify.c | 3 +-
fs/btrfs/ref-verify.h | 4 +-
fs/btrfs/reflink.c | 15 +-
fs/btrfs/relocation.c | 81 +-
fs/btrfs/root-tree.c | 66 +-
fs/btrfs/scrub.c | 95 +-
fs/btrfs/scrub.h | 2 +-
fs/btrfs/send.c | 373 +++----
fs/btrfs/space-info.c | 4 +-
fs/btrfs/subpage.c | 2 +-
fs/btrfs/subpage.h | 2 +-
fs/btrfs/super.c | 34 +-
fs/btrfs/sysfs.c | 16 +-
fs/btrfs/tests/delayed-refs-tests.c | 4 +-
fs/btrfs/tests/extent-map-tests.c | 2 +-
fs/btrfs/transaction.c | 49 +-
fs/btrfs/tree-checker.c | 39 +-
fs/btrfs/tree-log.c | 1920 ++++++++++++++++++++---------------
fs/btrfs/verity.c | 8 +-
fs/btrfs/volumes.c | 70 +-
fs/btrfs/volumes.h | 4 +-
fs/btrfs/zlib.c | 86 +-
fs/btrfs/zoned.c | 72 +-
fs/btrfs/zoned.h | 9 +-
fs/btrfs/zstd.c | 198 ++--
76 files changed, 3441 insertions(+), 2445 deletions(-)
Powered by blists - more mailing lists