bcachefs: BKEY_INVALID_FROM_JOURNAL
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
@ -280,11 +280,9 @@ int bch2_alloc_v4_invalid(const struct bch_fs *c, struct bkey_s_c k,
|
||||
return -BCH_ERR_invalid_bkey;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX this is wrong, we'll be checking updates that happened from
|
||||
* before BCH_FS_CHECK_BACKPOINTERS_DONE
|
||||
*/
|
||||
if (rw == WRITE && test_bit(BCH_FS_CHECK_BACKPOINTERS_DONE, &c->flags)) {
|
||||
if (rw == WRITE &&
|
||||
!(flags & BKEY_INVALID_FROM_JOURNAL) &&
|
||||
test_bit(BCH_FS_CHECK_BACKPOINTERS_DONE, &c->flags)) {
|
||||
unsigned i, bp_len = 0;
|
||||
|
||||
for (i = 0; i < BCH_ALLOC_V4_NR_BACKPOINTERS(a.v); i++)
|
||||
|
@ -38,6 +38,8 @@ struct bkey_ops {
|
||||
|
||||
extern const struct bkey_ops bch2_bkey_ops[];
|
||||
|
||||
#define BKEY_INVALID_FROM_JOURNAL (1 << 1)
|
||||
|
||||
int bch2_bkey_val_invalid(struct bch_fs *, struct bkey_s_c, unsigned, struct printbuf *);
|
||||
int __bch2_bkey_invalid(struct bch_fs *, struct bkey_s_c,
|
||||
enum btree_node_type, unsigned, struct printbuf *);
|
||||
|
@ -340,7 +340,7 @@ static int journal_entry_btree_keys_validate(struct bch_fs *c,
|
||||
int ret = journal_validate_key(c, jset, entry,
|
||||
entry->level,
|
||||
entry->btree_id,
|
||||
k, version, big_endian, write);
|
||||
k, version, big_endian, write|BKEY_INVALID_FROM_JOURNAL);
|
||||
if (ret == FSCK_DELETED_KEY)
|
||||
continue;
|
||||
|
||||
@ -661,7 +661,8 @@ static int journal_entry_overwrite_validate(struct bch_fs *c,
|
||||
struct jset_entry *entry,
|
||||
unsigned version, int big_endian, int write)
|
||||
{
|
||||
return journal_entry_btree_keys_validate(c, jset, entry, version, big_endian, READ);
|
||||
return journal_entry_btree_keys_validate(c, jset, entry,
|
||||
version, big_endian, READ);
|
||||
}
|
||||
|
||||
static void journal_entry_overwrite_to_text(struct printbuf *out, struct bch_fs *c,
|
||||
|
Reference in New Issue
Block a user