History log of /linux-6.15/fs/bcachefs/btree_write_buffer.c (Results 1 – 25 of 48)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
Revision tags: v6.15, v6.15-rc7, v6.15-rc6, v6.15-rc5, v6.15-rc4, v6.15-rc3, v6.15-rc2, v6.15-rc1
# 55fd97fb 26-Mar-2025 Kent Overstreet <[email protected]>

bcachefs: Use sort_nonatomic() instead of sort()

Fixes "task out to lunch" warnings during recovery on large machines
with lots of dirty data in the journal.

Signed-off-by: Kent Overstreet <kent.ov

bcachefs: Use sort_nonatomic() instead of sort()

Fixes "task out to lunch" warnings during recovery on large machines
with lots of dirty data in the journal.

Signed-off-by: Kent Overstreet <[email protected]>

show more ...


Revision tags: v6.14
# 9180ad2e 21-Mar-2025 Kent Overstreet <[email protected]>

bcachefs: Kill btree_iter.trans

This was planned to be done ages ago, now finally completed; there are
places where we have quite a few btree_trans objects on the stack, so
this reduces stack usage

bcachefs: Kill btree_iter.trans

This was planned to be done ages ago, now finally completed; there are
places where we have quite a few btree_trans objects on the stack, so
this reduces stack usage somewhat.

Signed-off-by: Kent Overstreet <[email protected]>

show more ...


Revision tags: v6.14-rc7
# 90fd9ad5 14-Mar-2025 Kent Overstreet <[email protected]>

bcachefs: Change btree wb assert to runtime error

We just had a report of the assert for "btree in write buffer for
non-write buffer btree" popping during the 6.14 upgrade.

- 150TB filesystem, afte

bcachefs: Change btree wb assert to runtime error

We just had a report of the assert for "btree in write buffer for
non-write buffer btree" popping during the 6.14 upgrade.

- 150TB filesystem, after a reboot the upgrade was able to continue from
where it left off, so no major damage.

But with 6.14 about to come out we want to get this tracked down asap,
and need more data if other users hit this.

Convert the BUG_ON() to an emergency read-only, and print out btree, the
key itself, and stack trace from the original write buffer update (which
did not have this check before).

Reported-by: Stijn Tintel <[email protected]>
Signed-off-by: Kent Overstreet <[email protected]>

show more ...


Revision tags: v6.14-rc6, v6.14-rc5, v6.14-rc4, v6.14-rc3, v6.14-rc2, v6.14-rc1, v6.13, v6.13-rc7, v6.13-rc6, v6.13-rc5
# cb3f3498 24-Dec-2024 Kent Overstreet <[email protected]>

bcachefs: Assert that btree write buffer only touches the right btrees

More asserts, more better.

Also, clean up the per-btree flags a bit.

Signed-off-by: Kent Overstreet <[email protected]

bcachefs: Assert that btree write buffer only touches the right btrees

More asserts, more better.

Also, clean up the per-btree flags a bit.

Signed-off-by: Kent Overstreet <[email protected]>

show more ...


Revision tags: v6.13-rc4, v6.13-rc3
# 3f57171d 10-Dec-2024 Kent Overstreet <[email protected]>

bcachefs: trace_write_buffer_maybe_flush

Signed-off-by: Kent Overstreet <[email protected]>


Revision tags: v6.13-rc2, v6.13-rc1, v6.12, v6.12-rc7, v6.12-rc6, v6.12-rc5, v6.12-rc4, v6.12-rc3, v6.12-rc2, v6.12-rc1, v6.11, v6.11-rc7, v6.11-rc6, v6.11-rc5, v6.11-rc4, v6.11-rc3, v6.11-rc2, v6.11-rc1, v6.10, v6.10-rc7, v6.10-rc6, v6.10-rc5, v6.10-rc4, v6.10-rc3, v6.10-rc2, v6.10-rc1, v6.9, v6.9-rc7, v6.9-rc6
# 0eaac0b4 23-Apr-2024 Kent Overstreet <[email protected]>

bcachefs: btree_write_buffer_flush_seq() no longer closes journal

Signed-off-by: Kent Overstreet <[email protected]>


# f4d67f6d 23-Nov-2024 Kent Overstreet <[email protected]>

bcachefs: trivial btree write buffer refactoring

Signed-off-by: Kent Overstreet <[email protected]>


# ca43f73c 08-Nov-2024 Kent Overstreet <[email protected]>

bcachefs: bch2_btree_write_buffer_flush_going_ro()

