]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: Introduce lock_graph_pop_from
authorAlan Huang <mmpgouride@gmail.com>
Wed, 2 Oct 2024 19:06:31 +0000 (03:06 +0800)
committerKent Overstreet <kent.overstreet@linux.dev>
Tue, 14 Jan 2025 15:45:13 +0000 (10:45 -0500)
This patch introduces a helper function called lock_graph_pop_from,
it pops the graph from i.

Signed-off-by: Alan Huang <mmpgouride@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_locking.c

index 8174799dd4b314a97aee16bf7e2759302912b662..ec72a8adf71335d77f3dff090ba28a0260e8e0e2 100644 (file)
@@ -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;
                }