diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-10-05 03:40:47 +0300 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-23 00:08:28 +0300 |
commit | 63fbf458cb7d7df6b58f982df7496f79ee9e6863 (patch) | |
tree | 3745246903357f2a29751e4f28e68f4ff1d74fa0 /fs/bcachefs/reflink.c | |
parent | 0741d378216054145c9fd2c316924e1d403c8266 (diff) | |
download | linux-63fbf458cb7d7df6b58f982df7496f79ee9e6863.tar.xz |
bcachefs: Can't be holding read locks while taking write locks
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/reflink.c')
-rw-r--r-- | fs/bcachefs/reflink.c | 12 |
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, |