bcachefs: Use BTREE_ITER_INTENT in ec_stripe_update_extent()
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 29 Mar 2023 17:10:36 +0000 (13:10 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:58 +0000 (17:09 -0400)
This adds a flags param to bch2_backpointer_get_key() so that we can
pass BTREE_ITER_INTENT, since ec_stripe_update_extent() is updating the
extent immediately.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/backpointers.c
fs/bcachefs/backpointers.h
fs/bcachefs/ec.c
fs/bcachefs/move.c

index 740084b3ff12f448bda0b314c23ca5bb779c42bb..9121fae0fd6c79c9d1289b449cf38a0e0e038f3f 100644 (file)
@@ -420,7 +420,8 @@ struct bkey_s_c bch2_backpointer_get_key(struct btree_trans *trans,
                                         struct btree_iter *iter,
                                         struct bpos bucket,
                                         u64 bp_offset,
-                                        struct bch_backpointer bp)
+                                        struct bch_backpointer bp,
+                                        unsigned iter_flags)
 {
        struct bch_fs *c = trans->c;
        struct bkey_s_c k;
@@ -430,7 +431,7 @@ struct bkey_s_c bch2_backpointer_get_key(struct btree_trans *trans,
                                  bp.pos,
                                  0,
                                  min(bp.level, c->btree_roots[bp.btree_id].level),
-                                 0);
+                                 iter_flags);
        k = bch2_btree_iter_peek_slot(iter);
        if (bkey_err(k)) {
                bch2_trans_iter_exit(trans, iter);
@@ -976,7 +977,7 @@ static int check_one_backpointer(struct btree_trans *trans,
            bbpos_cmp(pos, end) > 0)
                return 0;
 
-       k = bch2_backpointer_get_key(trans, &iter, bucket, *bp_offset, bp);
+       k = bch2_backpointer_get_key(trans, &iter, bucket, *bp_offset, bp, 0);
        ret = bkey_err(k);
        if (ret == -BCH_ERR_backpointer_to_overwritten_btree_node)
                return 0;
index d0ba5d8596c5715197ddd39e37d79fcbe1f8530a..ce75b8f50241f6c6f231191fa393db99471e04c6 100644 (file)
@@ -128,7 +128,8 @@ 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 *, unsigned);
 struct bkey_s_c bch2_backpointer_get_key(struct btree_trans *, struct btree_iter *,
-                                        struct bpos, u64, struct bch_backpointer);
+                                        struct bpos, u64, struct bch_backpointer,
+                                        unsigned);
 struct btree *bch2_backpointer_get_node(struct btree_trans *, struct btree_iter *,
                                        struct bpos, u64, struct bch_backpointer);
 
index a444f6d513e5eac85f4e8dbdf582d066667fa82d..d295e5401c7a68f64a9f12d138ad1eb4335e6fb4 100644 (file)
@@ -925,7 +925,8 @@ static int ec_stripe_update_extent(struct btree_trans *trans,
                return -EIO;
        }
 
-       k = bch2_backpointer_get_key(trans, &iter, bucket, *bp_offset, bp);
+       k = bch2_backpointer_get_key(trans, &iter, bucket, *bp_offset, bp,
+                                    BTREE_ITER_INTENT);
        ret = bkey_err(k);
        if (ret)
                return ret;
index 9717fdce3ba5f8877a2ff65abd3f963cf5801727..be14d37370274bbbf14bba241ddb51b6308c5a9d 100644 (file)
@@ -678,7 +678,7 @@ failed_to_evacuate:
                        break;
 
                k = bch2_backpointer_get_key(trans, &iter,
-                                            bucket, bp_offset, bp);
+                                            bucket, bp_offset, bp, 0);
                ret = bkey_err(k);
                if (bch2_err_matches(ret, BCH_ERR_transaction_restart))
                        continue;
@@ -767,7 +767,7 @@ int __bch2_evacuate_bucket(struct btree_trans *trans,
                        unsigned i = 0;
 
                        k = bch2_backpointer_get_key(trans, &iter,
-                                               bucket, bp_offset, bp);
+                                               bucket, bp_offset, bp, 0);
                        ret = bkey_err(k);
                        if (bch2_err_matches(ret, BCH_ERR_transaction_restart))
                                continue;