On Mon, Jul 17, 2023 at 8:07 PM Yin Fengwei <fengwei.yin@xxxxxxxxx> wrote: > > On 7/17/23 16:12, Yin Fengwei wrote: > > > > On 7/17/23 08:35, Yu Zhao wrote: > >> On Sun, Jul 16, 2023 at 6:00 PM Yin, Fengwei <fengwei.yin@xxxxxxxxx> wrote: > >>> > >>> On 7/15/2023 2:06 PM, Yu Zhao wrote: > >>>> There is a problem here that I didn't have the time to elaborate: we > >>>> can't mlock() a folio that is within the range but not fully mapped > >>>> because this folio can be on the deferred split queue. When the split > >>>> happens, those unmapped folios (not mapped by this vma but are mapped > >>>> into other vmas) will be stranded on the unevictable lru. > >>> > >>> This should be fine unless I missed something. During large folio split, > >>> the unmap_folio() will be migrate(anon)/unmap(file) folio. Folio will be > >>> munlocked in unmap_folio(). So the head/tail pages will be evictable always. > >> > >> It's close but not entirely accurate: munlock can fail on isolated folios. > > > > I suppose normal 4K page can hit this problem also and following patch could > > fix it: > No. This patch is not necessary as unevictable folio will not be picked up by > page reclaim. It's not possible to munlock the isolated folio from lru list. > > The possible cases I am ware are: page_migrate, madvise and damon_pa_pageout and > lru_gen_look_around. The first three already handle this case correctly by call > folio_putback_lru(). > > If folio is isolated, the split_folio() will just fail. So looks we are fine > for this corner case. Let me know if I miss something here. The race is between isolation and munlock -- split_folio() only fails if a folio is still isolated when it tries to freeze its refcnt, e.g., cpu 1 cpu 2 split_folio() isolation unmap_folio() putback freeze refcnt