This patch introduces a helper function called lock_graph_pop_from,
it pops the graph from i.

Signed-off-by: Alan Huang <[email protected]>
---
 fs/bcachefs/btree_locking.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/fs/bcachefs/btree_locking.c b/fs/bcachefs/btree_locking.c
index 50d9366d49bd..8cc648be7d29 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;
                }
 
-- 
2.45.2


Reply via email to