]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: bucket_pos_to_bp_end()
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 15 Nov 2024 21:30:30 +0000 (16:30 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 21 Dec 2024 06:36:19 +0000 (01:36 -0500)
Better helpers for iterating over backpointers within a specific bucket

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

index eda3a78a5e2b9de7c5c23cfaac4bcd649dd84138..595db796093983057e563aef0c3187dd6bd7b670 100644 (file)
@@ -80,6 +80,16 @@ static inline struct bpos bucket_pos_to_bp(const struct bch_dev *ca,
        return ret;
 }
 
+static inline struct bpos bucket_pos_to_bp_start(const struct bch_dev *ca, struct bpos bucket)
+{
+       return bucket_pos_to_bp(ca, bucket, 0);
+}
+
+static inline struct bpos bucket_pos_to_bp_end(const struct bch_dev *ca, struct bpos bucket)
+{
+       return bpos_nosnap_predecessor(bucket_pos_to_bp(ca, bpos_nosnap_successor(bucket), 0));
+}
+
 int bch2_bucket_backpointer_mod_nowritebuffer(struct btree_trans *, struct bch_dev *,
                                struct bpos bucket, struct bch_backpointer, struct bkey_s_c, bool);
 
index 146e03ffe8b754d53b31ab11561b64b57b301177..8197ceb506e903ba1657e9abba9c24372acc6691 100644 (file)
@@ -1365,8 +1365,9 @@ static int ec_stripe_update_bucket(struct btree_trans *trans, struct ec_stripe_b
 
        struct bpos bucket_pos = PTR_BUCKET_POS(ca, &ptr);
 
-       ret = for_each_btree_key_commit(trans, bp_iter, BTREE_ID_backpointers,
-                       bucket_pos_to_bp(ca, bucket_pos, 0), 0, bp_k,
+       ret = for_each_btree_key_max_commit(trans, bp_iter, BTREE_ID_backpointers,
+                       bucket_pos_to_bp_start(ca, bucket_pos),
+                       bucket_pos_to_bp_end(ca, bucket_pos), 0, bp_k,
                        NULL, NULL,
                        BCH_TRANS_COMMIT_no_check_rw|
                        BCH_TRANS_COMMIT_no_enospc, ({
index 74839268d6ab98497edcbfb26efc91f1f1bb0948..460175464762e0d668f23ad437ab5025bbe1fc21 100644 (file)
@@ -691,7 +691,7 @@ int bch2_evacuate_bucket(struct moving_context *ctxt,
        bch2_trans_begin(trans);
 
        bch2_trans_iter_init(trans, &bp_iter, BTREE_ID_backpointers,
-                            bucket_pos_to_bp(ca, bucket, 0), 0);
+                            bucket_pos_to_bp_start(ca, bucket), 0);
 
        bch_err_msg(c, ret, "looking up alloc key");
        if (ret)
@@ -715,8 +715,7 @@ int bch2_evacuate_bucket(struct moving_context *ctxt,
                if (ret)
                        goto err;
 
-               if (!k.k ||
-                   bkey_ge(k.k->p, bucket_pos_to_bp(ca, bpos_nosnap_successor(bucket), 0)))
+               if (!k.k || bkey_gt(k.k->p, bucket_pos_to_bp_end(ca, bucket)))
                        break;
 
                if (k.k->type != KEY_TYPE_backpointer)