Skip to content

Commit 1dbd449

Browse files
Waiman-Longtorvalds
authored andcommitted
fs/dcache: Fix incorrect nr_dentry_unused accounting in shrink_dcache_sb()
The nr_dentry_unused per-cpu counter tracks dentries in both the LRU lists and the shrink lists where the DCACHE_LRU_LIST bit is set. The shrink_dcache_sb() function moves dentries from the LRU list to a shrink list and subtracts the dentry count from nr_dentry_unused. This is incorrect as the nr_dentry_unused count will also be decremented in shrink_dentry_list() via d_shrink_del(). To fix this double decrement, the decrement in the shrink_dcache_sb() function is taken out. Fixes: 4e717f5 ("list_lru: remove special case function list_lru_dispose_all." Cc: stable@kernel.org Signed-off-by: Waiman Long <longman@redhat.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 1c0490c commit 1dbd449

File tree

1 file changed

+1
-5
lines changed

1 file changed

+1
-5
lines changed

fs/dcache.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,15 +1188,11 @@ static enum lru_status dentry_lru_isolate_shrink(struct list_head *item,
11881188
*/
11891189
void shrink_dcache_sb(struct super_block *sb)
11901190
{
1191-
long freed;
1192-
11931191
do {
11941192
LIST_HEAD(dispose);
11951193

1196-
freed = list_lru_walk(&sb->s_dentry_lru,
1194+
list_lru_walk(&sb->s_dentry_lru,
11971195
dentry_lru_isolate_shrink, &dispose, 1024);
1198-
1199-
this_cpu_sub(nr_dentry_unused, freed);
12001196
shrink_dentry_list(&dispose);
12011197
} while (list_lru_count(&sb->s_dentry_lru) > 0);
12021198
}

0 commit comments

Comments
 (0)