bcachefs: Fix snapshot skiplists
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
e84843489c
commit
5394fe9494
@ -255,8 +255,7 @@ int bch2_snapshot_invalid(const struct bch_fs *c, struct bkey_s_c k,
|
|||||||
for (i = 0; i < ARRAY_SIZE(s.v->skip); i++) {
|
for (i = 0; i < ARRAY_SIZE(s.v->skip); i++) {
|
||||||
id = le32_to_cpu(s.v->skip[i]);
|
id = le32_to_cpu(s.v->skip[i]);
|
||||||
|
|
||||||
if ((id && !s.v->parent) ||
|
if (id && id < le32_to_cpu(s.v->parent)) {
|
||||||
(id && id <= k.k->p.offset)) {
|
|
||||||
prt_printf(err, "bad skiplist node %u", id);
|
prt_printf(err, "bad skiplist node %u", id);
|
||||||
return -BCH_ERR_invalid_bkey;
|
return -BCH_ERR_invalid_bkey;
|
||||||
}
|
}
|
||||||
@ -1348,12 +1347,12 @@ static int bch2_fix_child_of_deleted_snapshot(struct btree_trans *trans,
|
|||||||
u32 id = le32_to_cpu(s->v.skip[j]);
|
u32 id = le32_to_cpu(s->v.skip[j]);
|
||||||
|
|
||||||
if (snapshot_list_has_id(deleted, id)) {
|
if (snapshot_list_has_id(deleted, id)) {
|
||||||
id = depth > 1
|
id = bch2_snapshot_nth_parent_skip(c,
|
||||||
? bch2_snapshot_nth_parent_skip(c,
|
|
||||||
parent,
|
parent,
|
||||||
get_random_u32_below(depth - 1),
|
depth > 1
|
||||||
deleted)
|
? get_random_u32_below(depth - 1)
|
||||||
: parent;
|
: 0,
|
||||||
|
deleted);
|
||||||
s->v.skip[j] = cpu_to_le32(id);
|
s->v.skip[j] = cpu_to_le32(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user