mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 08:14:15 +08:00
bcachefs: Handle -EINTR bch2_migrate_index_update()
peek_slot() shouldn't return -EINTR when there's only a single live iterator, but that's tricky to guarantee - we seem to be returning -EINTR when we shouldn't, but it's easy enough to handle in the caller. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
41697f382c
commit
2c480a7102
@ -69,19 +69,26 @@ static int bch2_migrate_index_update(struct bch_write_op *op)
|
||||
BTREE_ITER_SLOTS|BTREE_ITER_INTENT);
|
||||
|
||||
while (1) {
|
||||
struct bkey_s_c k = bch2_btree_iter_peek_slot(iter);
|
||||
struct bkey_s_c k;
|
||||
struct bkey_i *insert;
|
||||
struct bkey_i_extent *new =
|
||||
bkey_i_to_extent(bch2_keylist_front(keys));
|
||||
struct bkey_i_extent *new;
|
||||
BKEY_PADDED(k) _new, _insert;
|
||||
const union bch_extent_entry *entry;
|
||||
struct extent_ptr_decoded p;
|
||||
bool did_work = false;
|
||||
int nr;
|
||||
|
||||
bch2_trans_reset(&trans, 0);
|
||||
|
||||
k = bch2_btree_iter_peek_slot(iter);
|
||||
ret = bkey_err(k);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
if (ret == -EINTR)
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
new = bkey_i_to_extent(bch2_keylist_front(keys));
|
||||
|
||||
if (bversion_cmp(k.k->version, new->k.version) ||
|
||||
!bch2_bkey_matches_ptr(c, k, m->ptr, m->offset))
|
||||
|
Loading…
Reference in New Issue
Block a user