summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2022-10-14 14:02:36 +0300
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-23 00:09:51 +0300
commit53b1c6f44b1a98ea6def11b74c1fde9710f2a0b9 (patch)
treec159854a027182913261e2e4bea9aff9ae34e401 /fs
parentb32f9a577b8d532d31ee7d71e58d1ec512a25a9a (diff)
downloadlinux-53b1c6f44b1a98ea6def11b74c1fde9710f2a0b9.tar.xz
bcachefs: Don't use key cache during fsck
The btree key cache mainly helps with lock contention, at the cost of additional memory overhead. During some fsck passes the memory overhead really matters, but fsck is single threaded so lock contention is an issue - so skipping the key cache during fsck will help with performance. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs')
-rw-r--r--fs/bcachefs/alloc_foreground.c3
-rw-r--r--fs/bcachefs/backpointers.c5
-rw-r--r--fs/bcachefs/backpointers.h2
-rw-r--r--fs/bcachefs/ec.c3
-rw-r--r--fs/bcachefs/move.c6
5 files changed, 12 insertions, 7 deletions
diff --git a/fs/bcachefs/alloc_foreground.c b/fs/bcachefs/alloc_foreground.c
index 5988aa288c98..a179bbe23c93 100644
--- a/fs/bcachefs/alloc_foreground.c
+++ b/fs/bcachefs/alloc_foreground.c
@@ -352,7 +352,8 @@ static struct open_bucket *try_alloc_bucket(struct btree_trans *trans, struct bc
u64 bp_offset = 0;
ret = bch2_get_next_backpointer(trans, POS(ca->dev_idx, b), -1,
- &bp_offset, &bp);
+ &bp_offset, &bp,
+ BTREE_ITER_NOPRESERVE);
if (ret) {
ob = ERR_PTR(ret);
goto err;
diff --git a/fs/bcachefs/backpointers.c b/fs/bcachefs/backpointers.c
index 20cd5bf349c4..3978c0b50f20 100644
--- a/fs/bcachefs/backpointers.c
+++ b/fs/bcachefs/backpointers.c
@@ -300,7 +300,8 @@ err:
int bch2_get_next_backpointer(struct btree_trans *trans,
struct bpos bucket, int gen,
u64 *bp_offset,
- struct bch_backpointer *dst)
+ struct bch_backpointer *dst,
+ unsigned iter_flags)
{
struct bch_fs *c = trans->c;
struct bpos bp_pos, bp_end_pos;
@@ -921,7 +922,7 @@ static int check_one_backpointer(struct btree_trans *trans,
struct printbuf buf = PRINTBUF;
int ret;
- ret = bch2_get_next_backpointer(trans, bucket, -1, bp_offset, &bp);
+ ret = bch2_get_next_backpointer(trans, bucket, -1, bp_offset, &bp, 0);
if (ret || *bp_offset == U64_MAX)
return ret;
diff --git a/fs/bcachefs/backpointers.h b/fs/bcachefs/backpointers.h
index e1506492f022..153870d4e9a0 100644
--- a/fs/bcachefs/backpointers.h
+++ b/fs/bcachefs/backpointers.h
@@ -118,7 +118,7 @@ static inline void bch2_extent_ptr_to_bp(struct bch_fs *c,
}
int bch2_get_next_backpointer(struct btree_trans *, struct bpos, int,
- u64 *, struct bch_backpointer *);
+ u64 *, struct bch_backpointer *, unsigned);
struct bkey_s_c bch2_backpointer_get_key(struct btree_trans *, struct btree_iter *,
struct bpos, u64, struct bch_backpointer);
struct btree *bch2_backpointer_get_node(struct btree_trans *, struct btree_iter *,
diff --git a/fs/bcachefs/ec.c b/fs/bcachefs/ec.c
index c7ac2894db2e..7028fb718ebf 100644
--- a/fs/bcachefs/ec.c
+++ b/fs/bcachefs/ec.c
@@ -841,7 +841,8 @@ static int ec_stripe_update_extent(struct btree_trans *trans,
struct bkey_i *n;
int ret, dev, block;
- ret = bch2_get_next_backpointer(trans, bucket, gen, bp_offset, &bp);
+ ret = bch2_get_next_backpointer(trans, bucket, gen,
+ bp_offset, &bp, BTREE_ITER_CACHED);
if (ret)
return ret;
if (*bp_offset == U64_MAX)
diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c
index 690c3128c5e1..8eb4978cc043 100644
--- a/fs/bcachefs/move.c
+++ b/fs/bcachefs/move.c
@@ -608,7 +608,8 @@ failed_to_evacuate:
bch2_trans_begin(trans);
ret = bch2_get_next_backpointer(trans, bucket, gen,
- &bp_offset, &bp);
+ &bp_offset, &bp,
+ BTREE_ITER_CACHED);
if (bch2_err_matches(ret, BCH_ERR_transaction_restart))
continue;
if (ret)
@@ -681,7 +682,8 @@ int __bch2_evacuate_bucket(struct moving_context *ctxt,
bch2_trans_begin(&trans);
ret = bch2_get_next_backpointer(&trans, bucket, gen,
- &bp_offset, &bp);
+ &bp_offset, &bp,
+ BTREE_ITER_CACHED);
if (bch2_err_matches(ret, BCH_ERR_transaction_restart))
continue;
if (ret)