bcachefs: Check for accounting keys with bversion=0
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
cf49f8a8c2
commit
f8911ad88d
@ -214,9 +214,9 @@ static __always_inline int bversion_cmp(struct bversion l, struct bversion r)
|
||||
#define ZERO_VERSION ((struct bversion) { .hi = 0, .lo = 0 })
|
||||
#define MAX_VERSION ((struct bversion) { .hi = ~0, .lo = ~0ULL })
|
||||
|
||||
static __always_inline int bversion_zero(struct bversion v)
|
||||
static __always_inline bool bversion_zero(struct bversion v)
|
||||
{
|
||||
return !bversion_cmp(v, ZERO_VERSION);
|
||||
return bversion_cmp(v, ZERO_VERSION) == 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BCACHEFS_DEBUG
|
||||
|
@ -134,6 +134,10 @@ int bch2_accounting_validate(struct bch_fs *c, struct bkey_s_c k,
|
||||
void *end = &acc_k + 1;
|
||||
int ret = 0;
|
||||
|
||||
bkey_fsck_err_on(bversion_zero(k.k->bversion),
|
||||
c, accounting_key_version_0,
|
||||
"accounting key with version=0");
|
||||
|
||||
switch (acc_k.type) {
|
||||
case BCH_DISK_ACCOUNTING_nr_inodes:
|
||||
end = field_end(acc_k, nr_inodes);
|
||||
|
@ -293,7 +293,8 @@ enum bch_fsck_flags {
|
||||
x(accounting_key_replicas_nr_devs_0, 278, FSCK_AUTOFIX) \
|
||||
x(accounting_key_replicas_nr_required_bad, 279, FSCK_AUTOFIX) \
|
||||
x(accounting_key_replicas_devs_unsorted, 280, FSCK_AUTOFIX) \
|
||||
x(MAX, 282, 0)
|
||||
x(accounting_key_version_0, 282, FSCK_AUTOFIX) \
|
||||
x(MAX, 283, 0)
|
||||
|
||||
enum bch_sb_error_id {
|
||||
#define x(t, n, ...) BCH_FSCK_ERR_##t = n,
|
||||
|
Loading…
Reference in New Issue
Block a user