mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-04 04:02:26 +00:00
bcachefs: Fix accounting_read when we rewind
If we rewind recovery to run topology repair, that causes accounting_read to run twice. This fixes accounting being double counted. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
8b53739160
commit
ba91f39cd4
@ -700,6 +700,21 @@ int bch2_accounting_read(struct bch_fs *c)
|
||||
struct btree_trans *trans = bch2_trans_get(c);
|
||||
struct printbuf buf = PRINTBUF;
|
||||
|
||||
/*
|
||||
* We might run more than once if we rewind to start topology repair or
|
||||
* btree node scan - and those might cause us to get different results,
|
||||
* so we can't just skip if we've already run.
|
||||
*
|
||||
* Instead, zero out any accounting we have:
|
||||
*/
|
||||
percpu_down_write(&c->mark_lock);
|
||||
darray_for_each(acc->k, e)
|
||||
percpu_memset(e->v[0], 0, sizeof(u64) * e->nr_counters);
|
||||
for_each_member_device(c, ca)
|
||||
percpu_memset(ca->usage, 0, sizeof(*ca->usage));
|
||||
percpu_memset(c->usage, 0, sizeof(*c->usage));
|
||||
percpu_up_write(&c->mark_lock);
|
||||
|
||||
int ret = for_each_btree_key(trans, iter,
|
||||
BTREE_ID_accounting, POS_MIN,
|
||||
BTREE_ITER_prefetch|BTREE_ITER_all_snapshots, k, ({
|
||||
|
Loading…
Reference in New Issue
Block a user