Commit 54b2db3d authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet
Browse files

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: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent f74a5051
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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 @@ static unsigned long bch2_btree_cache_scan(struct shrinker *shrink,
	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);