bcachefs: Add journal_seq to inode & alloc keys
Add fields to inode & alloc keys that record the journal sequence number when they were most recently modified. For alloc keys, this is needed to know what journal sequence number we have to flush before the bucket can be reused. Currently this is tracked in memory, but we'll be getting rid of the in memory bucket array. For inodes, this is needed for fsync when the inode has been evicted from the vfs cache. Currently we use a bloom filter per outstanding journal buf - but that mechanism has been broken since we added the ability to not issue a flush/fua for every journal write. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
This commit is contained in:
committed by
Kent Overstreet
parent
1db84979c7
commit
3e52c22255
@ -7,6 +7,7 @@
|
||||
extern const char * const bch2_inode_opts[];
|
||||
|
||||
const char *bch2_inode_invalid(const struct bch_fs *, struct bkey_s_c);
|
||||
const char *bch2_inode_v2_invalid(const struct bch_fs *, struct bkey_s_c);
|
||||
void bch2_inode_to_text(struct printbuf *, struct bch_fs *, struct bkey_s_c);
|
||||
|
||||
#define bch2_bkey_ops_inode (struct bkey_ops) { \
|
||||
@ -14,6 +15,17 @@ void bch2_inode_to_text(struct printbuf *, struct bch_fs *, struct bkey_s_c);
|
||||
.val_to_text = bch2_inode_to_text, \
|
||||
}
|
||||
|
||||
#define bch2_bkey_ops_inode_v2 (struct bkey_ops) { \
|
||||
.key_invalid = bch2_inode_v2_invalid, \
|
||||
.val_to_text = bch2_inode_to_text, \
|
||||
}
|
||||
|
||||
static inline bool bkey_is_inode(const struct bkey *k)
|
||||
{
|
||||
return k->type == KEY_TYPE_inode ||
|
||||
k->type == KEY_TYPE_inode_v2;
|
||||
}
|
||||
|
||||
const char *bch2_inode_generation_invalid(const struct bch_fs *,
|
||||
struct bkey_s_c);
|
||||
void bch2_inode_generation_to_text(struct printbuf *, struct bch_fs *,
|
||||
@ -34,6 +46,7 @@ typedef u64 u96;
|
||||
|
||||
struct bch_inode_unpacked {
|
||||
u64 bi_inum;
|
||||
u64 bi_journal_seq;
|
||||
__le64 bi_hash_seed;
|
||||
u32 bi_flags;
|
||||
u16 bi_mode;
|
||||
@ -44,7 +57,7 @@ struct bch_inode_unpacked {
|
||||
};
|
||||
|
||||
struct bkey_inode_buf {
|
||||
struct bkey_i_inode inode;
|
||||
struct bkey_i_inode_v2 inode;
|
||||
|
||||
#define x(_name, _bits) + 8 + _bits / 8
|
||||
u8 _pad[0 + BCH_INODE_FIELDS()];
|
||||
@ -53,7 +66,7 @@ struct bkey_inode_buf {
|
||||
|
||||
void bch2_inode_pack(struct bch_fs *, struct bkey_inode_buf *,
|
||||
const struct bch_inode_unpacked *);
|
||||
int bch2_inode_unpack(struct bkey_s_c_inode, struct bch_inode_unpacked *);
|
||||
int bch2_inode_unpack(struct bkey_s_c, struct bch_inode_unpacked *);
|
||||
|
||||
void bch2_inode_unpacked_to_text(struct printbuf *, struct bch_inode_unpacked *);
|
||||
|
||||
|
Reference in New Issue
Block a user