bcachefs: evacuate_bucket() no longer moves cached ptrs
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 10 Mar 2023 23:00:10 +0000 (18:00 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:56 +0000 (17:09 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/move.c

index 681d134f2e438405072e660bfaef958cf4532cae..de10f388b8d3173054b6d1640a7a67d7dde57060 100644 (file)
@@ -758,8 +758,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++;
                        }