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 6.15
Date: Mon, 24 Mar 2025 17:37:51 +0100 [thread overview]
Message-ID: <cover.1742834133.git.dsterba@suse.com> (raw)
Hi,
please pull the following btrfs updates, thanks.
User visible changes:
- fall back to buffered write if direct io is done on a file that requires
checksums
- this avoids a problem with checksum mismatch errors, observed e.g. on
virtual images when writes to pages under writeback cause the checksum
mismatch reports
- this may lead to some performance degradation but currently the
recommended setup for VM images is to use the NOCOW file attribute that
also disables checksums
- fast/realtime zstd levels -15 to -1
- supported by mount options (compress=zstd:-5) and defrag ioctl
- improved speed, reduced compression ratio, check the commit for sample
measurements
- defrag ioctl extended to accept negative compression levels
- subpage mode
- remove warning when subpage mode is used, the feature is now reasonably
complete and tested
- in debug mode allow to create 2K b-tree nodes to allow testing subpage on
x86_64 with 4K pages too
Performance improvements:
- in send, better file path caching improves runtime (on sample load by -30%)
- on s390x with hardware zlib support prepare the input buffer in a better way
to get the best results from the acceleration
- minor speed improvement in encoded read, avoid memory allocation in
synchronous mode
Core:
- enable stable writes on inodes, replacing manually waiting for writeback
and allowing to skip that on inodes without checksums
- add last checks and warnings for out-of-band dirty writes to pages,
requiring a fixup ("fixup worker"), this should not be necessary since 5.8
where get_user_page() and pin_user_pages*() prevent this
- long history behind that, we'll be happy to remove the whole infrastructure
in the near future
- more folio API conversions and preparations for large folio support
- subpage cleanups and refactoring, split handling of data and metadata to
allow future support for large folios
- readpage works as block-by-block, no change for normal mode, this is
preparation for future subpage updates
- block group refcount fixes and hardening
- delayed iput fixes
- in zoned mode, fix zone activation on filesystem with missing devices
- cleanups:
- inode parameter cleanups
- path auto-freeing updates
- code flow simplifications in send
- redundant parameter cleanups
----------------------------------------------------------------
The following changes since commit 4701f33a10702d5fc577c32434eb62adde0a1ae1:
Linux 6.14-rc7 (2025-03-16 12:55:17 -1000)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git tags/for-6.15-tag
for you to fetch changes up to 35fec1089ebb5617f85884d3fa6a699ce6337a75:
btrfs: zoned: fix zone finishing with missing devices (2025-03-18 20:35:57 +0100)
----------------------------------------------------------------
Anand Jain (1):
btrfs: sysfs: accept size suffixes for read policy values
Boris Burkov (5):
btrfs: fix block group refcount race in btrfs_create_pending_block_groups()
btrfs: harden block_group::bg_list against list_del() races
btrfs: make btrfs_discard_workfn() block_group ref explicit
btrfs: explicitly ref count block_group on new_bgs list
btrfs: codify pattern for adding block_group to bg_list
Dan Carpenter (1):
btrfs: return a literal instead of a variable in btrfs_init_dev_replace()
Daniel Vacek (3):
btrfs: keep private struct on stack for sync reads in btrfs_encoded_read_regular_fill_pages()
btrfs: zstd: enable negative compression levels mount option
btrfs: defrag: extend ioctl to accept compression levels
David Sterba (55):
btrfs: add __cold attribute to extent_io_tree_panic()
btrfs: async-thread: switch local variables need_order bool
btrfs: zstd: move zstd_parameters to the workspace
btrfs: zstd: remove local variable for storing page offsets
btrfs: unify ordering of btrfs_key initializations
btrfs: simplify returns and labels in btrfs_init_fs_root()
btrfs: update include and forward declarations in headers
btrfs: pass struct btrfs_inode to can_nocow_extent()
btrfs: pass struct btrfs_inode to extent_range_clear_dirty_for_io()
btrfs: pass struct btrfs_inode to btrfs_read_locked_inode()
btrfs: pass struct btrfs_inode to btrfs_iget_locked()
btrfs: pass struct btrfs_inode to new_simple_dir()
btrfs: pass struct btrfs_inode to btrfs_inode_type()
btrfs: pass struct btrfs_inode to btrfs_defrag_file()
btrfs: use struct btrfs_inode inside create_pending_snapshot()
btrfs: pass struct btrfs_inode to fill_stack_inode_item()
btrfs: pass struct btrfs_inode to btrfs_fill_inode()
btrfs: pass struct btrfs_inode to btrfs_load_inode_props()
btrfs: pass struct btrfs_inode to btrfs_inode_inherit_props()
btrfs: props: switch prop_handler::apply to struct btrfs_inode
btrfs: props: switch prop_handler::extract to struct btrfs_inode
btrfs: pass struct btrfs_inode to clone_copy_inline_extent()
btrfs: pass struct btrfs_inode to btrfs_double_mmap_lock()
btrfs: pass struct btrfs_inode to btrfs_double_mmap_unlock()
btrfs: pass struct btrfs_inode to btrfs_extent_same_range()
btrfs: use struct btrfs_inode inside btrfs_remap_file_range()
btrfs: use struct btrfs_inode inside btrfs_remap_file_range_prep()
btrfs: use struct btrfs_inode inside btrfs_get_parent()
btrfs: use struct btrfs_inode inside btrfs_get_name()
btrfs: don't pass nodesize to __alloc_extent_buffer()
btrfs: merge alloc_dummy_extent_buffer() helpers
btrfs: simplify parameters of metadata folio helpers
btrfs: add __pure attribute to eb page and folio counters
btrfs: use num_extent_folios() in for loop bounds
btrfs: do trivial BTRFS_PATH_AUTO_FREE conversions
btrfs: use BTRFS_PATH_AUTO_FREE in btrfs_init_dev_replace()
btrfs: use BTRFS_PATH_AUTO_FREE in btrfs_run_dev_replace()
btrfs: use BTRFS_PATH_AUTO_FREE in btrfs_check_dir_item_collision()
btrfs: use BTRFS_PATH_AUTO_FREE in load_global_roots()
btrfs: use BTRFS_PATH_AUTO_FREE in btrfs_init_root_free_objectid()
btrfs: use BTRFS_PATH_AUTO_FREE in btrfs_get_name()
btrfs: use BTRFS_PATH_AUTO_FREE in btrfs_lookup_extent_info()
btrfs: use BTRFS_PATH_AUTO_FREE in run_delayed_extent_op()
btrfs: use BTRFS_PATH_AUTO_FREE in btrfs_lookup_bio_sums()
btrfs: use BTRFS_PATH_AUTO_FREE in btrfs_remove_free_space_inode()
btrfs: use BTRFS_PATH_AUTO_FREE in populate_free_space_tree()
btrfs: use BTRFS_PATH_AUTO_FREE in clear_free_space_tree()
btrfs: use BTRFS_PATH_AUTO_FREE in load_free_space_tree()
btrfs: parameter constification in ioctl.c
btrfs: pass btrfs_root pointers to send ioctl parameters
btrfs: pass root pointers to search tree ioctl helpers
btrfs: pass struct btrfs_inode to btrfs_sync_inode_flags_to_i_flags()
btrfs: simplify local variables in btrfs_ioctl_resize()
btrfs: pass struct to btrfs_ioctl_subvol_getflags()
btrfs: unify inode variable naming
Filipe Manana (57):
btrfs: avoid assigning twice to block_start at btrfs_do_readpage()
btrfs: send: remove duplicated logic from fs_path_reset()
btrfs: send: make fs_path_len() inline and constify its argument
btrfs: send: always use fs_path_len() to determine a path's length
btrfs: send: simplify return logic from fs_path_prepare_for_add()
btrfs: send: simplify return logic from fs_path_add()
btrfs: send: implement fs_path_add_path() using fs_path_add()
btrfs: send: simplify return logic from fs_path_add_from_extent_buffer()
btrfs: send: return -ENAMETOOLONG when attempting a path that is too long
btrfs: send: simplify return logic from __get_cur_name_and_parent()
btrfs: send: simplify return logic from is_inode_existent()
btrfs: send: simplify return logic from get_cur_inode_state()
btrfs: send: factor out common logic when sending xattrs
btrfs: send: only use boolean variables at process_recorded_refs()
btrfs: send: add and use helper to rename current inode when processing refs
btrfs: send: simplify return logic from send_remove_xattr()
btrfs: send: simplify return logic from record_new_ref_if_needed()
btrfs: send: simplify return logic from record_deleted_ref_if_needed()
btrfs: send: simplify return logic from record_new_ref()
btrfs: send: simplify return logic from record_deleted_ref()
btrfs: send: simplify return logic from record_changed_ref()
btrfs: send: remove unnecessary return variable from process_new_xattr()
btrfs: send: simplify return logic from process_changed_xattr()
btrfs: send: simplify return logic from send_verity()
btrfs: send: simplify return logic from send_rename()
btrfs: send: simplify return logic from send_link()
btrfs: send: simplify return logic from send_unlink()
btrfs: send: simplify return logic from send_rmdir()
btrfs: send: keep the current inode's path cached
btrfs: send: avoid path allocation for the current inode when issuing commands
btrfs: send: simplify return logic from send_set_xattr()
btrfs: get zone unusable bytes while holding lock at btrfs_reclaim_bgs_work()
btrfs: get used bytes while holding lock at btrfs_reclaim_bgs_work()
btrfs: fix reclaimed bytes accounting after automatic block group reclaim
btrfs: fix non-empty delayed iputs list on unmount due to compressed write workers
btrfs: move __btrfs_bio_end_io() code into its single caller
btrfs: move btrfs_cleanup_bio() code into its single caller
btrfs: fix non-empty delayed iputs list on unmount due to async workers
btrfs: avoid unnecessary bio dereference at run_one_async_done()
btrfs: send: remove unnecessary inode lookup at send_encoded_inline_extent()
btrfs: send: simplify return logic from send_encoded_extent()
btrfs: return a btrfs_inode from btrfs_iget_logging()
btrfs: return a btrfs_inode from read_one_inode()
btrfs: pass a btrfs_inode to fixup_inode_link_count()
btrfs: make btrfs_iget() return a btrfs inode instead
btrfs: make btrfs_iget_path() return a btrfs inode instead
btrfs: remove unnecessary fs_info argument from create_reloc_inode()
btrfs: remove unnecessary fs_info argument from delete_block_group_cache()
btrfs: remove unnecessary fs_info argument from btrfs_add_block_group_cache()
btrfs: tests: fix chunk map leak after failure to add it to the tree
btrfs: avoid unnecessary memory allocation and copy at overwrite_item()
btrfs: use variables to store extent buffer and slot at overwrite_item()
btrfs: update outdated comment for overwrite_item()
btrfs: use memcmp_extent_buffer() at replay_one_extent()
btrfs: remove redundant else statement from btrfs_log_inode_parent()
btrfs: simplify condition for logging new dentries at btrfs_log_inode_parent()
btrfs: remove end_no_trans label from btrfs_log_inode_parent()
Johannes Thumshirn (3):
btrfs: zoned: exit btrfs_can_activate_zone if BTRFS_FS_NEED_ZONE_FINISH is set
btrfs: zoned: fix zone activation with missing devices
btrfs: zoned: fix zone finishing with missing devices
Mark Harmstone (2):
btrfs: avoid linker error in btrfs_find_create_tree_block()
btrfs: don't clobber ret in btrfs_validate_super()
Matthew Wilcox (Oracle) (2):
btrfs: update some folio related comments
btrfs: convert io_ctl_prepare_pages() to work on folios
Qu Wenruo (32):
btrfs: remove duplicated metadata folio flag update in end_bbio_meta_read()
btrfs: always fallback to buffered write if the inode requires checksum
btrfs: zlib: refactor S390x HW acceleration buffer preparation
btrfs: expose per-inode stable writes flag
btrfs: factor out nocow ordered extent and extent map generation into a helper
btrfs: move ordered extent cleanup to where they are allocated
btrfs: remove btrfs_fs_info::sectors_per_page
btrfs: factor out metadata subpage detection into a dedicated helper
btrfs: make subpage attach and detach handle metadata properly
btrfs: use metadata specific helpers to simplify extent buffer helpers
btrfs: simplify subpage handling of btrfs_clear_buffer_dirty()
btrfs: simplify subpage handling of write_one_eb()
btrfs: simplify subpage handling of read_extent_buffer_pages_nowait()
btrfs: require strict data/metadata split for subpage checks
btrfs: prevent inline data extents read from touching blocks beyond its range
btrfs: fix the qgroup data free range for inline data extents
btrfs: introduce a read path dedicated extent lock helper
btrfs: make btrfs_do_readpage() to do block-by-block read
btrfs: allow buffered write to avoid full page read if it's block aligned
btrfs: allow inline data extents creation if block size < page size
btrfs: remove the subpage related warning message
btrfs: properly limit inline data extent according to block size
btrfs: allow debug builds to accept 2K block size
btrfs: reject out-of-band dirty folios during writeback
btrfs: run btrfs_error_commit_super() early
btrfs: add extra warning if delayed iput is added when it's not allowed
btrfs: subpage: make btrfs_is_subpage() check against a folio
btrfs: add a size parameter to btrfs_alloc_subpage()
btrfs: replace PAGE_SIZE with folio_size for subpage.[ch]
btrfs: prepare btrfs_launcher_folio() for large folios support
btrfs: prepare extent_io.c for future large folio support
btrfs: prepare btrfs_page_mkwrite() for large folios
Sun YangKai (3):
btrfs: simplify the return value handling in search_ioctl()
btrfs: remove unnecessary btrfs_key local variable in btrfs_search_forward()
btrfs: avoid redundant path slot assignment in btrfs_search_forward()
fs/btrfs/accessors.h | 1 +
fs/btrfs/acl.h | 2 +
fs/btrfs/async-thread.c | 11 +-
fs/btrfs/backref.c | 4 +-
fs/btrfs/bio.c | 38 +--
fs/btrfs/block-group.c | 155 ++++++----
fs/btrfs/btrfs_inode.h | 17 +-
fs/btrfs/compression.c | 31 +-
fs/btrfs/compression.h | 26 +-
fs/btrfs/ctree.c | 18 +-
fs/btrfs/ctree.h | 2 +-
fs/btrfs/defrag.c | 78 ++---
fs/btrfs/defrag.h | 4 +-
fs/btrfs/delayed-inode.c | 99 ++++---
fs/btrfs/delayed-inode.h | 2 +-
fs/btrfs/delayed-ref.h | 2 +
fs/btrfs/dev-replace.c | 33 +--
fs/btrfs/dir-item.c | 24 +-
fs/btrfs/dir-item.h | 1 +
fs/btrfs/direct-io.c | 19 +-
fs/btrfs/direct-io.h | 2 +
fs/btrfs/discard.c | 34 ++-
fs/btrfs/discard.h | 1 +
fs/btrfs/disk-io.c | 109 ++++---
fs/btrfs/export.c | 51 ++--
fs/btrfs/extent-io-tree.c | 8 +-
fs/btrfs/extent-tree.c | 63 ++--
fs/btrfs/extent-tree.h | 1 -
fs/btrfs/extent_io.c | 589 ++++++++++++++++++++++----------------
fs/btrfs/extent_io.h | 9 +-
fs/btrfs/file-item.c | 30 +-
fs/btrfs/file-item.h | 2 +
fs/btrfs/file.c | 28 +-
fs/btrfs/file.h | 2 +
fs/btrfs/free-space-cache.c | 57 ++--
fs/btrfs/free-space-tree.c | 45 ++-
fs/btrfs/fs.c | 1 -
fs/btrfs/fs.h | 26 +-
fs/btrfs/inode-item.c | 6 +-
fs/btrfs/inode.c | 587 +++++++++++++++++++------------------
fs/btrfs/ioctl.c | 217 +++++++-------
fs/btrfs/ioctl.h | 4 +-
fs/btrfs/locking.c | 1 -
fs/btrfs/ordered-data.c | 23 +-
fs/btrfs/ordered-data.h | 9 +-
fs/btrfs/print-tree.h | 2 +
fs/btrfs/props.c | 66 ++---
fs/btrfs/props.h | 8 +-
fs/btrfs/qgroup.c | 2 +-
fs/btrfs/qgroup.h | 3 +
fs/btrfs/raid-stripe-tree.h | 1 +
fs/btrfs/reflink.c | 100 +++----
fs/btrfs/relocation.c | 30 +-
fs/btrfs/scrub.c | 4 +-
fs/btrfs/send.c | 544 ++++++++++++++++-------------------
fs/btrfs/send.h | 4 +-
fs/btrfs/space-info.c | 2 +-
fs/btrfs/subpage.c | 224 +++++++++------
fs/btrfs/subpage.h | 56 +++-
fs/btrfs/super.c | 6 +-
fs/btrfs/sysfs.c | 14 +-
fs/btrfs/sysfs.h | 1 +
fs/btrfs/tests/extent-io-tests.c | 6 +-
fs/btrfs/tests/extent-map-tests.c | 1 +
fs/btrfs/transaction.c | 39 ++-
fs/btrfs/tree-log.c | 392 ++++++++++++-------------
fs/btrfs/verity.c | 4 +-
fs/btrfs/volumes.c | 16 +-
fs/btrfs/volumes.h | 4 +
fs/btrfs/xattr.h | 2 +
fs/btrfs/zlib.c | 83 ++++--
fs/btrfs/zoned.c | 9 +
fs/btrfs/zstd.c | 66 +++--
include/uapi/linux/btrfs.h | 16 +-
74 files changed, 2263 insertions(+), 1914 deletions(-)
next reply other threads:[~2025-03-24 16:37 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-24 16:37 David Sterba [this message]
2025-03-27 20:48 ` [GIT PULL] Btrfs updates for 6.15 pr-tracker-bot
2025-03-28 13:27 ` Josef Bacik
2025-03-28 17:36 ` David Sterba
2025-03-28 19:39 ` Josef Bacik
2025-03-28 21:36 ` Qu Wenruo
2025-03-31 9:35 ` Daniel Vacek
2025-03-31 23:58 ` David Sterba
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.1742834133.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.