diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2021-11-11 15:50:22 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:09:16 -0400 |
commit | 54b2db3d58eadb4496a671d43b1e7c0506dd0220 (patch) | |
tree | d1bce98e69a4187a3708c9b49f229de01a661c5e | |
parent | f74a5051b0e58a8f4fab26a2fc65b95ee17df7a0 (diff) |
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 <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/btree_cache.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/bcachefs/btree_cache.c b/fs/bcachefs/btree_cache.c index 7f5620a4d7c5..4e855ae51731 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); |