1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _BCACHEFS_BTREE_WRITE_BUFFER_TYPES_H 3#define _BCACHEFS_BTREE_WRITE_BUFFER_TYPES_H 4 5#include "darray.h" 6#include "journal_types.h" 7 8#define BTREE_WRITE_BUFERED_VAL_U64s_MAX 4 9#define BTREE_WRITE_BUFERED_U64s_MAX (BKEY_U64s + BTREE_WRITE_BUFERED_VAL_U64s_MAX) 10 11struct wb_key_ref { 12union { 13 struct { 14#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 15 unsigned idx:24; 16 u8 pos[sizeof(struct bpos)]; 17 enum btree_id btree:8; 18#else 19 enum btree_id btree:8; 20 u8 pos[sizeof(struct bpos)]; 21 unsigned idx:24; 22#endif 23 } __packed; 24 struct { 25#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 26 u64 lo; 27 u64 mi; 28 u64 hi; 29#else 30 u64 hi; 31 u64 mi; 32 u64 lo; 33#endif 34 }; 35}; 36}; 37 38struct btree_write_buffered_key { 39 enum btree_id btree:8; 40 u64 journal_seq:56; 41 __BKEY_PADDED(k, BTREE_WRITE_BUFERED_VAL_U64s_MAX); 42}; 43 44struct btree_write_buffer_keys { 45 DARRAY(struct btree_write_buffered_key) keys; 46 struct journal_entry_pin pin; 47 struct mutex lock; 48}; 49 50struct btree_write_buffer { 51 DARRAY(struct wb_key_ref) sorted; 52 struct btree_write_buffer_keys inc; 53 struct btree_write_buffer_keys flushing; 54 struct work_struct flush_work; 55}; 56 57#endif /* _BCACHEFS_BTREE_WRITE_BUFFER_TYPES_H */ 58