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