From: Alan Huang Date: Wed, 2 Oct 2024 19:06:31 +0000 (+0800) Subject: bcachefs: Introduce lock_graph_pop_from X-Git-Tag: v6.14-rc1~204^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6853a5e5d48b54127166291b1fc2cc7030fbcc38;p=thirdparty%2Flinux.git bcachefs: Introduce lock_graph_pop_from This patch introduces a helper function called lock_graph_pop_from, it pops the graph from i. Signed-off-by: Alan Huang Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/btree_locking.c b/fs/bcachefs/btree_locking.c index 8174799dd4b31..ec72a8adf7133 100644 --- a/fs/bcachefs/btree_locking.c +++ b/fs/bcachefs/btree_locking.c @@ -109,6 +109,12 @@ static noinline void lock_graph_pop_all(struct lock_graph *g) lock_graph_up(g); } +static noinline void lock_graph_pop_from(struct lock_graph *g, struct trans_waiting_for_lock *i) +{ + while (g->g + g->nr > i) + lock_graph_up(g); +} + static void __lock_graph_down(struct lock_graph *g, struct btree_trans *trans) { g->g[g->nr++] = (struct trans_waiting_for_lock) { @@ -131,8 +137,7 @@ static bool lock_graph_remove_non_waiters(struct lock_graph *g) for (i = g->g + 1; i < g->g + g->nr; i++) if (i->trans->locking != i->node_want || i->trans->locking_wait.start_time != i[-1].lock_start_time) { - while (g->g + g->nr > i) - lock_graph_up(g); + lock_graph_pop_from(g, i); return true; }