diff options
Diffstat (limited to 'fs/bcachefs/bkey_methods.c')
-rw-r--r-- | fs/bcachefs/bkey_methods.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/fs/bcachefs/bkey_methods.c b/fs/bcachefs/bkey_methods.c index 2f518d7e1a64..761f5e33b1e6 100644 --- a/fs/bcachefs/bkey_methods.c +++ b/fs/bcachefs/bkey_methods.c @@ -186,15 +186,20 @@ int __bch2_bkey_invalid(struct bch_fs *c, struct bkey_s_c k, if (type != BKEY_TYPE_btree) { enum btree_id btree = type - 1; - bkey_fsck_err_on(!btree_type_has_snapshots(btree) && - k.k->p.snapshot, c, err, - bkey_snapshot_nonzero, - "nonzero snapshot"); - - bkey_fsck_err_on(btree_type_has_snapshots(btree) && - !k.k->p.snapshot, c, err, - bkey_snapshot_zero, - "snapshot == 0"); + if (btree_type_has_snapshots(btree)) { + bkey_fsck_err_on(!k.k->p.snapshot, c, err, + bkey_snapshot_zero, + "snapshot == 0"); + } else if (!btree_type_has_snapshot_field(btree)) { + bkey_fsck_err_on(k.k->p.snapshot, c, err, + bkey_snapshot_nonzero, + "nonzero snapshot"); + } else { + /* + * btree uses snapshot field but it's not required to be + * nonzero + */ + } bkey_fsck_err_on(bkey_eq(k.k->p, POS_MAX), c, err, bkey_at_pos_max, |