linux-2.6-microblaze.git
10 months agobcachefs: Better journal tracepoints
Kent Overstreet [Mon, 15 Jan 2024 22:59:51 +0000 (17:59 -0500)]
bcachefs: Better journal tracepoints

Factor out bch2_journal_bufs_to_text(), and use it in the
journal_entry_full() tracepoint; when we can't get a journal reservation
we need to know the outstanding journal entry sizes to know if the
problem is due to excessive flushing.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Print size of superblock with space allocated
Kent Overstreet [Mon, 15 Jan 2024 22:57:44 +0000 (17:57 -0500)]
bcachefs: Print size of superblock with space allocated

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Avoid flushing the journal in the discard path
Kent Overstreet [Mon, 15 Jan 2024 22:56:22 +0000 (17:56 -0500)]
bcachefs: Avoid flushing the journal in the discard path

When issuing discards, we may need to flush the journal if there's too
many buckets that can't be discarded until a journal flush.

But the heuristic was bad; we should be comparing the number of buckets
that need to flushes against the number of free buckets, not the number
of buckets we saw.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Improve move_extent tracepoint
Kent Overstreet [Mon, 15 Jan 2024 20:33:39 +0000 (15:33 -0500)]
bcachefs: Improve move_extent tracepoint

Also print out the data_opts, so that we can see what specifically is
being done to an extent.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Add missing bch2_moving_ctxt_flush_all()
Kent Overstreet [Mon, 15 Jan 2024 20:06:43 +0000 (15:06 -0500)]
bcachefs: Add missing bch2_moving_ctxt_flush_all()

This fixes a bug with rebalance IOs getting stuck with reads completed,
but writes never being issued.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Re-add move_extent_write tracepoint
Kent Overstreet [Mon, 15 Jan 2024 20:04:40 +0000 (15:04 -0500)]
bcachefs: Re-add move_extent_write tracepoint

It appears this was accidentally deleted at some point - also, do a bit
of cleanup.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_kthread_io_clock_wait() no longer sleeps until full amount
Kent Overstreet [Mon, 15 Jan 2024 19:15:26 +0000 (14:15 -0500)]
bcachefs: bch2_kthread_io_clock_wait() no longer sleeps until full amount

Drop t he loop in bch2_kthread_io_clock_wait(): this allows the code
that uses it to be woken up for other reasons, and fixes a bug where
rebalance wouldn't wake up when a scan was requested.

This raises the possibility of spurious wakeups, but callers should
always be able to handle that reasonably well.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Add .val_to_text() for KEY_TYPE_cookie
Kent Overstreet [Mon, 15 Jan 2024 19:15:03 +0000 (14:15 -0500)]
bcachefs: Add .val_to_text() for KEY_TYPE_cookie

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Don't pass memcmp() as a pointer
Kent Overstreet [Mon, 15 Jan 2024 19:12:43 +0000 (14:12 -0500)]
bcachefs: Don't pass memcmp() as a pointer

Some (buggy!) compilers have issues with this.

Fixes: https://github.com/koverstreet/bcachefs/issues/625
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Reduce would_deadlock restarts
Kent Overstreet [Thu, 11 Jan 2024 04:47:04 +0000 (23:47 -0500)]
bcachefs: Reduce would_deadlock restarts

We don't have to take locks in any particular ordering - we'll make
forward progress just fine - but if we try to stick to an ordering, it
can help to avoid excessive would_deadlock transaction restarts.

This tweaks the reflink path to take extents btree locks in the right
order.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_trans_account_disk_usage_change()
Kent Overstreet [Sat, 11 Nov 2023 20:08:36 +0000 (15:08 -0500)]
bcachefs: bch2_trans_account_disk_usage_change()

The disk space accounting rewrite is splitting out accounting for each
replicas set - those are moving to btree keys, instead of percpu
counters.

This breaks bch2_trans_fs_usage_apply() up, splitting out the part we
will still need.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch_fs_usage_base
Kent Overstreet [Fri, 17 Nov 2023 05:03:45 +0000 (00:03 -0500)]
bcachefs: bch_fs_usage_base

