]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/btree_write_buffer_types.h
Update upstream source from tag 'v1.6.3'
[bcachefs-tools-debian] / libbcachefs / btree_write_buffer_types.h
index 99993ba77aeab01a63470111e84db4c2ebc5afad..5f248873087c304eba435a263049cbf6af407ce5 100644 (file)
@@ -2,43 +2,56 @@
 #ifndef _BCACHEFS_BTREE_WRITE_BUFFER_TYPES_H
 #define _BCACHEFS_BTREE_WRITE_BUFFER_TYPES_H
 
+#include <linux/darray_types.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 */