On Tue, Mar 12, 2024 at 06:23:43PM -0700, Jane Chu wrote: > I noticed this recently OK, this is entirely different, so I'm going to start a new thread ;-) > * GUP pin and PG_locked transferred to @page. Rest subpages can be freed if > * they are not mapped. > * > * Returns 0 if the hugepage is split successfully. > * Returns -EBUSY if the page is pinned or if anon_vma disappeared from under > * us. > */ > int split_huge_page_to_list(struct page *page, struct list_head *list) > { > > I have a test case with poisoned shmem THP page that was mlocked and > > GUP pinned (FOLL_LONGTERM|FOLL_WRITE), but the split succeeded. I'm going to blame John for this! There's no reference to pincount anywhere in huge_memory.c, so I have no clue how this comment is even close to true, nor do I understand how it could be done, since we don't know which pages in a folio are pinned. I think we have to prohibit splits of folios that are GUP pinned.