Re: [PATCH v4 2/2] fs/dcache.c: fix spin lockup issue on nlru->lock

Sahitya Tummala
2017-06-30T03:17:05Z

On 6/30/2017 4:18 AM, Andrew Morton wrote:
>
>> --- a/fs/dcache.c
>> +++ b/fs/dcache.c
>> @@ -1133,11 +1133,12 @@ void shrink_dcache_sb(struct super_block *sb)
>> LIST_HEAD(dispose);
>>
>> freed = list_lru_walk(&sb->s_dentry_lru,
>> - dentry_lru_isolate_shrink, &dispose, UINT_MAX);
>> + dentry_lru_isolate_shrink, &dispose, 1024);
>>
>> this_cpu_sub(nr_dentry_unused, freed);
>> shrink_dentry_list(&dispose);
>> - } while (freed > 0);
>> + cond_resched();
>> + } while (list_lru_count(&sb->s_dentry_lru) > 0);
>> }
>> EXPORT_SYMBOL(shrink_dcache_sb);
> I'll add a cc:stable to this one - a large dentry list is a relatively
> common thing.
>
> I'm assumng that [1/2] does not need to be backported, OK?

I think we should include [1/2] as well along with this patch, as this patch
is using list_lru_count(), which can return incorrect count if [1/2] is
not included.

Also, all the previous patches submitted for fixing this issue must be
dropped i.e,
mm/list_lru.c: use cond_resched_lock() for nlru->lock must be dropped.