The write buffer needs to be specifically flushed when going RO: keys in
the journal that haven't yet been moved to the write buffer don't have a
j

bcachefs: bch2_btree_write_buffer_flush_going_ro()

The write buffer needs to be specifically flushed when going RO: keys in
the journal that haven't yet been moved to the write buffer don't have a
journal pin yet.

This fixes numerous syzbot bugs, all with symptoms of still doing writes
after we've got RO.

Signed-off-by: Kent Overstreet <[email protected]>

show more ...


# f05a0b9c 16-Jul-2024 Kent Overstreet <[email protected]>

bcachefs: silence silly kdoc warning

Signed-off-by: Kent Overstreet <[email protected]>


Revision tags: v6.9-rc5, v6.9-rc4, v6.9-rc3, v6.9-rc2, v6.9-rc1, v6.8, v6.8-rc7, v6.8-rc6, v6.8-rc5, v6.8-rc4, v6.8-rc3, v6.8-rc2, v6.8-rc1, v6.7, v6.7-rc8
# b9efa967 27-Dec-2023 Kent Overstreet <[email protected]>

bcachefs: Eytzinger accumulation for accounting keys

The btree write buffer takes as input keys from the journal, sorts them,
deduplicates them, and flushes them back to the btree in sorted order.

bcachefs: Eytzinger accumulation for accounting keys

The btree write buffer takes as input keys from the journal, sorts them,
deduplicates them, and flushes them back to the btree in sorted order.

The disk space accounting rewrite is moving accounting to normal btree
keys, with update (in this case deltas) accumulated in the write buffer
and then flushed to the btree; but this is going to increase the number
of keys handled by the write buffer by perhaps as much as a factor of
3x-5x.

The overhead from copying around and sorting this many keys would cause
a significant performance regression, but: there is huge locality in
updates to accounting keys that we can take advantage of.

Instead of appending accounting keys to the list of keys to be sorted,
this patch adds an eytzinger search tree of recently seen accounting
keys. We look up the accounting key in the eytzinger search tree and
apply the delta directly, adding it if it doesn't exist, and
periodically prune the eytzinger tree of unused entries.

Signed-off-by: Kent Overstreet <[email protected]>

show more ...


Revision tags: v6.7-rc7, v6.7-rc6, v6.7-rc5, v6.7-rc4, v6.7-rc3, v6.7-rc2
# 5d9667d1 17-Nov-2023 Kent Overstreet <[email protected]>

bcachefs: btree write buffer knows how to accumulate bch_accounting keys

Teach the btree write buffer how to accumulate accounting keys - instead
of having the newer key overwrite the older key as w

bcachefs: btree write buffer knows how to accumulate bch_accounting keys

Teach the btree write buffer how to accumulate accounting keys - instead
of having the newer key overwrite the older key as we do with other
updates, we need to add them together.

Also, add a flag so that write buffer flush knows when journal replay is
finished flushing accounting, and teach it to hold accounting keys until
that flag is set.

Signed-off-by: Kent Overstreet <[email protected]>

show more ...


# 92e1c29a 29-Jun-2024 Kent Overstreet <[email protected]>

bcachefs: bch2_btree_write_buffer_maybe_flush()

Add a new helper for checking references to write buffer btrees, where
we need a flush before we definitively know we have an inconsistency.

Signed-o

bcachefs: bch2_btree_write_buffer_maybe_flush()

Add a new helper for checking references to write buffer btrees, where
we need a flush before we definitively know we have an inconsistency.

Signed-off-by: Kent Overstreet <[email protected]>

show more ...


# 5dd8c60e 07-Apr-2024 Kent Overstreet <[email protected]>

bcachefs: iter/update/trigger/str_hash flag cleanup

Combine iter/update/trigger/str_hash flags into a single enum, and
x-macroize them for a to_text() function later.

These flags are all for a spec

bcachefs: iter/update/trigger/str_hash flag cleanup

Combine iter/update/trigger/str_hash flags into a single enum, and
x-macroize them for a to_text() function later.

These flags are all for a specific iter/key/update context, so it makes
sense to group them together - iter/update/trigger flags were already
given distinct bits, this cleans up and unifies that handling.

Signed-off-by: Kent Overstreet <[email protected]>

show more ...


# 86dbf8c5 27-Dec-2023 Kent Overstreet <[email protected]>

bcachefs: Fix btree node merging on write buffer btrees

The btree write buffer flush fastpath that avoids the main transaction
commit path had the unfortunate side effect of not doing btree node
mer

