]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: range_has_data() -> for_each_btree_key_in_subvolume_upto
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 17 Jul 2024 17:30:23 +0000 (13:30 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 9 Sep 2024 13:41:48 +0000 (09:41 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/fs-io.c

index b0ecc756d766ce704433b7ced41c71b273d46a40..4359fde8660325dd69ccc7d7c03ce04523b0f2b4 100644 (file)
@@ -221,30 +221,11 @@ static inline int range_has_data(struct bch_fs *c, u32 subvol,
                                 struct bpos start,
                                 struct bpos end)
 {
-       struct btree_trans *trans = bch2_trans_get(c);
-       struct btree_iter iter;
-       struct bkey_s_c k;
-       int ret = 0;
-retry:
-       bch2_trans_begin(trans);
-
-       ret = bch2_subvolume_get_snapshot(trans, subvol, &start.snapshot);
-       if (ret)
-               goto err;
-
-       for_each_btree_key_upto_norestart(trans, iter, BTREE_ID_extents, start, end, 0, k, ret)
-               if (bkey_extent_is_data(k.k) && !bkey_extent_is_unwritten(k)) {
-                       ret = 1;
-                       break;
-               }
-       start = iter.pos;
-       bch2_trans_iter_exit(trans, &iter);
-err:
-       if (bch2_err_matches(ret, BCH_ERR_transaction_restart))
-               goto retry;
-
-       bch2_trans_put(trans);
-       return ret;
+       return bch2_trans_run(c,
+               for_each_btree_key_in_subvolume_upto(trans, iter, BTREE_ID_extents, start, end,
+                                                   subvol, 0, k, ({
+                       bkey_extent_is_data(k.k) && !bkey_extent_is_unwritten(k);
+               })));
 }
 
 static int __bch2_truncate_folio(struct bch_inode_info *inode,