Message ID | 20201021015902.19223-3-matthew.ruffell@canonical.com |
---|---|
State | New |
Headers | show |
Series | bcache: Issues with large IO wait in bch_mca_scan() when shrinker is enabled | expand |
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c index 050f1c333d4e..c9b87a6e1c2e 100644 --- a/drivers/md/bcache/btree.c +++ b/drivers/md/bcache/btree.c @@ -729,17 +729,17 @@ static unsigned long bch_mca_scan(struct shrinker *shrink, i = 0; btree_cache_used = c->btree_cache_used; - list_for_each_entry_safe(b, t, &c->btree_cache_freeable, list) { + list_for_each_entry_safe_reverse(b, t, &c->btree_cache_freeable, list) { if (nr <= 0) goto out; - if (++i > 3 && - !mca_reap(b, 0, false)) { + if (!mca_reap(b, 0, false)) { mca_data_free(b); rw_unlock(true, b); freed++; } nr--; + i++; } for (; (nr--) && i < btree_cache_used; i++) {