Re: [PATCH v2 3/3] mm: handling Non-LRU pages returned by follow_page

From: David Hildenbrand
Date: Sun Aug 14 2022 - 12:44:42 EST


On 14.08.22 16:05, Haiyue Wang wrote:
> Add the missed put_page handling for handling Non-LRU pages returned by
> follow_page with FOLL_GET flag set.
>
> This is the second patch for fixing the commit
> 3218f8712d6b ("mm: handling Non-LRU pages returned by vm_normal_pages")
>
> Signed-off-by: Haiyue Wang <haiyue.wang@xxxxxxxxx>
> ---
> mm/huge_memory.c | 2 +-
> mm/ksm.c | 10 ++++++++++
> mm/migrate.c | 6 +++++-
> 3 files changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> index 2ee6d38a1426..b2ba17c3dcd7 100644
> --- a/mm/huge_memory.c
> +++ b/mm/huge_memory.c
> @@ -2966,7 +2966,7 @@ static int split_huge_pages_pid(int pid, unsigned long vaddr_start,
> if (IS_ERR_OR_NULL(page))
> continue;
>
> - if (!is_transparent_hugepage(page))
> + if (is_zone_device_page(page) || !is_transparent_hugepage(page))
> goto next;
>
> total++;
> diff --git a/mm/ksm.c b/mm/ksm.c
> index fe3e0a39f73a..1360bb52ada6 100644
> --- a/mm/ksm.c
> +++ b/mm/ksm.c
> @@ -477,6 +477,10 @@ static int break_ksm(struct vm_area_struct *vma, unsigned long addr)
> FOLL_GET | FOLL_MIGRATION | FOLL_REMOTE);
> if (IS_ERR_OR_NULL(page))
> break;
> + if (is_zone_device_page(page)) {
> + put_page(page);
> + break;
> + }

I think we can drop this check completely. While working on patches that
touch this code I realized that this check is completely useless. device
pages are never PageKsm pages and there is no need to special-case here.

If a zone device page could be PageKsm, then we wouldn't handle it here
correctly and not break ksm.

So just drop it.



--
Thanks,

David / dhildenb