Re: [GIT PULL] bcachefs changes for 6.17

Malte Schröder
2025-08-05T21:19:39Z

On 28.07.25 17:14, Kent Overstreet wrote:
> Schedule notes for users:
>
> I've been digging through the bug tracker and polling users to see what
> bugs are still outstanding, and - it's not much.
>
> So, the experimental label is coming off in 6.18.
>
> As always, if you do hit a bug, please report it.
>
> -------------------------------
>
> The following changes since commit c37495fe3531647db4ae5787a80699ae1438d7cf:
>
> bcachefs: Add missing snapshots_seen_add_inorder() (2025-07-24 22:56:37 -0400)
>
> are available in the Git repository at:
>
> git://evilpiepirate.org/bcachefs.git tags/bcachefs-2025-07-28
>
> for you to fetch changes up to c0d938c16b674bfe9e710579344653b703b92a49:
>
> bcachefs: Add missing error_throw to bch2_set_version_incompat() (2025-07-25 12:03:48 -0400)
>
> ----------------------------------------------------------------
> bcachefs changes for 6.17-rc1
>
> No noteworthy feature work: we're in hard freeze.
>
> Lots of bugfixes. Assorted user visible changes and fixes:
>
> - Fix a major performance bug when deleting many files: this was caused
> by the key cache caching keys that had been deleted, causing certain
> lookups in the inode triggers to scan excessively.
>
> - The "io_read_nopromote" counter has been broken out into sub-counters;
> these can be seen with 'bcachefs fs top' on a recent bcachefs-tools.
> This helps when diagnosing why reads aren't coming from the cache.
>
> - Congestion tracking is now a bit less aggressive (this controls when
> we decide to do a promote); this area still needs more work.
>
> - Metadata writes are no longer throttled by writeback throttling
>
> - Nocow writes can now be rebalanced (e.g. background_target,
> background_compression options)
>
> - (Almost) all recovery passes now have progress indicators.
>
> - Repair improvements: we'll now reconstruct missing inodes if we find
> contents for that inode (more than one or two keys), not just if the
> inodes btree was damaged: similarly for 'dirent to missing inode'.
>
> - Btree node tracepoint improvements: they've been converted to more
> modern printbuf tracepoints, and include significantly more info.
>
> - Fix in-memory accounting going out of sync with the accounting btree
> when doing accounting updates before going RW.
>
> - BCH_MIN_NR_BUCKETS (minimum number of buckets per device) has been
> increased from 64 to 512. In the unlikely event that anyone anyone
> actually was using bcachefs on sub 128M filesystems and doesn't want
> to lose access (modern tools will format these small filesystems with
> a more appropriate bucket size), please file a report or contact me.
>
> (This was just a syzbot issue, so far as I know).
>
> - CLASS()/guard() conversion: a great deal of code has been converted to
> the new __cleanup based resource handling, and away from 'goto err'
> cleanup.

So, no merge yet? That really is a bummer. I was really hoping to
finally be able to run mainline Linux again on my boxes (yes, I
converted all of them to bcachefs early this year), now that pretty much
all issues I was hitting are fixed by this merge request.

I mean, at the rate Kent's tree is stabilizing right now I am actually
considering moving some productive systems over there. But those will
need to run distro kernels. So, please merge, I don't want to jump
through the hoops to run OpenZFS ...

Kind regards

Malte