Split out base filesystem usage into its own type; prep work for
breaking up bch2_trans_fs_usage_apply().

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_prt_compression_type()
Kent Overstreet [Sun, 7 Jan 2024 02:01:47 +0000 (21:01 -0500)]
bcachefs: bch2_prt_compression_type()

bounds checking helper, since compression types are extensible

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: helpers for printing data types
Kent Overstreet [Sun, 7 Jan 2024 01:57:43 +0000 (20:57 -0500)]
bcachefs: helpers for printing data types

We need bounds checking since new versions may introduce new data types.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: BTREE_TRIGGER_ATOMIC
Kent Overstreet [Sun, 7 Jan 2024 22:14:46 +0000 (17:14 -0500)]
bcachefs: BTREE_TRIGGER_ATOMIC

Add a new flag to be explicit about when we're running atomic triggers.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: drop to_text code for obsolete bps in alloc keys
Kent Overstreet [Sun, 7 Jan 2024 00:47:09 +0000 (19:47 -0500)]
bcachefs: drop to_text code for obsolete bps in alloc keys

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: eytzinger_for_each() declares loop iter
Kent Overstreet [Sun, 7 Jan 2024 00:29:14 +0000 (19:29 -0500)]
bcachefs: eytzinger_for_each() declares loop iter

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Don't log errors if BCH_WRITE_ALLOC_NOWAIT
Kent Overstreet [Thu, 11 Jan 2024 04:08:30 +0000 (23:08 -0500)]
bcachefs: Don't log errors if BCH_WRITE_ALLOC_NOWAIT

Previously, we added logging in the write path to ensure that any
unexpected errors getting reported to userspace have a log message; but
BCH_WRITE_ALLOC_NOWAIT is a special case, it's used for promotes where
errors are expected and not reported out to userspace - so we need to
silence those.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: fix memleak in bch2_split_devs
Su Yue [Mon, 8 Jan 2024 15:11:08 +0000 (23:11 +0800)]
bcachefs: fix memleak in bch2_split_devs

The pointer dev_name can be modified by strseq(),
then causes the memleak:

unreferenced object 0xffff9d08a2916c80 (size 32):
  comm "mount.bcachefs", pid 9090, jiffies 4295856224 (age 17.564s)
  hex dump (first 32 bytes):
    2f 64 65 76 2f 6d 61 70 70 65 72 2f 74 65 73 74  /dev/mapper/test
    2d 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00  -0..............
  backtrace:
    [<00000000c5d3be7d>] __kmem_cache_alloc_node+0x1f3/0x2c0
    [<0000000052215d26>] __kmalloc_node_track_caller+0x51/0x150
    [<0000000069fea956>] kstrdup+0x32/0x60
    [<000000000877fcf1>] bch2_split_devs+0x3f/0x150 [bcachefs]
    [<000000007ee93204>] bch2_mount+0xcb/0x640 [bcachefs]
    [<000000002dd1e04b>] legacy_get_tree+0x30/0x60
    [<000000006afc31d3>] vfs_get_tree+0x28/0xf0
    [<000000007b0c538e>] path_mount+0x475/0xb60
    [<0000000092de5882>] __x64_sys_mount+0x105/0x140
    [<0000000054fc05d8>] do_syscall_64+0x42/0xf0
    [<00000000df584910>] entry_SYSCALL_64_after_hwframe+0x6e/0x76

Fix it by copy pointer dev_name at beginning and free the copied
pointer at end.

Signed-off-by: Su Yue <glass.su@suse.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: eytzinger0_find() search should be const
Kent Overstreet [Sat, 6 Jan 2024 01:02:33 +0000 (20:02 -0500)]
bcachefs: eytzinger0_find() search should be const

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: move "ptrs not changing" optimization to bch2_trigger_extent()
Kent Overstreet [Thu, 28 Dec 2023 07:17:18 +0000 (02:17 -0500)]
bcachefs: move "ptrs not changing" optimization to bch2_trigger_extent()

