summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-03-10 18:00:10 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-03-13 11:35:11 -0400
commit53574bf2c48e4a58c97370bc06cb2b866e31b024 (patch)
treea977a3b3cab5980b2a163c390568ebf2dfafd68b
parent9aa0e655fbf8bc8aae2c89724701aa4c617a6423 (diff)
bcachefs: evacuate_bucket() no longer moves cached ptrs
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/move.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c
index aaa93a6c6dbb..31064d19f732 100644
--- a/fs/bcachefs/move.c
+++ b/fs/bcachefs/move.c
@@ -759,8 +759,13 @@ int __bch2_evacuate_bucket(struct btree_trans *trans,
data_opts.rewrite_ptrs = 0;
bkey_for_each_ptr(bch2_bkey_ptrs_c(k), ptr) {
- if (ptr->dev == bucket.inode)
+ if (ptr->dev == bucket.inode) {
data_opts.rewrite_ptrs |= 1U << i;
+ if (ptr->cached) {
+ bch2_trans_iter_exit(trans, &iter);
+ goto next;
+ }
+ }
i++;
}