diff options
Diffstat (limited to 'libbcachefs/journal.h')
-rw-r--r-- | libbcachefs/journal.h | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/libbcachefs/journal.h b/libbcachefs/journal.h index 78f5fac0..997a28ae 100644 --- a/libbcachefs/journal.h +++ b/libbcachefs/journal.h @@ -199,27 +199,39 @@ bch2_journal_add_entry_noreservation(struct journal_buf *buf, size_t u64s) return entry; } +static inline struct jset_entry * +journal_res_entry(struct journal *j, struct journal_res *res) +{ + return vstruct_idx(j->buf[res->idx].data, res->offset); +} + +static inline unsigned journal_entry_set(struct jset_entry *entry, unsigned type, + enum btree_id id, unsigned level, + const void *data, unsigned u64s) +{ + memset(entry, 0, sizeof(*entry)); + entry->u64s = cpu_to_le16(u64s); + entry->type = type; + entry->btree_id = id; + entry->level = level; + memcpy_u64s_small(entry->_data, data, u64s); + + return jset_u64s(u64s); +} + static inline void bch2_journal_add_entry(struct journal *j, struct journal_res *res, unsigned type, enum btree_id id, unsigned level, const void *data, unsigned u64s) { - struct journal_buf *buf = &j->buf[res->idx]; - struct jset_entry *entry = vstruct_idx(buf->data, res->offset); - unsigned actual = jset_u64s(u64s); + unsigned actual = journal_entry_set(journal_res_entry(j, res), + type, id, level, data, u64s); EBUG_ON(!res->ref); EBUG_ON(actual > res->u64s); res->offset += actual; res->u64s -= actual; - - memset(entry, 0, sizeof(*entry)); - entry->u64s = cpu_to_le16(u64s); - entry->type = type; - entry->btree_id = id; - entry->level = level; - memcpy_u64s(entry->_data, data, u64s); } static inline void bch2_journal_add_keys(struct journal *j, struct journal_res *res, |