On 20.11.18 14:43, Michal Hocko wrote:
> From: Michal Hocko <mho...@suse.com>
> 
> filemap_map_pages takes a speculative reference to each page in the
> range before it tries to lock that page. While this is correct it
> also can influence page migration which will bail out when seeing
> an elevated reference count. The faultaround code would bail on
> seeing a locked page so we can pro-actively check the PageLocked
> bit before page_cache_get_speculative and prevent from pointless
> reference count churn.
> 
> Cc: "Kirill A. Shutemov" <kir...@shutemov.name>
> Suggested-by: Jan Kara <j...@suse.cz>
> Signed-off-by: Michal Hocko <mho...@suse.com>
> ---
>  mm/filemap.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/mm/filemap.c b/mm/filemap.c
> index 81adec8ee02c..c76d6a251770 100644
> --- a/mm/filemap.c
> +++ b/mm/filemap.c
> @@ -2553,6 +2553,9 @@ void filemap_map_pages(struct vm_fault *vmf,
>                       goto next;
>  
>               head = compound_head(page);
> +
> +             if (PageLocked(head))
> +                     goto next;
>               if (!page_cache_get_speculative(head))
>                       goto next;
>  
> 

Right, no sense in referencing a page if we know we will drop the
reference right away.

Reviewed-by: David Hildenbrand <da...@redhat.com>

-- 

Thanks,

David / dhildenb

Reply via email to