Commit f8911ad8 authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: Check for accounting keys with bversion=0

parent cf49f8a8
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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
+4 −0
Original line number Diff line number Diff line
@@ -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);
+2 −1
Original line number Diff line number Diff line
@@ -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,