From 54b2db3d58eadb4496a671d43b1e7c0506dd0220 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Thu, 11 Nov 2021 15:50:22 -0500 Subject: [PATCH] bcachefs: Fix infinite loop in bch2_btree_cache_scan() When attempting to free btree nodes, we might not be able to free all the nodes that were requested. But the code was looping until it had freed _all_ the nodes requested, when it should have only been attempting to free nr nodes. Signed-off-by: Kent Overstreet --- fs/bcachefs/btree_cache.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/bcachefs/btree_cache.c b/fs/bcachefs/btree_cache.c index 7f5620a4d7c55..4e855ae517316 100644 --- a/fs/bcachefs/btree_cache.c +++ b/fs/bcachefs/btree_cache.c @@ -309,7 +309,7 @@ static unsigned long bch2_btree_cache_scan(struct shrinker *shrink, touched++; - if (freed >= nr) + if (touched >= nr) break; if (!btree_node_reclaim(c, b)) { @@ -323,7 +323,7 @@ restart: list_for_each_entry_safe(b, t, &bc->live, list) { touched++; - if (freed >= nr) { + if (touched >= nr) { /* Save position */ if (&t->list != &bc->live) list_move_tail(&bc->live, &t->list); -- 2.30.2