On Thu, Feb 13, 2020 at 06:08:24PM +0100, Michal Hocko wrote: > On Thu 13-02-20 08:46:07, Matthew Wilcox wrote: > > On Thu, Feb 13, 2020 at 08:48:47AM +0100, Michal Hocko wrote: > > > Can we pursue on this please? An explicit NOFS scope annotation with a > > > reference to compaction potentially locking up on pages in the readahead > > > would be a great start. > > > > How about this (on top of the current readahead series): > > > > diff --git a/mm/readahead.c b/mm/readahead.c > > index 29ca25c8f01e..32fd32b913da 100644 > > --- a/mm/readahead.c > > +++ b/mm/readahead.c > > @@ -160,6 +160,16 @@ unsigned long page_cache_readahead_limit(struct address_space *mapping, > > .nr_pages = 0, > > }; > > > > + /* > > + * Partway through the readahead operation, we will have added > > + * locked pages to the page cache, but will not yet have submitted > > + * them for I/O. Adding another page may need to allocate > > + * memory, which can trigger memory migration. Telling the VM > > I would go with s@migration@compaction@ because it would make it more > obvious that this is about high order allocations. Perhaps even just 'reclaim' -- it's about compaction today, but tomorrow's VM might try to reclaim these pages too. They are on the LRU, after all. So I currently have: /* * Partway through the readahead operation, we will have added * locked pages to the page cache, but will not yet have submitted * them for I/O. Adding another page may need to allocate memory, * which can trigger memory reclaim. Telling the VM we're in * the middle of a filesystem operation will cause it to not * touch file-backed pages, preventing a deadlock. Most (all?) * filesystems already specify __GFP_NOFS in their mapping's * gfp_mask, but let's be explicit here. */ Thanks!