]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/btree_write_buffer_types.h
Update bcachefs sources to 841a95c29f4c bcachefs: fix userspace build errors
[bcachefs-tools-debian] / libbcachefs / btree_write_buffer_types.h
index 99993ba77aeab01a63470111e84db4c2ebc5afad..9b9433de9c3686aa59255858e44411384219bafc 100644 (file)
@@ -2,43 +2,56 @@
 #ifndef _BCACHEFS_BTREE_WRITE_BUFFER_TYPES_H
 #define _BCACHEFS_BTREE_WRITE_BUFFER_TYPES_H
 
+#include "darray.h"
 #include "journal_types.h"
 
 #define BTREE_WRITE_BUFERED_VAL_U64s_MAX       4
 #define BTREE_WRITE_BUFERED_U64s_MAX   (BKEY_U64s + BTREE_WRITE_BUFERED_VAL_U64s_MAX)
 
-struct btree_write_buffered_key {
-       u64                     journal_seq;
-       unsigned                journal_offset;
-       enum btree_id           btree;
-       __BKEY_PADDED(k, BTREE_WRITE_BUFERED_VAL_U64s_MAX);
-};
-
-union btree_write_buffer_state {
+struct wb_key_ref {
+union {
        struct {
-               atomic64_t      counter;
-       };
-
-       struct {
-               u64             v;
-       };
-
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+               unsigned                        idx:24;
+               u8                              pos[sizeof(struct bpos)];
+               enum btree_id                   btree:8;
+#else
+               enum btree_id                   btree:8;
+               u8                              pos[sizeof(struct bpos)];
+               unsigned                        idx:24;
+#endif
+       } __packed;
        struct {
-               u64                     nr:23;
-               u64                     idx:1;
-               u64                     ref0:20;
-               u64                     ref1:20;
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+               u64 lo;
+               u64 mi;
+               u64 hi;
+#else
+               u64 hi;
+               u64 mi;
+               u64 lo;
+#endif
        };
 };
+};
 
-struct btree_write_buffer {
-       struct mutex                    flush_lock;
-       struct journal_entry_pin        journal_pin;
+struct btree_write_buffered_key {
+       enum btree_id                   btree:8;
+       u64                             journal_seq:56;
+       __BKEY_PADDED(k, BTREE_WRITE_BUFERED_VAL_U64s_MAX);
+};
 
-       union btree_write_buffer_state  state;
-       size_t                          size;
+struct btree_write_buffer_keys {
+       DARRAY(struct btree_write_buffered_key) keys;
+       struct journal_entry_pin        pin;
+       struct mutex                    lock;
+};
 
-       struct btree_write_buffered_key *keys[2];
+struct btree_write_buffer {
+       DARRAY(struct wb_key_ref)       sorted;
+       struct btree_write_buffer_keys  inc;
+       struct btree_write_buffer_keys  flushing;
+       struct work_struct              flush_work;
 };
 
 #endif /* _BCACHEFS_BTREE_WRITE_BUFFER_TYPES_H */