/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _BCACHEFS_JOURNAL_WRITE_H
#define _BCACHEFS_JOURNAL_WRITE_H

CLOSURE_CALLBACK(bch2_journal_write);
void bch2_journal_do_writes_locked(struct journal *);
void bch2_journal_do_writes(struct journal *);

static inline struct jset_entry *jset_entry_init(struct jset_entry **end, size_t size)
{
	struct jset_entry *entry = *end;
	unsigned u64s = DIV_ROUND_UP(size, sizeof(u64));

	memset(entry, 0, u64s * sizeof(u64));
	/*
	 * The u64s field counts from the start of data, ignoring the shared
	 * fields.
	 */
	entry->u64s = cpu_to_le16(u64s - 1);

	*end = vstruct_next(*end);
	return entry;
}

#endif /* _BCACHEFS_JOURNAL_WRITE_H */