bcachefs: Fix btree node merging on write buffer btrees

The btree write buffer flush fastpath that avoids the main transaction
commit path had the unfortunate side effect of not doing btree node
merging.

Signed-off-by: Kent Overstreet <[email protected]>

show more ...


# 8aad8e1f 22-Mar-2024 Kent Overstreet <[email protected]>

bcachefs: Fix journal pins in btree write buffer

btree write buffer flush has two phases
- in natural key order, which is more efficient but may fail
- then in journal order

The journal order flu

bcachefs: Fix journal pins in btree write buffer

btree write buffer flush has two phases
- in natural key order, which is more efficient but may fail
- then in journal order

The journal order flush was assuming that keys were still correctly
ordered by journal sequence number - but due to coalescing by the
previous phase, we need an additional sort.

Signed-off-by: Kent Overstreet <[email protected]>

show more ...


# 3ed94062 18-Mar-2024 Kent Overstreet <[email protected]>

bcachefs: Improve bch2_fatal_error()

error messages should always include __func__

Signed-off-by: Kent Overstreet <[email protected]>


# 0b5961b0 24-Feb-2024 Kent Overstreet <[email protected]>

bcachefs: jset_entry for loops declare loop iter

Signed-off-by: Kent Overstreet <[email protected]>


# d9290c99 17-Feb-2024 Kent Overstreet <[email protected]>

bcachefs: Fix journal_buf bitfield accesses

All jounal_buf bitfield updates must happen under the journal lock -
perhaps we should just switch these to atomic bit flags.

Signed-off-by: Kent Overstr

bcachefs: Fix journal_buf bitfield accesses

All jounal_buf bitfield updates must happen under the journal lock -
perhaps we should just switch these to atomic bit flags.

Signed-off-by: Kent Overstreet <[email protected]>

show more ...


# ec4edd7b 16-Jan-2024 Kent Overstreet <[email protected]>

bcachefs: Prep work for variable size btree node buffers

bcachefs btree nodes are big - typically 256k - and btree roots are
pinned in memory. As we're now up to 18 btrees, we now have significant
m

bcachefs: Prep work for variable size btree node buffers

bcachefs btree nodes are big - typically 256k - and btree roots are
pinned in memory. As we're now up to 18 btrees, we now have significant
memory overhead in mostly empty btree roots.

And in the future we're going to start enforcing that certain btree node
boundaries exist, to solve lock contention issues - analagous to XFS's
AGIs.

Thus, we need to start allocating smaller btree node buffers when we
can. This patch changes code that refers to the filesystem constant
c->opts.btree_node_size to refer to the btree node buffer size -
btree_buf_bytes() - where appropriate.

Signed-off-by: Kent Overstreet <[email protected]>

show more ...


# 8feaebb0 28-Dec-2023 Kent Overstreet <[email protected]>

bcachefs: __bch2_journal_key_to_wb -> bch2_journal_key_to_wb_slowpath

Signed-off-by: Kent Overstreet <[email protected]>


# 37165014 27-Dec-2023 Kent Overstreet <[email protected]>

bcachefs: wb_key_cmp -> wb_key_ref_cmp

Signed-off-by: Kent Overstreet <[email protected]>


# 07f383c7 04-Dec-2023 Kent Overstreet <[email protected]>

bcachefs: btree_iter -> btree_path_idx_t

Signed-off-by: Kent Overstreet <[email protected]>


# f6363aca 08-Dec-2023 Kent Overstreet <[email protected]>

bcachefs: bch2_btree_path_make_mut() -> btree_path_idx_t

Signed-off-by: Kent Overstreet <[email protected]>


# defd9e39 17-Dec-2023 Kent Overstreet <[email protected]>

bcachefs: darray_for_each() now declares loop iter

Signed-off-by: Kent Overstreet <[email protected]>


Revision tags: v6.7-rc1
# 38ced43b 04-Nov-2023 Kent Overstreet <[email protected]>

bcachefs: Inline btree write buffer sort

The sort in the btree write buffer flush path is a very hot path, and
it's particularly performance sensitive since it's single threaded and
can block every

bcachefs: Inline btree write buffer sort

The sort in the btree write buffer flush path is a very hot path, and
it's particularly performance sensitive since it's single threaded and
can block every other thread on a multithreaded write workload.

It's well worth doing a sort with inlined cmp and swap functions.

Signed-off-by: Kent Overstreet <[email protected]>

show more ...


12