Commit 2760bfe3 authored by Kent Overstreet's avatar Kent Overstreet

bcachefs: Fix reporting of freed objects from key cache shrinker

We count objects as freed when we move them to the srcu-pending lists
because we're doing the equivalent of a kfree_srcu(); the only
difference is managing the pending list ourself means we can allocate
from the pending list.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 9ac3e660
...@@ -841,7 +841,6 @@ static unsigned long bch2_btree_key_cache_scan(struct shrinker *shrink, ...@@ -841,7 +841,6 @@ static unsigned long bch2_btree_key_cache_scan(struct shrinker *shrink,
six_lock_exit(&ck->c.lock); six_lock_exit(&ck->c.lock);
kmem_cache_free(bch2_key_cache, ck); kmem_cache_free(bch2_key_cache, ck);
atomic_long_dec(&bc->nr_freed); atomic_long_dec(&bc->nr_freed);
freed++;
bc->nr_freed_nonpcpu--; bc->nr_freed_nonpcpu--;
bc->freed++; bc->freed++;
} }
...@@ -855,7 +854,6 @@ static unsigned long bch2_btree_key_cache_scan(struct shrinker *shrink, ...@@ -855,7 +854,6 @@ static unsigned long bch2_btree_key_cache_scan(struct shrinker *shrink,
six_lock_exit(&ck->c.lock); six_lock_exit(&ck->c.lock);
kmem_cache_free(bch2_key_cache, ck); kmem_cache_free(bch2_key_cache, ck);
atomic_long_dec(&bc->nr_freed); atomic_long_dec(&bc->nr_freed);
freed++;
bc->nr_freed_pcpu--; bc->nr_freed_pcpu--;
bc->freed++; bc->freed++;
} }
...@@ -877,23 +875,22 @@ static unsigned long bch2_btree_key_cache_scan(struct shrinker *shrink, ...@@ -877,23 +875,22 @@ static unsigned long bch2_btree_key_cache_scan(struct shrinker *shrink,
if (test_bit(BKEY_CACHED_DIRTY, &ck->flags)) { if (test_bit(BKEY_CACHED_DIRTY, &ck->flags)) {
bc->skipped_dirty++; bc->skipped_dirty++;
goto next;
} else if (test_bit(BKEY_CACHED_ACCESSED, &ck->flags)) { } else if (test_bit(BKEY_CACHED_ACCESSED, &ck->flags)) {
clear_bit(BKEY_CACHED_ACCESSED, &ck->flags); clear_bit(BKEY_CACHED_ACCESSED, &ck->flags);
bc->skipped_accessed++; bc->skipped_accessed++;
goto next; } else if (!bkey_cached_lock_for_evict(ck)) {
} else if (bkey_cached_lock_for_evict(ck)) { bc->skipped_lock_fail++;
} else {
bkey_cached_evict(bc, ck); bkey_cached_evict(bc, ck);
bkey_cached_free(bc, ck); bkey_cached_free(bc, ck);
bc->moved_to_freelist++; bc->moved_to_freelist++;
} else { freed++;
bc->skipped_lock_fail++;
} }
scanned++; scanned++;
if (scanned >= nr) if (scanned >= nr)
break; break;
next:
pos = next; pos = next;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment