Re: [RFC PATCH 3/3] mm, fault_around: do not take a reference to a locked page

From: David Hildenbrand
Date: Tue Nov 20 2018 - 09:33:13 EST


On 20.11.18 14:43, Michal Hocko wrote:
> From: Michal Hocko <mhocko@xxxxxxxx>
>
> 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" <kirill@xxxxxxxxxxxxx>
> Suggested-by: Jan Kara <jack@xxxxxxx>
> Signed-off-by: Michal Hocko <mhocko@xxxxxxxx>
> ---
> 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 <david@xxxxxxxxxx>

--

Thanks,

David / dhildenb