This is useful for btree ptrs as well, when we're just updating
sectors_written.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: fix simulateously upgrading & downgrading
Kent Overstreet [Sat, 6 Jan 2024 00:04:42 +0000 (19:04 -0500)]
bcachefs: fix simulateously upgrading & downgrading

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Restart recovery passes more reliably
Kent Overstreet [Fri, 5 Jan 2024 23:23:44 +0000 (18:23 -0500)]
bcachefs: Restart recovery passes more reliably

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_dump_bset() doesn't choke on u64s == 0
Kent Overstreet [Fri, 5 Jan 2024 20:14:50 +0000 (15:14 -0500)]
bcachefs: bch2_dump_bset() doesn't choke on u64s == 0

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: improve checksum error messages
Kent Overstreet [Fri, 5 Jan 2024 16:59:03 +0000 (11:59 -0500)]
bcachefs: improve checksum error messages

new helpers:
 - bch2_csum_to_text()
 - bch2_csum_err_msg()

standardize our checksum error messages a bit, and print out the
checksums a bit more nicely.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: improve validate_bset_keys()
Kent Overstreet [Fri, 5 Jan 2024 19:17:57 +0000 (14:17 -0500)]
bcachefs: improve validate_bset_keys()

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: print sb magic when relevant
Kent Overstreet [Fri, 5 Jan 2024 18:03:01 +0000 (13:03 -0500)]
bcachefs: print sb magic when relevant

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: __bch2_sb_field_to_text()
Kent Overstreet [Fri, 5 Jan 2024 17:37:47 +0000 (12:37 -0500)]
bcachefs: __bch2_sb_field_to_text()

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: %pg is banished
Kent Overstreet [Fri, 5 Jan 2024 16:58:50 +0000 (11:58 -0500)]
bcachefs: %pg is banished

not portable to userspace

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Improve would_deadlock trace event
Kent Overstreet [Thu, 4 Jan 2024 23:59:17 +0000 (18:59 -0500)]
bcachefs: Improve would_deadlock trace event

We now include backtraces for every thread involved in the cycle.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: fsck_err()s don't need to manually check c->sb.version anymore
Kent Overstreet [Thu, 4 Jan 2024 04:29:02 +0000 (23:29 -0500)]
bcachefs: fsck_err()s don't need to manually check c->sb.version anymore

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Upgrades now specify errors to fix, like downgrades
Kent Overstreet [Thu, 4 Jan 2024 02:01:37 +0000 (21:01 -0500)]
bcachefs: Upgrades now specify errors to fix, like downgrades

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: no thread_with_file in userspace
Kent Overstreet [Thu, 4 Jan 2024 02:46:50 +0000 (21:46 -0500)]
bcachefs: no thread_with_file in userspace

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Don't autofix errors we can't fix
Kent Overstreet [Thu, 4 Jan 2024 01:34:46 +0000 (20:34 -0500)]
bcachefs: Don't autofix errors we can't fix

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: add missing bch2_latency_acct() call
Kent Overstreet [Wed, 3 Jan 2024 22:32:07 +0000 (17:32 -0500)]
bcachefs: add missing bch2_latency_acct() call

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: increase max_active on io_complete_wq
Kent Overstreet [Wed, 3 Jan 2024 22:15:55 +0000 (17:15 -0500)]
bcachefs: increase max_active on io_complete_wq

this definitely should _not_ be 1, and we don't actually want any
concurrency limiting at all here - btree node read completions are
getting blocked behind btree node write submissions.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: add time_stats for btree_node_read_done()
Kent Overstreet [Wed, 3 Jan 2024 21:42:33 +0000 (16:42 -0500)]
bcachefs: add time_stats for btree_node_read_done()

Seeing weird latency issues in the btree node read path - add one
bch2_btree_node_read_done().

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: don't clear accessed bit in btree node fill
Kent Overstreet [Wed, 3 Jan 2024 20:25:08 +0000 (15:25 -0500)]
bcachefs: don't clear accessed bit in btree node fill

