//#include "bkey_methods.h"
#include "buckets_types.h"
#include "darray.h"
+#include "errcode.h"
#include "journal_types.h"
#include "replicas_types.h"
/*
* Iterate over all possible positions, synthesizing deleted keys for holes:
*/
-#define BTREE_ITER_SLOTS (1 << 0)
-#define BTREE_ITER_ALL_LEVELS (1 << 1)
+static const u16 BTREE_ITER_SLOTS = 1 << 0;
+static const u16 BTREE_ITER_ALL_LEVELS = 1 << 1;
/*
* Indicates that intent locks should be taken on leaf nodes, because we expect
* to be doing updates:
*/
-#define BTREE_ITER_INTENT (1 << 2)
+static const u16 BTREE_ITER_INTENT = 1 << 2;
/*
* Causes the btree iterator code to prefetch additional btree nodes from disk:
*/
-#define BTREE_ITER_PREFETCH (1 << 3)
+static const u16 BTREE_ITER_PREFETCH = 1 << 3;
/*
* Used in bch2_btree_iter_traverse(), to indicate whether we're searching for
* @pos or the first key strictly greater than @pos
*/
-#define BTREE_ITER_IS_EXTENTS (1 << 4)
-#define BTREE_ITER_NOT_EXTENTS (1 << 5)
-#define BTREE_ITER_CACHED (1 << 6)
-#define BTREE_ITER_WITH_KEY_CACHE (1 << 7)
-#define BTREE_ITER_WITH_UPDATES (1 << 8)
-#define BTREE_ITER_WITH_JOURNAL (1 << 9)
-#define __BTREE_ITER_ALL_SNAPSHOTS (1 << 10)
-#define BTREE_ITER_ALL_SNAPSHOTS (1 << 11)
-#define BTREE_ITER_FILTER_SNAPSHOTS (1 << 12)
-#define BTREE_ITER_NOPRESERVE (1 << 13)
-#define BTREE_ITER_CACHED_NOFILL (1 << 14)
-#define BTREE_ITER_KEY_CACHE_FILL (1 << 15)
+static const u16 BTREE_ITER_IS_EXTENTS = 1 << 4;
+static const u16 BTREE_ITER_NOT_EXTENTS = 1 << 5;
+static const u16 BTREE_ITER_CACHED = 1 << 6;
+static const u16 BTREE_ITER_WITH_KEY_CACHE = 1 << 7;
+static const u16 BTREE_ITER_WITH_UPDATES = 1 << 8;
+static const u16 BTREE_ITER_WITH_JOURNAL = 1 << 9;
+static const u16 __BTREE_ITER_ALL_SNAPSHOTS = 1 << 10;
+static const u16 BTREE_ITER_ALL_SNAPSHOTS = 1 << 11;
+static const u16 BTREE_ITER_FILTER_SNAPSHOTS = 1 << 12;
+static const u16 BTREE_ITER_NOPRESERVE = 1 << 13;
+static const u16 BTREE_ITER_CACHED_NOFILL = 1 << 14;
+static const u16 BTREE_ITER_KEY_CACHE_FILL = 1 << 15;
enum btree_path_uptodate {
BTREE_ITER_UPTODATE = 0,
unsigned long ip_allocated;
};
-#ifndef CONFIG_LOCKDEP
#define BTREE_ITER_MAX 64
-#else
-#define BTREE_ITER_MAX 32
-#endif
struct btree_trans_commit_hook;
typedef int (btree_trans_commit_hook_fn)(struct btree_trans *, struct btree_trans_commit_hook *);
u8 fn_idx;
u8 nr_sorted;
u8 nr_updates;
+ u8 nr_wb_updates;
+ u8 wb_updates_size;
bool used_mempool:1;
bool in_traverse_all:1;
bool paths_sorted:1;
bool notrace_relock_fail:1;
enum bch_errcode restarted:16;
u32 restart_count;
+ unsigned long last_begin_ip;
unsigned long last_restarted_ip;
unsigned long srcu_lock_time;
u8 sorted[BTREE_ITER_MAX + 8];
struct btree_path *paths;
struct btree_insert_entry *updates;
+ struct btree_write_buffered_key *wb_updates;
/* update path: */
struct btree_trans_commit_hook *hooks;