mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
bcachefs: Fix replay_now_at() assert
Journal replay, in the slowpath where we insert keys in journal order, was inserting keys in the wrong order; keys from early repair come last. Reported-by: syzbot+2c4fcb257ce2b6a29d0e@syzkaller.appspotmail.com Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
6575b8c987
commit
cab18be695
@ -241,7 +241,13 @@ static int journal_sort_seq_cmp(const void *_l, const void *_r)
|
||||
const struct journal_key *l = *((const struct journal_key **)_l);
|
||||
const struct journal_key *r = *((const struct journal_key **)_r);
|
||||
|
||||
return cmp_int(l->journal_seq, r->journal_seq);
|
||||
/*
|
||||
* Map 0 to U64_MAX, so that keys with journal_seq === 0 come last
|
||||
*
|
||||
* journal_seq == 0 means that the key comes from early repair, and
|
||||
* should be inserted last so as to avoid overflowing the journal
|
||||
*/
|
||||
return cmp_int(l->journal_seq - 1, r->journal_seq - 1);
|
||||
}
|
||||
|
||||
int bch2_journal_replay(struct bch_fs *c)
|
||||
|
Loading…
Reference in New Issue
Block a user