From: David Sterba <dsterba@suse.com>
To: torvalds@linux-foundation.org
Cc: David Sterba <dsterba@suse.com>,
linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL] Btrfs updates for 7.2
Date: Mon, 15 Jun 2026 23:29:11 +0200 [thread overview]
Message-ID: <cover.1781558337.git.dsterba@suse.com> (raw)
Hi,
please pull the following updates. The noticeable change is to enable
large folios by default, it's been in testing for a few releases.
Related to that is huge folio support (still under experimental config).
Otherwise a few ioctl updates, performance improvements and usual fixes
and core changes.
Thanks.
User visible changes:
- enable large folios by default, added in 6.17 (under experimental
build), no feature limitations, a big change internally
- new ioctl to return raw checksums to userspace (a bit tricky given
compression and tail extents), can be used for mkfs and deduplication
optimizations
- provide stable UUID for e.g. overlayfs and temp_fsid, also reflected
in statvfs() field f_fsid, internal dev_t is hashed in to allow
cloning
- add 32bit compat version of GET_SUBVOL_INFO ioctl
- in experimental build, support huge folios (up to 2M)
Performance related improvements/changes:
- limit bio size to the estimated optimum derived from the queue, this
prevents build up of too much data for writeback, which could cause
latency spikes (reported improvement 15% on sequential writes)
- don't force direct IO to be serialized, forgotten change during mount
API port, brings back +60% of throughput
- lockless calculation of number of shrinkable extent maps, improve
performance with many memcg allocated objects
Notable fixes:
- in zoned mode, fix a deadlock due to zone reclaim and relocation when
space needs to be flushed
- don't trim device which is internally not tracked as writeable (e.g.
when missing device is being rescanned)
- fix deadlock when cloning inline extent and mounted with flushoncommit
- fix false IO failures after direct IO falls back to buffered write in
some cases
Core:
- remove COW fixup mechanism completely; detect and fix changes to pages
outside of filesystem tracking, guaranteed since 5.8, grace period is
over
- remove 2K block size support, experimental to test subpage code on
x86_64 but now it would block folio changes
- tree-checker improvements of:
- free-space cache and tree items
- root reference and backref items
- extent state exceptions in reloc tree
- subpage mode updates:
- code optimizations, simplify tracking bitmaps
- re-enable readahead of compressed extent
- extend bitmap size to cover huge folios
- add tracepoints related to sync, tree-log and transactions
- device stats item tracking unification, remove item if there are no
stats recorded, also don't leave stale stats on replaced device
- allow extent buffer pages to be allocated as movable, to help page
migration
- added checks for proper extent buffer release
- btrfs.ko code size reduction due to transaction abort call
simplifications
- several struct size reductions
- more auto free conversions
- more verbose assertions
----------------------------------------------------------------
The following changes since commit 4549871118cf616eecdd2d939f78e3b9e1dddc48:
Linux 7.1-rc7 (2026-06-07 15:37:58 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git tags/for-7.2-tag
for you to fetch changes up to ae2eb64bfd9762536f60b690840adcdf622cdcce:
btrfs: fix use-after-free after relocation failure with concurrent COW (2026-06-09 18:22:47 +0200)
----------------------------------------------------------------
Anand Jain (2):
btrfs: use on-disk uuid for s_uuid in temp_fsid mounts
btrfs: derive f_fsid from on-disk fsid and dev_t
Ben Maurer (1):
btrfs: use lockless read in nr_cached_objects shrinker callback
Cen Zhang (1):
btrfs: annotate lockless read of defrag_bytes in should_nocow()
Daan De Meyer (1):
btrfs: add 32-bit compat ioctl for BTRFS_IOC_GET_SUBVOL_INFO
Dave Chen (1):
btrfs: optimize fill_holes() to merge a new hole with both adjacent items
David Sterba (18):
btrfs: move condition to WARN_ON in btrfs_set_delalloc_extent()
btrfs: replace open coded DEBUG_WARN in extent_writepage()
btrfs: lift assertions to beginning of insert_delayed_ref()
btrfs: do more kmalloc_obj()/kmalloc_objs() conversions
btrfs: convert kmalloc_array to kmalloc_objs in btrfs_calc_avail_data_space()
btrfs: convert ioctl handlers to AUTO_KFREE
btrfs: make more ASSERTs verbose, part 3
btrfs: remove 32bit compat code for VFS inode number
btrfs: move transaction abort message to __btrfs_abort_transaction()
btrfs: remove fs_info from struct btrfs_backref_iter
btrfs: use on stack backref iterator in build_backref_tree()
btrfs: validate negative error number passed to btrfs_abort_transaction()
btrfs: simplify how first hit is passed to __btrfs_abort_transaction()
btrfs: add message format for qgroupid
btrfs: send: switch struct fs_path to auto freeing
btrfs: use shifts for sectorsize and nodesize
btrfs: send: pass bool for pending_move and refs_processed parameters
btrfs: switch local indicator variables to bools
Filipe Manana (51):
btrfs: use a kmem_cache for block groups
btrfs: reduce size of struct btrfs_block_group
btrfs: use a kmem_cache for free space control structures
btrfs: remove start field from struct btrfs_free_space_ctl
btrfs: remove unit field from struct btrfs_free_space_ctl
btrfs: reduce size of struct btrfs_free_space_ctl
btrfs: remove op field from struct btrfs_free_space_ctl
btrfs: remove block group argument from copy_free_space_cache()
btrfs: remove unnecessary ctl argument from __btrfs_write_out_cache()
btrfs: remove unnecessary ctl argument from write_cache_extent_entries()
btrfs: use min_size variable to setup block rsv in btrfs_replace_file_extents()
btrfs: use the enums instead of int type in struct btrfs_block_group fields
btrfs: add missing unlikely to if branches leading to a DEBUG_WARN()
btrfs: change return type from int to bool in check_eb_range()
btrfs: make sure report_eb_range() is not inlined
btrfs: tracepoints: remove double negation in finish ordered extent event
btrfs: tracepoints: remove pointless root field from transaction commit event
btrfs: remove call to transaction commit trace in warn_about_uncommitted_trans()
btrfs: remove call to transaction commit trace in btrfs_cleanup_transaction()
btrfs: tracepoints: pass a transaction handle to transaction commit event
btrfs: tracepoints: add in_fsync field to transaction commit event
btrfs: tracepoints: add trace event for transaction aborts
btrfs: tracepoints: add trace event for the start of a new transaction
btrfs: tracepoints: trace transaction states during commit phase
btrfs: stop checking for greater then zero return values in btrfs_sync_file()
btrfs: remove redundant writeback error check during fsync
btrfs: tracepoints: add trace event for when fsync finishes
btrfs: tracepoints: add trace event for btrfs_log_inode_parent()
btrfs: use a named enum for the log mode in inode log functions
btrfs: tracepoints: add trace event for btrfs_log_inode()
btrfs: tracepoints: add trace event for btrfs_log_all_parents()
btrfs: tracepoints: add trace event for log_all_new_ancestors()
btrfs: tracepoints: add trace event for log_new_dir_dentries()
btrfs: tracepoints: add trace event for add_conflicting_inode()
btrfs: tracepoints: add trace event for log_conflicting_inodes()
btrfs: use simple assertions where enough during inode logging and replay
btrfs: tracepoints: add trace event for log_new_delayed_dentries()
btrfs: tracepoints: add trace event for btrfs_record_unlink_dir()
btrfs: tracepoints: add trace event for btrfs_record_snapshot_destroy()
btrfs: tracepoints: add trace event for btrfs_record_new_subvolume()
btrfs: tracepoints: add trace event for btrfs_log_new_name()
btrfs: tracepoints: add trace event for btrfs_sync_log()
btrfs: tracepoints: show inode type in btrfs_sync_file_enter() event
btrfs: fix invalid pointer dereference in __btrfs_run_delayed_refs()
btrfs: fix deadlock cloning inline extent when using flushoncommit
btrfs: use mapping shared locking for reading super block
btrfs: return real error after lookup failure in btrfs_ioctl_default_subvol()
btrfs: use verbose assertions in backref.c
btrfs: move locking into btrfs_get_reloc_bg_bytenr()
btrfs: move WARN_ON on unexpected error in __add_tree_block()
btrfs: fix use-after-free after relocation failure with concurrent COW
Jan Kara (1):
btrfs: limit size of bios submitted from writeback
Johannes Thumshirn (6):
btrfs: zoned: document RECLAIM_ZONES flush state
btrfs: zoned: decode 'RECLAIM_ZONES' state in tracepoints
btrfs: zoned: always set data_relocation_bg
btrfs: zoned: don't account data relocation space-info in statfs free space
btrfs: zoned: fix deadlock waiting for ticket during data relocation
btrfs: zoned: always set max_active_zones for zoned devices
KangNing Liao (1):
btrfs: protect sb_write_pointer() with invalidate lock
Mark Harmstone (2):
btrfs: add ioctl GET_CSUMS to read raw checksums from file range
btrfs: don't force DIO writes to be serialized
Matthew Wilcox (Oracle) (3):
Revert "btrfs: fix the file offset calculation inside btrfs_decompress_buf2page()"
btrfs: replace __free_page with folio_put() in attach_eb_folio_to_filemap()
btrfs: use bvec_phys() in compressed_bio_last_folio()
Qu Wenruo (33):
btrfs: pass a valid btrfs_tree_parent_check when possible
btrfs: remove the COW fixup mechanism
btrfs: remove folio checked subpage bitmap tracking
btrfs: check and set EXTENT_DELALLOC_NEW before clearing EXTENT_DELALLOC
btrfs: remove 2K block size support
btrfs: enable cross-folio readahead for bs < ps and large folio cases
btrfs: refresh add_ra_bio_pages() to indicate it's using folios
btrfs: move large data folios out of experimental features
btrfs: warn about extent buffer that can not be released
btrfs: unexport and move extent_invalidate_folio()
btrfs: simplify the btree folio wait during invalidation
btrfs: remove locked subpage bitmap
btrfs: detect dirty blocks without an ordered extent more reliably
btrfs: unify folio dirty flag clearing
btrfs: use dirty flag to check if an ordered extent needs to be truncated
btrfs: remove folio_test_ordered() usage
btrfs: remove folio ordered flag and subpage bitmap
btrfs: tree-checker: extract the shared key check for free space entries
btrfs: tree-checker: ensure free space tree entries won't overflow
btrfs: tree-checker: add more cross checks for free space tree
btrfs: update the out-of-date comments on subpage
btrfs: prepare subpage operations to support more than BITS_PER_LONG sub-bitmaps
btrfs: migrate btrfs_bio_ctrl::submit_bitmap to support larger bitmaps
btrfs: introduce support for huge folios
btrfs: remove the dev stats item for replace target device
btrfs: remove the dev stats item when removing a device
btrfs: always update/create the dev stats item when adding a new device
btrfs: avoid unnecessary dev stats updates
btrfs: do not trim a device which is not writeable
btrfs: print a message when a missing device re-appears
btrfs: fix false IO failure after falling back to buffered write
btrfs: fix incorrect buffered IO fallback for append direct writes
btrfs: retry faulting in the pages after a zero sized short direct write
Rik van Riel (1):
btrfs: allocate eb-attached btree pages as movable
Teng Liu (1):
btrfs: validate data reloc tree file extent item members
Thorsten Blum (1):
btrfs: use QSTR() in __btrfs_ioctl_snap_create()
Weiming Shi (1):
btrfs: lzo: reject compressed segment that overflows the compressed input
Zhang Cen (2):
btrfs: free-space-tree: reject mismatched extent and bitmap items
btrfs: tree-checker: validate names in ROOT_REF and ROOT_BACKREF
ZhengYuan Huang (3):
btrfs: balance: fix potential bg lookup failure in chunk_usage_filter()
btrfs: balance: fix potential bg lookup failure in chunk_usage_range_filter()
btrfs: balance: fix potential bg lookup failure in btrfs_may_alloc_data_chunk()
fs/btrfs/Kconfig | 8 +-
fs/btrfs/backref.c | 73 ++--
fs/btrfs/backref.h | 9 +-
fs/btrfs/block-group.c | 48 +-
fs/btrfs/block-group.h | 40 +-
fs/btrfs/btrfs_inode.h | 37 +-
fs/btrfs/compression.c | 83 +---
fs/btrfs/ctree.c | 33 +-
fs/btrfs/defrag.c | 18 -
fs/btrfs/delalloc-space.c | 6 +-
fs/btrfs/delayed-ref.c | 5 +-
fs/btrfs/dev-replace.c | 11 +-
fs/btrfs/direct-io.c | 62 ++-
fs/btrfs/disk-io.c | 139 ++++--
fs/btrfs/extent-io-tree.c | 4 +-
fs/btrfs/extent-tree.c | 57 ++-
fs/btrfs/extent_io.c | 345 ++++++++-------
fs/btrfs/extent_io.h | 25 +-
fs/btrfs/extent_map.c | 6 +-
fs/btrfs/fiemap.c | 2 +-
fs/btrfs/file-item.c | 6 +-
fs/btrfs/file.c | 120 +++--
fs/btrfs/free-space-cache.c | 163 ++++---
fs/btrfs/free-space-cache.h | 14 +-
fs/btrfs/free-space-tree.c | 51 ++-
fs/btrfs/fs.h | 57 +--
fs/btrfs/inode.c | 327 +++-----------
fs/btrfs/ioctl.c | 757 +++++++++++++++++++++++---------
fs/btrfs/lzo.c | 11 +
fs/btrfs/ordered-data.c | 24 +-
fs/btrfs/ordered-data.h | 2 +
fs/btrfs/qgroup.c | 41 +-
fs/btrfs/raid-stripe-tree.c | 4 +-
fs/btrfs/raid56.c | 18 +-
fs/btrfs/reflink.c | 111 ++---
fs/btrfs/relocation.c | 348 +++++++++------
fs/btrfs/relocation.h | 2 +-
fs/btrfs/root-tree.c | 6 +-
fs/btrfs/scrub.c | 3 +-
fs/btrfs/send.c | 162 +++----
fs/btrfs/space-info.c | 9 +
fs/btrfs/space-info.h | 11 +
fs/btrfs/subpage.c | 286 +++++-------
fs/btrfs/subpage.h | 33 +-
fs/btrfs/super.c | 58 ++-
fs/btrfs/tests/btrfs-tests.c | 1 +
fs/btrfs/tests/free-space-tests.c | 24 +-
fs/btrfs/transaction.c | 39 +-
fs/btrfs/transaction.h | 50 ++-
fs/btrfs/tree-checker.c | 183 ++++++--
fs/btrfs/tree-log.c | 276 ++++++++----
fs/btrfs/tree-log.h | 7 +
fs/btrfs/verity.c | 4 +-
fs/btrfs/volumes.c | 166 +++++--
fs/btrfs/volumes.h | 2 +
fs/btrfs/zoned.c | 79 ++--
include/trace/events/btrfs.h | 889 +++++++++++++++++++++++++++++++++++++-
include/uapi/linux/btrfs.h | 34 ++
58 files changed, 3480 insertions(+), 1909 deletions(-)
next reply other threads:[~2026-06-15 21:29 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-15 21:29 David Sterba [this message]
2026-06-16 7:07 ` [GIT PULL] Btrfs updates for 7.2 pr-tracker-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1781558337.git.dsterba@suse.com \
--to=dsterba@suse.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox