bcachefs: Improve warning for copygc failing to move data
This will help narrow down which code is at fault when this happens. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
255adc515a
commit
784d8d173d
@ -177,9 +177,12 @@ next:
|
||||
}
|
||||
continue;
|
||||
nomatch:
|
||||
if (m->ctxt)
|
||||
if (m->ctxt) {
|
||||
BUG_ON(k.k->p.offset <= iter->pos.offset);
|
||||
atomic64_inc(&m->ctxt->stats->keys_raced);
|
||||
atomic64_add(k.k->p.offset - iter->pos.offset,
|
||||
&m->ctxt->stats->sectors_raced);
|
||||
}
|
||||
atomic_long_inc(&c->extent_migrate_raced);
|
||||
trace_move_race(&new->k);
|
||||
bch2_btree_iter_next_slot(iter);
|
||||
|
@ -8,6 +8,7 @@ struct bch_move_stats {
|
||||
struct bpos pos;
|
||||
|
||||
atomic64_t keys_moved;
|
||||
atomic64_t keys_raced;
|
||||
atomic64_t sectors_moved;
|
||||
atomic64_t sectors_seen;
|
||||
atomic64_t sectors_raced;
|
||||
|
@ -78,7 +78,17 @@ static bool __copygc_pred(struct bch_dev *ca,
|
||||
ssize_t i = eytzinger0_find_le(h->data, h->used,
|
||||
sizeof(h->data[0]),
|
||||
bucket_offset_cmp, &search);
|
||||
#if 0
|
||||
/* eytzinger search verify code: */
|
||||
ssize_t j = -1, k;
|
||||
|
||||
for (k = 0; k < h->used; k++)
|
||||
if (h->data[k].offset <= ptr->offset &&
|
||||
(j < 0 || h->data[k].offset > h->data[j].offset))
|
||||
j = k;
|
||||
|
||||
BUG_ON(i != j);
|
||||
#endif
|
||||
return (i >= 0 &&
|
||||
ptr->offset < h->data[i].offset + ca->mi.bucket_size &&
|
||||
ptr->gen == h->data[i].gen);
|
||||
@ -203,9 +213,12 @@ static void bch2_copygc(struct bch_fs *c, struct bch_dev *ca)
|
||||
|
||||
if (sectors_not_moved && !ret)
|
||||
bch_warn_ratelimited(c,
|
||||
"copygc finished but %llu/%llu sectors, %llu/%llu buckets not moved",
|
||||
"copygc finished but %llu/%llu sectors, %llu/%llu buckets not moved (move stats: moved %llu sectors, raced %llu keys, %llu sectors)",
|
||||
sectors_not_moved, sectors_to_move,
|
||||
buckets_not_moved, buckets_to_move);
|
||||
buckets_not_moved, buckets_to_move,
|
||||
atomic64_read(&move_stats.sectors_moved),
|
||||
atomic64_read(&move_stats.keys_raced),
|
||||
atomic64_read(&move_stats.sectors_raced));
|
||||
|
||||
trace_copygc(ca,
|
||||
atomic64_read(&move_stats.sectors_moved), sectors_not_moved,
|
||||
|
Loading…
x
Reference in New Issue
Block a user