On Mon, Feb 10, 2020 at 07:50:04PM -0800, Minchan Kim wrote: > On Mon, Feb 10, 2020 at 05:10:21PM -0800, Matthew Wilcox wrote: > > On Mon, Feb 10, 2020 at 04:19:58PM -0800, Minchan Kim wrote: > > > filemap_fault > > > find a page form page(PG_uptodate|PG_readahead|PG_writeback) > > > > Uh ... That shouldn't be possible. > > Please see shrink_page_list. Vmscan uses PG_reclaim to accelerate > page reclaim when the writeback is done so the page will have both > flags at the same time and the PG reclaim could be regarded as > PG_readahead in fault conext. What part of fault context can make that mistake? The snippet I quoted below is from page_cache_async_readahead() where it will clearly not make that mistake. There's a lot of code here; please don't presume I know all the areas you're talking about. > > > > /* > > * Same bit is used for PG_readahead and PG_reclaim. > > */ > > if (PageWriteback(page)) > > return; > > > > ClearPageReadahead(page);