mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-01 02:32:49 -04:00
bcachefs: Split out __btree_path_up_until_good_node()
This breaks up btree_path_up_until_good_node() so that only the fastpath gets inlined. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
@@ -994,14 +994,9 @@ static int bch2_btree_path_traverse_all(struct btree_trans *trans)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline bool btree_path_good_node(struct btree_trans *trans,
|
||||
struct btree_path *path,
|
||||
unsigned l, int check_pos)
|
||||
static inline bool btree_path_check_pos_in_node(struct btree_path *path,
|
||||
unsigned l, int check_pos)
|
||||
{
|
||||
if (!is_btree_node(path, l) ||
|
||||
!bch2_btree_node_relock(trans, path, l))
|
||||
return false;
|
||||
|
||||
if (check_pos < 0 && btree_path_pos_before_node(path, path->l[l].b))
|
||||
return false;
|
||||
if (check_pos > 0 && btree_path_pos_after_node(path, path->l[l].b))
|
||||
@@ -1009,6 +1004,15 @@ static inline bool btree_path_good_node(struct btree_trans *trans,
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool btree_path_good_node(struct btree_trans *trans,
|
||||
struct btree_path *path,
|
||||
unsigned l, int check_pos)
|
||||
{
|
||||
return is_btree_node(path, l) &&
|
||||
bch2_btree_node_relock(trans, path, l) &&
|
||||
btree_path_check_pos_in_node(path, l, check_pos);
|
||||
}
|
||||
|
||||
static void btree_path_set_level_down(struct btree_trans *trans,
|
||||
struct btree_path *path,
|
||||
unsigned new_level)
|
||||
@@ -1025,9 +1029,9 @@ static void btree_path_set_level_down(struct btree_trans *trans,
|
||||
bch2_btree_path_verify(trans, path);
|
||||
}
|
||||
|
||||
static inline unsigned btree_path_up_until_good_node(struct btree_trans *trans,
|
||||
struct btree_path *path,
|
||||
int check_pos)
|
||||
static noinline unsigned __btree_path_up_until_good_node(struct btree_trans *trans,
|
||||
struct btree_path *path,
|
||||
int check_pos)
|
||||
{
|
||||
unsigned i, l = path->level;
|
||||
again:
|
||||
@@ -1048,6 +1052,16 @@ static inline unsigned btree_path_up_until_good_node(struct btree_trans *trans,
|
||||
return l;
|
||||
}
|
||||
|
||||
static inline unsigned btree_path_up_until_good_node(struct btree_trans *trans,
|
||||
struct btree_path *path,
|
||||
int check_pos)
|
||||
{
|
||||
return likely(btree_node_locked(path, path->level) &&
|
||||
btree_path_check_pos_in_node(path, path->level, check_pos))
|
||||
? path->level
|
||||
: __btree_path_up_until_good_node(trans, path, check_pos);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is the main state machine for walking down the btree - walks down to a
|
||||
* specified depth
|
||||
|
||||
Reference in New Issue
Block a user