> ----------------------------------------------------------------
> Alan Huang (5):
> bcachefs: Don't memcpy more than needed
> bcachefs: Refactor trans->mem allocation
> bcachefs: Shut up clang warning
> bcachefs: Don't lock exec_update_lock
> bcachefs: Use user_backed_iter instead of iter_is_iovec
>
> Anindya Sundar Gayen (1):
> bcachefs: remove extraneous ; after statements
>
> George Hu (1):
> bcachefs: use union for bch_compression_opt to make encode & decode easier
>
> Kent Overstreet (193):
> bcachefs: Fix UAF by journal write path
> bcachefs: async_objs: update iter pos after obj printed
> bcachefs: fsck: dir_loop, subvol_loop now autofix
> bcachefs: kill darray_u32_has()
> bcachefs: Reduce __bch2_btree_node_alloc() stack usage
> bcachefs: Allow CONFIG_UNICODE=m
> bcachefs: use scoped_guard() in fast_list.c
> bcachefs: DEFINE_CLASS()es for dev refcounts
> bcachefs: More errcode conversions
> bcachefs: add an unlikely() to trans_begin()
> bcachefs: Plumb trans_kmalloc ip to trans_log_msg
> bcachefs: Don't log error twice in allocator async repair
> bcachefs: bch2_trans_has_updates()
> bcachefs: Improve inode deletion
> bcachefs: Don't peek key cache unless we have a real key
> bcachefs: Evict/bypass key cache when deleting
> bcachefs: -o fix_errors may now be used without -o fsck
> bcachefs: Improved btree node tracepoints
> bcachefs: Finish error_throw tracepoints
> bcachefs: Improve inode_create behaviour on old filesystems
> bcachefs: Before removing dangling dirents, check for contents
> bcachefs: check_key_has_inode() reconstructs more aggressively
> bcachefs: bch_fs.devs_removed
> bcachefs: ptr_to_removed_device
> bcachefs: bch2_journal_entry_missing_range()
> bcachefs: Faster checking for missing journal entries
> bcachefs: Add missing bch2_log_msg_start()
> bcachefs: Print errcode when bch2_read_extent() sees error
> bcachefs: Fix error message in buffered read path
> bcachefs: Debug param for injecting btree node corruption on read
> bcachefs: device add now properly sets c->online_devs
> bcachefs: silence userspace build warning
> bcachefs: Update path flags cleanups
> bcachefs: add missing log message newline
> bcachefs: add missing includes
> bcachefs: silence userspace build warning
> bcachefs: trace_data_update_done_no_rw_devs
> bcachefs: use kvzalloc() for journal bios
> bcachefs: Improve nopromote visibility
> bcachefs: unsigned -> enum bch_trans_commit_flags
> bcachefs: __bch2_btree_node_alloc() now respects target
> bcachefs: bch2_btree_write_buffer_insert_checks()
> bcachefs: don't call get_update_rebalance_opts() on btree ptrs
> bcachefs: kill bch2_err_str() BUG_ON()
> bcachefs: bch2_read_bio_to_text(): tabstops
> bcachefs: kill __bch2_print_str()
> bcachefs: bch_log()
> bcachefs: c->loglevel
> bcachefs: Zero list_idx when deleting from async obj lists
> bcachefs: fix device add before fs started
> bcachefs: fast_list: warn if non-empty on exit
> bcachefs: bch2_journal_key_insert_take() accumulates accounting updates
> bcachefs: bch2_fs_initialize() now runs journal replay
> bcachefs: do_bch2_trans_commit_to_journal_replay handles accounting
> bcachefs: bch2_set_nr_journal_buckets_iter() always marks
> bcachefs: bch2_fs_initialize() initializes before going RW
> bcachefs: Improve bch2_read_bio_to_text()
> bcachefs: Fix replicas max options
> bcachefs: Better congestion visibilty in sysfs
> bcachefs: nopromote sub counters
> bcachefs: make congestion tracking less aggressive
> bcachefs: __bset_aux_tree_verify_ro()
> bcachefs: Add missing bch2_bkey_set_needs_rebalance to nocow write path
> bcachefs: delete useless null ptr check
> bcachefs: Also create snapshots with CAP_FOWNER
> bcachefs: Fix missing compat code in check_subvol()
> bcachefs: Fix UAF in check_dirent()
> bcachefs: Fix journal assertion
> bcachefs: Fix __bch2_fs_read_write() error path
> bcachefs: Give debugfs cached btree nodes better indentation
> bcachefs: Silence clang warning about enum types
> bcachefs: kill bkey_journal_seq()
> bcachefs: don't pass bch_ioctl_data by value
> bcachefs: better device too small error message
> bcachefs: check_i_sectors now prints paths
> bcachefs: simplify bch2_trans_do()
> bcachefs: DEFINE_GUARD(printbuf_atomic)
> bcachefs: convert super-io.c to CLASS/guards
> bcachefs: convert super.c to CLASS/guards
> bcachefs: convert acl.c to CLASS/guards
> bcachefs: convert xattr.c to CLASS/guards
> bcachefs: convert thread_with_file.c to CLASS/guards
> bcachefs: convert unit tests to CLASS/guards
> bcachefs: convert util.[ch] to CLASS/guards
> bcachefs: convert six.c to guards
> bcachefs: convert progress.c to guards
> bcachefs: convert enumerated_ref.c to guards
> bcachefs: convert opts.c to CLASS/guards
> bcachefs: convert sysfs.c to CLASS/guards
> bcachefs: convert buckets_waiting_for_journal.c to CLASS/guards
> bcachefs: convert quota.c to CLASS/guards
> bcachefs: convert sb-clean.c to CLASS/guards
> bcachefs: convert sb-downgrade.c to CLASS/guards
> bcachefs: convert sb-errors.c to CLASS/guards
> bcachefs: convert sb-members.c to CLASS/guards
> bcachefs: convert clock.c to CLASS/guards
> bcachefs: convert debug.c to CLASS/guards
> bcachefs: convert nocow_locking.c to CLASS/guards
> bcachefs: convert replicas.c to CLASS/guards
> bcachefs: convert bset.c to CLASS
> bcachefs: convert bkey.c to CLASS
> bcachefs: convert chardev.c to CLASS
> bcachefs: convert fs-ioctl.c to CLASS/guards
> bcachefs: convert disk_groups.c to guards
> bcachefs: convert checksum.c to CLASS/guards
> bcachefs: convert compress.c to guards
> bcachefs: convert rebalance.c to CLASS/guards
> bcachefs: convert migrate.c to CLASS/guards
> bcachefs: convert move.c to CLASS/guards
> bcachefs: convert movinggc.c to CLASS
> bcachefs: convert data_update.c to CLASS/guards
> bcachefs: convert reflink.c to CLASS/guards
> bcachefs: convert snapshot.c to CLASS/guards
> bcachefs: convert subvolume.c to CLASS/guards
> bcachefs: convert str_hash.c to CLASS
> bcachefs: convert recovery_passes.c to CLASS/guards
> bcachefs: convert recovery.c to CLASS/guards
> bcachefs: convert lru.c to CLASS
> bcachefs: convert extents.c to guards
> bcachefs: convert logged_ops.c to CLASS
> bcachefs: convert inode.c to CLASS
> bcachefs: convert dirent.c to CLASS
> bcachefs: convert namei.c to CLASS
> bcachefs: convert io_read.c to CLASS/guards
> bcachefs: convert io_write.c to CLASS/guards
> bcachefs: convert io_misc.c to CLASS/guards
> bcachefs: convert fsck.c to CLASS/guards
> bcachefs: convert disk_accounting.c to CLASS/guards
> bcachefs: convert buckets.c to CLASS/guards
> bcachefs: convert ec.c to CLASS/guards
> bcachefs: convert backpointers.c to CLASS/guards
> bcachefs: convert alloc_background.c to CLASS/guards
> bcachefs: convert alloc_foreground.c to CLASS/guards
> bcachefs: convert fs.c to CLASS/guards
> bcachefs: convert fs-io.c to CLASS/guards
> bcachefs: convert fs-io-pagecache.c to CLASS/guards
> bcachefs: convert fs-io-buffered.c to CLASS/guards
> bcachefs: convert fs-io-direct.c to CLASS/guards
> bcachefs: convert btree_node_scan.c to CLASS/guards
> bcachefs: convert journal.c to CLASS/guards
> bcachefs: convert journal_io.c to CLASS/guards
> bcachefs: convert journal_reclaim.c to CLASS/guards
> bcachefs: convert journal_seq_blacklist.c to CLASS/guards
> bcachefs: convert btree_cache.c to CLASS/guards
> bcachefs: convert btree_gc.c to CLASS/guards
> bcachefs: convert btree_write_buffer.c to CLASS/guards
> bcachefs: convert btree_update.c to CLASS/guards
> bcachefs: convert btree_update_interior.c to CLASS/guards
> bcachefs: convert btree_trans_commit.c to CLASS/guards
> bcachefs: convert btree_key_cache.c to CLASS/guards
> bcachefs: convert btree_io.c to CLASS/guards
> bcachefs: convert btree_iter.c to CLASS/guards
> bcachefs: convert btree_locking.c to CLASS/guards
> bcachefs: convert btree_journal_iter.c to CLASS/guards
> bcachefs: bch2_run_recovery_pass() now prints errors
> bcachefs: convert error.c to CLASS/guards
> bcachefs: Fix padding zeroout when creating casefolded dirents
> bcachefs: Don't call bch2_recovery_pass_want_ratelimit without sb_lock
> bcachefs: Tell wbt throttling not to throttle metadata writes
> bcachefs: Kill redundant write_super() when running recovery passes
> bcachefs: Add comment to journal_flush_done()
> bcachefs: Don't emit empty journal entry for accounting
> bcachefs: sysfs trigger_btree_write_buffer_flush
> closures: Improve warnings on bad put
> bcachefs: Fix unhandled key type in fiemap_fill_extent
> bcachefs: Ensure we don't return with closure on waitlist
> bcachefs: bch2_move_data() now walks btree nodes
> bcachefs: rereplicate flushes interior updates
> bcachefs: can_use_btree_node()
> bcachefs: Fix error handling in btree_iter_peek_slot
> bcachefs: fix assert in bch2_btree_path_traverse_cached()
> bcachefs: Fix allocate_dropping_locks() usage
> bcachefs: log devices we're scanning in btree node scan
> bcachefs: Fix refs to undefined fields in __bch2_alloc_v4_to_text()
> bcachefs: fix check_extent_overbig() call
> bcachefs: Convert topology repair errs to standard error codes
> bcachefs: Fix __bch2_alloc_to_v4 copy
> bcachefs: Flush btree_interior_update_work before freeing fs
> bcachefs: Only track read latency for congestion tracking
> bcachefs: Clean up btree_node_read_work() error handling
> bcachefs: Ensure pick_read_device() returns error for btree pointers
> bcachefs: btree_lost_data: mark a few more errors for silent fixing
> bcachefs: Don't allow mounting with crazy numbers of dirty journal entries
> bcachefs: Add pass_done to recovery_pass_status_to_text()
> bcachefs: Increase BCH_MIN_NR_NBUCKETS
> bcachefs: Hook up progress indicators for most recovery passes
> bcachefs: recovery_pass_will_run()
> bcachefs: journal_entry_btree_keys_to_text() is more careful
> bcachefs: dirent_to_text() now uses prt_bytes()
> bcachefs: Add missing ei_last_dirtied update
> bcachefs: snapshots: pass snapshot_table where appropriate
> bcachefs: live_child() no longer uses recursion
> bcachefs: Add missing error_throw to bch2_set_version_incompat()
>
> Nikita Ofitserov (1):
> bcachefs: Suppress unnecessary inode_i_sectors_wrong fsck error
>
> Youling Tang (2):
> bcachefs: Simplify bch2_bio_map()
> bcachefs: Use bio_add_folio_nofail() for unfailable operations
>
> fs/bcachefs/acl.c | 19 +-
> fs/bcachefs/alloc_background.c | 300 +++++++---------
> fs/bcachefs/alloc_background.h | 9 +-
> fs/bcachefs/alloc_foreground.c | 209 +++++------
> fs/bcachefs/alloc_foreground.h | 9 +-
> fs/bcachefs/async_objs.c | 29 +-
> fs/bcachefs/async_objs.h | 7 +-
> fs/bcachefs/async_objs_types.h | 2 +-
> fs/bcachefs/backpointers.c | 63 ++--
> fs/bcachefs/bcachefs.h | 72 ++--
> fs/bcachefs/bkey.c | 4 +-
> fs/bcachefs/bset.c | 74 ++--
> fs/bcachefs/btree_cache.c | 38 +-
> fs/bcachefs/btree_cache.h | 11 +
> fs/bcachefs/btree_gc.c | 122 +++----
> fs/bcachefs/btree_io.c | 119 ++++---
> fs/bcachefs/btree_iter.c | 129 ++++---
> fs/bcachefs/btree_iter.h | 22 +-
> fs/bcachefs/btree_journal_iter.c | 20 +-
> fs/bcachefs/btree_key_cache.c | 16 +-
> fs/bcachefs/btree_locking.c | 17 +-
> fs/bcachefs/btree_node_scan.c | 32 +-
> fs/bcachefs/btree_trans_commit.c | 121 ++++---
> fs/bcachefs/btree_types.h | 22 +-
> fs/bcachefs/btree_update.c | 171 +++++----
> fs/bcachefs/btree_update.h | 79 +++--
> fs/bcachefs/btree_update_interior.c | 335 +++++++++---------
> fs/bcachefs/btree_update_interior.h | 12 +-
> fs/bcachefs/btree_write_buffer.c | 45 ++-
> fs/bcachefs/btree_write_buffer.h | 6 +-
> fs/bcachefs/buckets.c | 212 +++++------
> fs/bcachefs/buckets_waiting_for_journal.c | 30 +-
> fs/bcachefs/chardev.c | 120 ++-----
> fs/bcachefs/checksum.c | 54 ++-
> fs/bcachefs/clock.c | 17 +-
> fs/bcachefs/compress.c | 29 +-
> fs/bcachefs/compress.h | 36 +-
> fs/bcachefs/data_update.c | 33 +-
> fs/bcachefs/debug.c | 92 +++--
> fs/bcachefs/dirent.c | 42 +--
> fs/bcachefs/dirent.h | 4 +-
> fs/bcachefs/disk_accounting.c | 266 +++++++-------
> fs/bcachefs/disk_accounting.h | 9 +-
> fs/bcachefs/disk_groups.c | 27 +-
> fs/bcachefs/ec.c | 239 +++++--------
> fs/bcachefs/ec.h | 2 +-
> fs/bcachefs/enumerated_ref.c | 4 +-
> fs/bcachefs/errcode.c | 3 +-
> fs/bcachefs/errcode.h | 13 +
> fs/bcachefs/error.c | 65 ++--
> fs/bcachefs/extents.c | 38 +-
> fs/bcachefs/extents.h | 3 +
> fs/bcachefs/fast_list.c | 32 +-
> fs/bcachefs/fast_list.h | 2 +-
> fs/bcachefs/fs-io-buffered.c | 79 ++---
> fs/bcachefs/fs-io-direct.c | 11 +-
> fs/bcachefs/fs-io-pagecache.c | 55 ++-
> fs/bcachefs/fs-io.c | 127 ++++---
> fs/bcachefs/fs-io.h | 19 +-
> fs/bcachefs/fs-ioctl.c | 33 +-
> fs/bcachefs/fs.c | 192 +++++-----
> fs/bcachefs/fsck.c | 427 ++++++++++++----------
> fs/bcachefs/inode.c | 101 +++---
> fs/bcachefs/io_misc.c | 36 +-
> fs/bcachefs/io_read.c | 157 +++++---
> fs/bcachefs/io_read.h | 20 +-
> fs/bcachefs/io_write.c | 46 +--
> fs/bcachefs/journal.c | 253 ++++++-------
> fs/bcachefs/journal.h | 3 +-
> fs/bcachefs/journal_io.c | 248 ++++++-------
> fs/bcachefs/journal_io.h | 7 +
> fs/bcachefs/journal_reclaim.c | 220 ++++++------
> fs/bcachefs/journal_seq_blacklist.c | 56 ++-
> fs/bcachefs/journal_seq_blacklist.h | 3 +
> fs/bcachefs/logged_ops.c | 14 +-
> fs/bcachefs/lru.c | 24 +-
> fs/bcachefs/migrate.c | 21 +-
> fs/bcachefs/move.c | 218 +++++-------
> fs/bcachefs/move.h | 14 +-
> fs/bcachefs/movinggc.c | 6 +-
> fs/bcachefs/namei.c | 26 +-
> fs/bcachefs/nocow_locking.c | 10 +-
> fs/bcachefs/opts.c | 33 +-
> fs/bcachefs/opts.h | 8 +-
> fs/bcachefs/printbuf.h | 4 +
> fs/bcachefs/progress.c | 6 +-
> fs/bcachefs/progress.h | 3 +
> fs/bcachefs/quota.c | 96 ++---
> fs/bcachefs/rebalance.c | 57 ++-
> fs/bcachefs/recovery.c | 213 +++++------
> fs/bcachefs/recovery_passes.c | 68 ++--
> fs/bcachefs/recovery_passes.h | 9 +-
> fs/bcachefs/reflink.c | 63 ++--
> fs/bcachefs/replicas.c | 147 ++++----
> fs/bcachefs/sb-clean.c | 36 +-
> fs/bcachefs/sb-counters_format.h | 6 +
> fs/bcachefs/sb-downgrade.c | 19 +-
> fs/bcachefs/sb-errors.c | 45 +--
> fs/bcachefs/sb-errors_format.h | 9 +-
> fs/bcachefs/sb-members.c | 48 ++-
> fs/bcachefs/sb-members.h | 19 +-
> fs/bcachefs/sb-members_format.h | 2 +-
> fs/bcachefs/six.c | 21 +-
> fs/bcachefs/snapshot.c | 179 ++++------
> fs/bcachefs/snapshot.h | 32 +-
> fs/bcachefs/snapshot_types.h | 2 +-
> fs/bcachefs/str_hash.c | 23 +-
> fs/bcachefs/str_hash.h | 4 +-
> fs/bcachefs/subvolume.c | 106 +++---
> fs/bcachefs/super-io.c | 81 ++---
> fs/bcachefs/super.c | 570 ++++++++++++++----------------
> fs/bcachefs/sysfs.c | 28 +-
> fs/bcachefs/tests.c | 198 +++++------
> fs/bcachefs/thread_with_file.c | 52 +--
> fs/bcachefs/time_stats.c | 7 +-
> fs/bcachefs/trace.h | 152 ++------
> fs/bcachefs/util.c | 28 +-
> fs/bcachefs/util.h | 10 +-
> fs/bcachefs/xattr.c | 52 ++-
> lib/closure.c | 12 +-
> 120 files changed, 3972 insertions(+), 4388 deletions(-)
>