On 12/01/2017 06:02 PM, Kirill Tkhai wrote:
> When there are more than 2 users of a page,  __tcache_page_tree_delete()
> fails to freeze it. We skip it and never try to freeze it again.
> 
> In this case the page remains not invalidated, and tcache_node->nr_pages
> never decremented. Later, we catch WARN_ON() reporting about this.
> 
> tcache_shrink_scan()                                   tcache_destroy_pool
>    tcache_lru_isolate()                                
>       tcache_grab_pool()
>       ...
>       page_cache_get_speculative() -->cnt == 2
> 
>       ...
>       tcache_put_pool() --> pool cnt zero
>       ...                                                  
> wait_for_completion(&pool->completion);
>    tcache_reclaim_pages                                    
> tcache_invalidate_node_pages()
>       __tcache_reclaim_page()                                  tcache_lookup()
>                                                                   
> page_cache_get_speculative  --> cnt == 3
>                                                                
> __tcache_page_tree_delete
>         page_ref_freeze(2) -->fail                                
> page_ref_freeze(2) -->fail
> 
> The patch fixes the problem. In case of we failed to invalidate a page,
> we remember this, and return to such pages after others are invalidated.
> 
> https://jira.sw.ru/browse/PSBM-78354
> 
> v2: Also fix tcache_detach_page()
> 
> Signed-off-by: Kirill Tkhai <ktk...@virtuozzo.com>
> ---

Acked-by: Andrey Ryabinin <aryabi...@virtuozzo.com>
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to