diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-10-04 20:40:47 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2020-06-09 21:32:33 -0400 |
commit | 88b0ebf0e0564d622a8d6753d3994b6384938f2e (patch) | |
tree | 2ba9f7d2cafe0dfde5fe86557c8f90158de25912 /fs/bcachefs/reflink.c | |
parent | 5f23bcd7cbd8f37c319c80c706590dfbb4feadd8 (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.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, |