Seeing strange performance issues that might be caused by memory
pressure causing prefetched nodes to be evicted before they're used.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Add an option to control btree node prefetching
Kent Overstreet [Wed, 3 Jan 2024 20:21:45 +0000 (15:21 -0500)]
bcachefs: Add an option to control btree node prefetching

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: kill useless return ret
Kent Overstreet [Wed, 3 Jan 2024 18:44:43 +0000 (13:44 -0500)]
bcachefs: kill useless return ret

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Combine .trans_trigger, .atomic_trigger
Kent Overstreet [Mon, 1 Jan 2024 02:01:06 +0000 (21:01 -0500)]
bcachefs: Combine .trans_trigger, .atomic_trigger

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: unify extent trigger
Kent Overstreet [Thu, 28 Dec 2023 07:11:00 +0000 (02:11 -0500)]
bcachefs: unify extent trigger

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_trigger_stripe_ptr()
Kent Overstreet [Sat, 30 Dec 2023 00:08:54 +0000 (19:08 -0500)]
bcachefs: bch2_trigger_stripe_ptr()

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Online fsck can now fix errors
Kent Overstreet [Mon, 1 Jan 2024 00:41:45 +0000 (19:41 -0500)]
bcachefs: Online fsck can now fix errors

BCH_FS_fsck_done -> BCH_FS_fsck_running; set when we might be fixing
fsck errors. Also; set fix_errors to ask by default when fsck is
running.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_trigger_pointer()
Kent Overstreet [Sat, 30 Dec 2023 00:02:56 +0000 (19:02 -0500)]
bcachefs: bch2_trigger_pointer()

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: unify stripe trigger
Kent Overstreet [Thu, 28 Dec 2023 06:46:04 +0000 (01:46 -0500)]
bcachefs: unify stripe trigger

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: move stripe triggers to ec.c
Kent Overstreet [Thu, 28 Dec 2023 06:31:49 +0000 (01:31 -0500)]
bcachefs: move stripe triggers to ec.c

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: unify alloc trigger
Kent Overstreet [Thu, 28 Dec 2023 06:21:01 +0000 (01:21 -0500)]
bcachefs: unify alloc trigger

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: move bch2_mark_alloc() to alloc_background.c
Kent Overstreet [Thu, 28 Dec 2023 05:59:17 +0000 (00:59 -0500)]
bcachefs: move bch2_mark_alloc() to alloc_background.c

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: unify reservation trigger
Kent Overstreet [Thu, 28 Dec 2023 05:50:21 +0000 (00:50 -0500)]
bcachefs: unify reservation trigger

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: unify reflink_p trigger
Kent Overstreet [Thu, 28 Dec 2023 05:15:58 +0000 (00:15 -0500)]
bcachefs: unify reflink_p trigger

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: unify inode trigger
Kent Overstreet [Thu, 28 Dec 2023 05:05:54 +0000 (00:05 -0500)]
bcachefs: unify inode trigger

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: kill mem_trigger_run_overwrite_then_insert()
Kent Overstreet [Thu, 28 Dec 2023 05:21:04 +0000 (00:21 -0500)]
bcachefs: kill mem_trigger_run_overwrite_then_insert()

now that type signatures are unified, redundant

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: BTREE_TRIGGER_TRANSACTIONAL
Kent Overstreet [Thu, 28 Dec 2023 04:54:52 +0000 (23:54 -0500)]
bcachefs: BTREE_TRIGGER_TRANSACTIONAL

New flag so that triggers can distinguish whether we're running
transactional or atomic triggers (or gc) - unifying the callbacks.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Kill BTREE_TRIGGER_NOATOMIC
Kent Overstreet [Thu, 28 Dec 2023 04:44:50 +0000 (23:44 -0500)]
bcachefs: Kill BTREE_TRIGGER_NOATOMIC

dead code

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: mark now takes bkey_s
Kent Overstreet [Thu, 28 Dec 2023 04:19:09 +0000 (23:19 -0500)]
bcachefs: mark now takes bkey_s

Prep work for disk space accounting rewrite: we're going to want to use
a single callback for both of our current triggers, so we need to change
them to have the same type signature first.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: trans_mark now takes bkey_s
Kent Overstreet [Thu, 28 Dec 2023 04:19:09 +0000 (23:19 -0500)]
bcachefs: trans_mark now takes bkey_s

