bcachefs: Fix an iterator counting bug
authorKent Overstreet <kent.overstreet@gmail.com>
Wed, 16 Oct 2019 17:48:12 +0000 (13:48 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:30 +0000 (17:08 -0400)
The iterator counting assumed we're doing an obvious optimization when
only updating the refcount on indirect extents - but we're not doing it
yet.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/extents.c

index 8b7d2b8759b0eb1904ffdc3860bdd230d58748f3..16a328a20fb57baa2bf27361680ded8cb694c940 100644 (file)
@@ -971,20 +971,7 @@ static int count_iters_for_insert(struct btree_trans *trans,
                                     POS(0, idx + sectors)) >= 0)
                                break;
 
-                       *nr_iters += 1;
-
-                       if (overwrite &&
-                           r_k.k->type == KEY_TYPE_reflink_v) {
-                               struct bkey_s_c_reflink_v r = bkey_s_c_to_reflink_v(r_k);
-
-                               if (le64_to_cpu(r.v->refcount) == 1)
-                                       *nr_iters += bch2_bkey_nr_alloc_ptrs(r_k);
-                       }
-
-                       /*
-                        * if we're going to be deleting an entry from
-                        * the reflink btree, need more iters...
-                        */
+                       *nr_iters += 1 + bch2_bkey_nr_alloc_ptrs(r_k);
 
                        if (*nr_iters >= max_iters) {
                                struct bpos pos = bkey_start_pos(k.k);