summaryrefslogtreecommitdiff
path: root/fs/bcachefs/reflink.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2019-10-04 20:40:47 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2020-06-09 21:32:33 -0400
commit88b0ebf0e0564d622a8d6753d3994b6384938f2e (patch)
tree2ba9f7d2cafe0dfde5fe86557c8f90158de25912 /fs/bcachefs/reflink.c
parent5f23bcd7cbd8f37c319c80c706590dfbb4feadd8 (diff)
bcachefs: Can't be holding read locks while taking write locks
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'fs/bcachefs/reflink.c')
-rw-r--r--fs/bcachefs/reflink.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/fs/bcachefs/reflink.c b/fs/bcachefs/reflink.c
index ad526d280a14..f1b0e7fc8487 100644
--- a/fs/bcachefs/reflink.c
+++ b/fs/bcachefs/reflink.c
@@ -144,20 +144,18 @@ err:
static struct bkey_s_c get_next_src(struct btree_iter *iter, struct bpos end)
{
struct bkey_s_c k = bch2_btree_iter_peek(iter);
+ int ret;
- while (1) {
- if (bkey_err(k))
- return k;
-
+ for_each_btree_key_continue(iter, 0, k, ret) {
if (bkey_cmp(iter->pos, end) >= 0)
return bkey_s_c_null;
if (k.k->type == KEY_TYPE_extent ||
k.k->type == KEY_TYPE_reflink_p)
- return k;
-
- k = bch2_btree_iter_next(iter);
+ break;
}
+
+ return k;
}
s64 bch2_remap_range(struct bch_fs *c,