Prep work for disk space accounting rewrite: we're going to want to use
a single callback for both of our current triggers, so we need to change
them to have the same type signature first.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Upgrading uses bch_sb.recovery_passes_required
Kent Overstreet [Fri, 29 Dec 2023 22:08:58 +0000 (17:08 -0500)]
bcachefs: Upgrading uses bch_sb.recovery_passes_required

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: factor out thread_with_file, thread_with_stdio
Kent Overstreet [Sun, 31 Dec 2023 15:04:54 +0000 (10:04 -0500)]
bcachefs: factor out thread_with_file, thread_with_stdio

thread_with_stdio now knows how to handle input - fsck can now prompt to
fix errors.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Fix printing of device durability
Kent Overstreet [Sat, 30 Dec 2023 00:16:14 +0000 (19:16 -0500)]
bcachefs: Fix printing of device durability

BCH_MEMBER_DURABILITY() was not present initially; a value of 0 means
use the default, nonzero means use v - 1.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: __bch2_journal_key_to_wb -> bch2_journal_key_to_wb_slowpath
Kent Overstreet [Thu, 28 Dec 2023 01:26:30 +0000 (20:26 -0500)]
bcachefs: __bch2_journal_key_to_wb -> bch2_journal_key_to_wb_slowpath

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: __journal_keys_sort() refactoring
Kent Overstreet [Thu, 28 Dec 2023 01:31:21 +0000 (20:31 -0500)]
bcachefs: __journal_keys_sort() refactoring

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: wb_key_cmp -> wb_key_ref_cmp
Kent Overstreet [Wed, 27 Dec 2023 23:23:34 +0000 (18:23 -0500)]
bcachefs: wb_key_cmp -> wb_key_ref_cmp

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: track transaction durations
Kent Overstreet [Sun, 24 Dec 2023 03:43:33 +0000 (22:43 -0500)]
bcachefs: track transaction durations

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: btree_trans always has stats
Kent Overstreet [Sun, 24 Dec 2023 04:08:45 +0000 (23:08 -0500)]
bcachefs: btree_trans always has stats

reserve slot 0 for unknown (when we overflow), to avoid some branches

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Split brain detection
Kent Overstreet [Wed, 28 Jun 2023 01:02:27 +0000 (21:02 -0400)]
bcachefs: Split brain detection

Use the new bch_member->seq, sb->write_time fields to detect split brain
and kick out devices when necessary.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch_member->seq
Kent Overstreet [Wed, 28 Jun 2023 01:02:27 +0000 (21:02 -0400)]
bcachefs: bch_member->seq

Add new fields for split brain detection:

 - bch_member->seq, which tracks the sequence number of the last superblock
   write that happened to each member device

 - bch_sb->write_time, which tracks the time of the last superblock write,
   to allow detection of when two members have diverged but had the same
   number of superblock writes.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Fix nochanges/read_only interaction
Kent Overstreet [Sat, 23 Dec 2023 22:50:29 +0000 (17:50 -0500)]
bcachefs: Fix nochanges/read_only interaction

nochanges means "we cannot issue writes at all"; it's possible to go
into a pseudo read-write mode where we pin dirty metadata in memory,
which is used for fsck in dry run mode and doing journal replay on a
read only mount, but we do not want to allow an actual read-write mount
in nochanges mode.

But we do always want to allow early read-write, during recovery - this
patch clarifies that.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Check journal entries for invalid keys in trans commit path
Kent Overstreet [Thu, 21 Dec 2023 05:16:32 +0000 (00:16 -0500)]
bcachefs: Check journal entries for invalid keys in trans commit path

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: check_directory_structure() can now be run online
Kent Overstreet [Mon, 11 Dec 2023 03:52:43 +0000 (22:52 -0500)]
bcachefs: check_directory_structure() can now be run online

Now that we have dynamically resizable btree paths,
check_directory_structure() can check one path - inode up to the root -
in a single transaction.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Fix reattach_inode() for snapshots
Kent Overstreet [Fri, 15 Dec 2023 19:13:48 +0000 (14:13 -0500)]
bcachefs: Fix reattach_inode() for snapshots

reattach_inode() was broken w.r.t. snapshots - we'd lookup the subvolume
to look up lost+found, but if we're in an interior node snapshot that
didn't make any sense.

