mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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.4
Date: Thu, 15 Oct 2026 19:57:24 +0200	[thread overview]
Message-ID: <cover.1792086912.git.dsterba@suse.com> (raw)

Hi,

there's a handful of user visible changes, some of them fixes and the
rest is in the core.  There are some minor performance improvements too.

Please pull, thanks.

User visible changes:

- remove tweakable sysfs way to enable features, used only for extent-irefs
  which has been default since 3.12; the sysfs interface makes it complicated
  due to locking and context, unlike ioctl

- change which backup superblock does mount option 'rescue=usebackuproot'
  choose, skip the last one due to rotation, for more fine grained control add
  options selecting a specific backup superblock by index (usebackuproot_N)

Notable fixes:

- syslog message fixup of error state description, duplicate 'E' renamed to 'H'
  (emergency shutdown), added 'I 'when delayed iputs are blocked

- use kvmalloc for b-tree buffer allocations, as we're using more contig ranges
  because of large folios, the allocations started to warn on fragmented memory

- handle unknown commands for the /dev/btrfs-control ioctls

- tune timing of transaction commit when the space is getting low

- in raid56, skip verifications if data checksums are not available

Performance improvements:

- reflink speedup, reorder locking and flushing to optimize for more common
  cases where the reflinked ranges are accessed, avoid unnecessary contention

- minor speedup in zstd decompression (+8MB/s)

- reduced contention of inode extent map lock, improves e.g. when shrinker
  processes inodes without extent maps, measured time reduction 10-20%

Core changes:

- move allocation errors out of some contexts (new inode/dentry/rename) to
  avoid transaction aborts

- allocate system new chunks earlier, e.g. when consumed by fallocate, and tune
  deleting unused block groups if the system space is low

- tree checker: reject extents for special files

- many qgroup fixes regarding enabling/disabling, other state changes and
  qgroup relation updates

- error handling fixes

- refactoring, cleanups
  - page to folio cleanups
  - transaction state macros/enums simplification
  - parameter simplifications