Instead, this adds a dirent path for creating in a specific snapshot,
skipping the subvolume; and we also make sure to create lost+found in
the root snapshot, to avoid conflicts with lost+found being created in
overlapping snapshots.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_btree_trans_peek_slot_updates
Kent Overstreet [Sun, 17 Dec 2023 05:57:37 +0000 (00:57 -0500)]
bcachefs: bch2_btree_trans_peek_slot_updates

refactoring the BTREE_ITER_WITH_UPDATES code, prep for removing the flag
and making it always-on

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_btree_trans_peek_prev_updates
Kent Overstreet [Sun, 17 Dec 2023 05:57:37 +0000 (00:57 -0500)]
bcachefs: bch2_btree_trans_peek_prev_updates

bch2_btree_iter_peek_prev() now supports BTREE_ITER_WITH_UPDATES

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_btree_trans_peek_updates
Kent Overstreet [Sun, 17 Dec 2023 05:57:37 +0000 (00:57 -0500)]
bcachefs: bch2_btree_trans_peek_updates

refactoring the BTREE_ITER_WITH_UPDATES code, prep for removing the flag
and making it always-on

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: growable btree_paths
Kent Overstreet [Mon, 11 Dec 2023 00:26:30 +0000 (19:26 -0500)]
bcachefs: growable btree_paths

XXX: we're allocating memory with btree locks held - bad

We need to plumb through an error path so we can do
allocate_dropping_locks() - but we're merging this now because it fixes
a transaction path overflow caused by indirect extent fragmentation, and
the resize path is rare.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Fix interior update path btree_path uses
Kent Overstreet [Fri, 15 Dec 2023 20:21:40 +0000 (15:21 -0500)]
bcachefs: Fix interior update path btree_path uses

Since the btree_paths array is now about to become growable, we have to
be careful not to refer to paths by pointer across contexts where they
may be reallocated.

This fixes the remaining btree_interior_update() paths - split and
merge.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: trans->nr_paths
Kent Overstreet [Sun, 10 Dec 2023 22:10:31 +0000 (17:10 -0500)]
bcachefs: trans->nr_paths

Start to plumb through dynamically growable btree_paths; this patch
replaces most BTREE_ITER_MAX references with trans->nr_paths.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: trans->updates will also be resizable
Kent Overstreet [Wed, 13 Dec 2023 01:30:44 +0000 (20:30 -0500)]
bcachefs: trans->updates will also be resizable

the reflink triggers are also bumping up against the maximum number of
paths in a transaction - and generating proportional numbers of updates.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: optimize __bch2_trans_get(), kill DEBUG_TRANSACTIONS
Kent Overstreet [Mon, 11 Dec 2023 16:11:22 +0000 (11:11 -0500)]
bcachefs: optimize __bch2_trans_get(), kill DEBUG_TRANSACTIONS

 - Some tweaks to greatly reduce locking overhead for the list of btree
   transactions, so that it can always be enabled: leave btree_trans
   objects on the list when they're on the percpu single item freelist,
   and only check for duplicates in the same process when
   CONFIG_BCACHEFS_DEBUG is enabled

 - don't zero out the full btree_trans() unless we allocated it from
   the mempool

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: rcu protect trans->paths
Kent Overstreet [Wed, 13 Dec 2023 01:08:29 +0000 (20:08 -0500)]
bcachefs: rcu protect trans->paths

Upcoming patches are going to be changing trans->paths to a
reallocatable buffer. We need to guard against use after free when it's
used by other threads; this introduces RCU protection to those paths and
changes them to check for trans->paths == NULL

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Clean up btree_trans
Kent Overstreet [Mon, 11 Dec 2023 07:31:12 +0000 (02:31 -0500)]
bcachefs: Clean up btree_trans

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: kill btree_path.idx
Kent Overstreet [Mon, 11 Dec 2023 05:23:33 +0000 (00:23 -0500)]
bcachefs: kill btree_path.idx

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: get_unlocked_mut_path() -> btree_path_idx_t
Kent Overstreet [Mon, 11 Dec 2023 05:17:17 +0000 (00:17 -0500)]
bcachefs: get_unlocked_mut_path() -> btree_path_idx_t

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_btree_iter_peek_prev() no longer uses path->idx
Kent Overstreet [Mon, 11 Dec 2023 05:03:44 +0000 (00:03 -0500)]
bcachefs: bch2_btree_iter_peek_prev() no longer uses path->idx

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_path_get() no longer uses path->idx
Kent Overstreet [Mon, 11 Dec 2023 05:02:07 +0000 (00:02 -0500)]
bcachefs: bch2_path_get() no longer uses path->idx

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: trans_for_each_path_with_node() no longer uses path->idx
Kent Overstreet [Mon, 11 Dec 2023 04:57:50 +0000 (23:57 -0500)]
bcachefs: trans_for_each_path_with_node() no longer uses path->idx

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: trans_for_each_path() no longer uses path->idx
Kent Overstreet [Mon, 11 Dec 2023 04:37:45 +0000 (23:37 -0500)]
bcachefs: trans_for_each_path() no longer uses path->idx

path->idx is now a code smell: we should be using path_idx_t, since it's
stable across btree path reallocation.

This is also a bit faster, using the same loop counter vs. fetching
path->idx from each path we iterate over.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: kill trans_for_each_path_from()
Kent Overstreet [Sun, 10 Dec 2023 22:54:02 +0000 (17:54 -0500)]
bcachefs: kill trans_for_each_path_from()

dead code

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_btree_path_to_text() -> btree_path_idx_t
Kent Overstreet [Mon, 11 Dec 2023 04:29:06 +0000 (23:29 -0500)]
bcachefs: bch2_btree_path_to_text() -> btree_path_idx_t

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: struct trans_for_each_path_inorder_iter
Kent Overstreet [Sun, 10 Dec 2023 21:35:45 +0000 (16:35 -0500)]
bcachefs: struct trans_for_each_path_inorder_iter

reducing our usage of path->idx

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: btree_insert_entry -> btree_path_idx_t
Kent Overstreet [Sun, 10 Dec 2023 21:10:24 +0000 (16:10 -0500)]
bcachefs: btree_insert_entry -> btree_path_idx_t

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: btree_iter -> btree_path_idx_t
Kent Overstreet [Mon, 4 Dec 2023 05:39:38 +0000 (00:39 -0500)]
bcachefs: btree_iter -> btree_path_idx_t

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: btree_path_alloc() -> btree_path_idx_t
Kent Overstreet [Fri, 8 Dec 2023 22:02:16 +0000 (17:02 -0500)]
bcachefs: btree_path_alloc() -> btree_path_idx_t

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_btree_path_traverse() -> btree_path_idx_t
Kent Overstreet [Fri, 8 Dec 2023 08:02:43 +0000 (03:02 -0500)]
bcachefs: bch2_btree_path_traverse() -> btree_path_idx_t

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_btree_path_make_mut() -> btree_path_idx_t
Kent Overstreet [Fri, 8 Dec 2023 07:24:05 +0000 (02:24 -0500)]
bcachefs: bch2_btree_path_make_mut() -> btree_path_idx_t

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_btree_path_set_pos() -> btree_path_idx_t
Kent Overstreet [Fri, 8 Dec 2023 07:10:23 +0000 (02:10 -0500)]
bcachefs: bch2_btree_path_set_pos() -> btree_path_idx_t

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs; bch2_path_put() -> btree_path_idx_t
Kent Overstreet [Mon, 11 Dec 2023 04:18:52 +0000 (23:18 -0500)]
bcachefs; bch2_path_put() -> btree_path_idx_t

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: bch2_path_get() -> btree_path_idx_t
Kent Overstreet [Fri, 8 Dec 2023 07:00:43 +0000 (02:00 -0500)]
bcachefs: bch2_path_get() -> btree_path_idx_t

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: minor bch2_btree_path_set_pos() optimization
Kent Overstreet [Fri, 8 Dec 2023 06:51:04 +0000 (01:51 -0500)]
bcachefs: minor bch2_btree_path_set_pos() optimization

bpos_eq() is cheaper than bpos_cmp()

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
10 months agobcachefs: Kill GFP_NOFAIL usage in readahead path
Kent Overstreet [Wed, 20 Dec 2023 06:20:53 +0000 (01:20 -0500)]
bcachefs: Kill GFP_NOFAIL usage in readahead path

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>