----------------------------------------------------------------
The following changes since commit 24a19b953e2a3d0ea5a8c4951a0ab8f32720c907:

  Linux 7.3-rc7 (2026-10-11 20:04:55 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git tags/for-7.4-tag

for you to fetch changes up to 58e844c3ba387ceb0f527a6ba82aa50c81c4d7b7:

  btrfs: fix use-after-free on quota enable allocation failure (2026-10-12 23:59:21 +0200)

----------------------------------------------------------------
Boris Burkov (6):
      btrfs: keep unused block groups queued when a pass fails
      btrfs: pre-flush reflink source before taking inode locks
      btrfs: skip unlocked reflink source flush if the inode has writers
      btrfs: downgrade the reflink source inode lock for tree walking
      btrfs: allocate additional SYSTEM space earlier
      btrfs: commit after deleting an unused block group if system space is low

Breno Leitao (1):
      btrfs: skip extent tree lock in the shrinker for inodes without extent maps

Daniel Vacek (2):
      btrfs: consume given iter directly instead of copying in csum_one_bio()
      btrfs: use bio::remaining for async checksumming synchronization

Filipe Manana (31):
      btrfs: increment extent count once when logging extents during fast fsync
      btrfs: tree-checker: cache accessor return value in CHECK_FE_ALIGNED()
      btrfs: add missing unlikely to a couple error checks during sys chunk array validation
      btrfs: remove redundant eb generation check in btrfs_buffer_uptodate()
      btrfs: remove duplicate error message when writing super blocks
      btrfs: fix off by one super block end offset calculation when writing super blocks
      btrfs: fix barrier usage in btrfs_record_root_in_trans()
      btrfs: assert reloc mutex is held in record_root_in_trans()
      btrfs: fix dangling nodes in tree-mod-log after error in btrfs_tree_mod_log_insert_root()
      btrfs: simplify dir item location setup in btrfs_insert_xattr_item()
      btrfs: fix incomplete iteration over fs state when logging messages
      btrfs: fix duplicated code in fs state string in logged messages
      btrfs: add missing code for no delayed iput fs state in log messages
      btrfs: remove unnecessary pointer increment in btrfs_state_to_string()
      btrfs: avoid overhead when logging messages if fs state is clean
      btrfs: fix off-by-one end offset check in report_setget_bounds()
      btrfs: remove fs_info argument from btrfs_block_rsv_add()
      btrfs: remove fs_info argument from btrfs_block_rsv_refill()
      btrfs: remove pointless qgroup assignment in block_rsv_release_bytes()
      btrfs: remove unnecessary forward struct declarations in volumes.h
      btrfs: qgroup: fix swapped blocks existence check when tracing after COW
      btrfs: qgroup: abort transaction on failure to add qgroup relation
      btrfs: qgroup: fix leak of qgroups in rb tree after failure to enable quotas
      btrfs: qgroup: merge error labels in btrfs_quota_enable()
      btrfs: abort transaction on qgroup failures in create_pending_snapshot()
      btrfs: qgroup: fix off-by-one max level check in qgroup_trace_new_subtree_blocks()
      btrfs: fix lost error return value in btrfs_alloc_logged_file_extent()
      btrfs: qgroup: make btrfs_record_squota_delta() return void
      btrfs: use READ_ONCE() to read the chunk size from the data space_info
      btrfs: defrag: fix key comparison with max defrag key in btrfs_defrag_leaves()
      btrfs: defrag: fix check to see if next extent can be defragged too

Guanghui Yang (2):
      btrfs: free unlinked replace target on initialization failure
      btrfs: roll back sprout setup after device add failure

Hemanth Selam (1):
      btrfs: fix typos and repeated words in comments

Hengyu Liang (1):
      btrfs: return -ENOTTY for unknown ioctls on the control device

Jeff Layton (4):
      btrfs: split btrfs_insert_delayed_dir_index() into prealloc and commit phases
      btrfs: pre-allocate delayed dir index before btree modification
      btrfs: handle ENOMEM from btrfs_insert_dir_item() without aborting
      btrfs: pre-allocate delayed dir index for non-overwrite rename

Johannes Thumshirn (1):
      btrfs: zoned: fix double list add in btrfs_load_block_group_zone_info

Peng Fan (1):
      btrfs: use assign_bit() where applicable

Qu Wenruo (29):
      btrfs: refactor read_key_bytes() to remove the dest_folio parameter
      btrfs: replace btrfs_repair_io_failure() to use bio for page iteration
      btrfs: enhance btrfs_data_csum_ok() to use bio for page iteration
      btrfs: use a shared helper to calculate data checksum for a bio
      btrfs: remove on-stack paddrs[] array usage
      btrfs: remove unused variable flags from btrfs_read_qgroup_config()
      btrfs: qgroup: use atomic operations for btrfs_fs_info::qgroup_flags
      btrfs: reject new qgroup rescan during subvolume dropping
      btrfs: avoid long stall when dropping a non-shared large subvolume
      btrfs: remove runtime tweakable feature sysfs interface
      btrfs: use ordered extent to grab the logical address for submission
      btrfs: tree-checker: reject file extent items for special files
      btrfs: use kvmalloc() for b-tree split_item()
      btrfs: tree-log: use kvmalloc() for overwrite_item()
      btrfs: use kvmalloc() for uncompress_inline()
      btrfs: use kvmalloc() to allocate compression workspace buffer for zlib and zstd
      btrfs: cleanup and rename submit_extent_folio()
      btrfs: fix off-by-one end related to inode_need_compress()
      btrfs: simplify heuristic_collect_sample() to handle large folios better
      btrfs: move __TRANS_* and TRANS_* flags out of transaction.h
      btrfs: remove __TRANS_FREEZABLE
      btrfs: remove __TRANS_* flags
      btrfs: qgroup: do not treat "ret > 0" as error when deleting a qgroup
      btrfs: qgroup: use qgroup_mark_inconsistent() in quick_update_accounting()
      btrfs: qgroup: do not leak -ENOENT from btrfs_remove_qgroup()
      btrfs: raid56: do not verify the content if there is no data checksum
      btrfs: always use the second newest slot for rescue=usebackuproot
      btrfs: introduce more accurate usebackuproot options
      btrfs: prevent use-after-free in btrfs_transaction::switch_commits

Tal Zussman (8):
      btrfs: tests: rename process_page_range() to process_folio_range()
      btrfs: tests: convert test_find_delalloc() to use folios
      btrfs: tests: use eb folio helpers in extent buffer memory checks
      btrfs: convert btrfs_compr_pool_scan() to use folios
      btrfs: convert heuristic_collect_sample() to use folios
      btrfs: fix stale function references in compression comments
      btrfs: use folios for reading super blocks from the block device
      btrfs: use u64 for the page indices in heuristic_collect_sample()

Usama Arif (1):
      btrfs: zstd: avoid a copy in zstd_decompress_bio()

Wentao Liang (1):
      btrfs: zoned: fix block group reference leak in btrfs_repair_one_zone()

Yalagada Pavan Kumar (1):
      btrfs: fix use-after-free on quota enable allocation failure

Yang Xiuwei (1):
      btrfs: drop unused uring encoded IO REISSUE stash helpers

Zhen Ni (1):
      btrfs: replace is_data_bbio() with is_data_inode() for direct usage

 fs/btrfs/accessors.c             |   2 +-
 fs/btrfs/backref.c               |   2 +-
 fs/btrfs/bio.c                   | 163 +++++++++++---------------
 fs/btrfs/bio.h                   |   9 +-
 fs/btrfs/block-group.c           |  65 +++++++++--
 fs/btrfs/block-group.h           |   2 +-
 fs/btrfs/block-rsv.c             |  12 +-
 fs/btrfs/block-rsv.h             |   6 +-
 fs/btrfs/btrfs_inode.h           |  22 ++--
 fs/btrfs/compression.c           |  61 +++++-----
 fs/btrfs/ctree.c                 |   4 +-
 fs/btrfs/ctree.h                 |   2 +-
 fs/btrfs/defrag.c                |   8 +-
 fs/btrfs/delayed-inode.c         | 118 ++++++++++++++-----
 fs/btrfs/delayed-inode.h         |  22 +++-
 fs/btrfs/dev-replace.c           |  10 +-
 fs/btrfs/dir-item.c              |  50 +++++---
 fs/btrfs/dir-item.h              |   5 +-
 fs/btrfs/direct-io.c             |   7 ++
 fs/btrfs/disk-io.c               | 167 +++++++++++++-------------
 fs/btrfs/extent-io-tree.c        |   2 +-
 fs/btrfs/extent-tree.c           |  21 ++--
 fs/btrfs/extent_io.c             | 247 +++++++++++++++++++--------------------
 fs/btrfs/extent_map.c            |   8 ++
 fs/btrfs/file-item.c             |  35 ++----
 fs/btrfs/fs.c                    |   2 +-
 fs/btrfs/fs.h                    |   3 +-
 fs/btrfs/inode.c                 | 190 +++++++++++++++---------------
 fs/btrfs/ioctl.c                 |  14 +--
 fs/btrfs/messages.c              |  28 ++---
 fs/btrfs/props.c                 |   3 +-
 fs/btrfs/qgroup.c                | 212 +++++++++++++++++++--------------
 fs/btrfs/qgroup.h                |  20 +++-
 fs/btrfs/raid56.c                |  68 ++++++-----
 fs/btrfs/reflink.c               |  51 +++++++-
 fs/btrfs/relocation.c            |  13 +--
 fs/btrfs/root-tree.c             |   3 +-
 fs/btrfs/send.c                  |   2 +-
 fs/btrfs/space-info.c            |   4 +-
 fs/btrfs/super.c                 |  31 ++++-
 fs/btrfs/sysfs.c                 | 134 ++-------------------
 fs/btrfs/tests/btrfs-tests.c     |   9 --
 fs/btrfs/tests/btrfs-tests.h     |   2 -
 fs/btrfs/tests/extent-io-tests.c | 129 ++++++++++----------
 fs/btrfs/transaction.c           | 127 +++++++++++++-------
 fs/btrfs/transaction.h           |  31 ++---
 fs/btrfs/tree-checker.c          |  83 ++++++++++---
 fs/btrfs/tree-log.c              |  11 +-
 fs/btrfs/tree-mod-log.c          |  13 ++-
 fs/btrfs/verity.c                |  31 +++--
 fs/btrfs/volumes.c               |  67 ++++++++---
 fs/btrfs/volumes.h               |   4 +-
 fs/btrfs/zlib.c                  |  10 +-
 fs/btrfs/zoned.c                 |  20 ++--
 fs/btrfs/zstd.c                  |  73 +++++++++---
 include/uapi/linux/btrfs_tree.h  |  25 ++--
 56 files changed, 1360 insertions(+), 1103 deletions(-)

                 reply	other threads:[~2026-10-15 17:57 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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.1792086912.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

all inboxes | Powered by JetHome®