On Wed, Mar 23, 2022 at 07:42:48AM +0100, Christoph Hellwig wrote: > On Wed, Mar 23, 2022 at 06:38:22AM +0900, Ryusuke Konishi wrote: > > This looks because the mask of GFP_KERNEL is removed along with > > the removal of mpage_alloc(). > > > > > The default value of the gfp flag is set to GFP_HIGHUSER_MOVABLE by > > inode_init_always(). > > So, __GFP_HIGHMEM hits the gfp warning at bio_alloc() that > > do_mpage_readpage() calls. > > Yeah. Let's try this to match the iomap code: > > diff --git a/fs/mpage.c b/fs/mpage.c > index 9ed1e58e8d70b..d465883edf719 100644 > --- a/fs/mpage.c > +++ b/fs/mpage.c > @@ -148,13 +148,11 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) > int op = REQ_OP_READ; > unsigned nblocks; > unsigned relative_block; > - gfp_t gfp; > + gfp_t gfp = mapping_gfp_constraint(page->mapping, GFP_KERNEL); > > if (args->is_readahead) { > op |= REQ_RAHEAD; > - gfp = readahead_gfp_mask(page->mapping); > - } else { > - gfp = mapping_gfp_constraint(page->mapping, GFP_KERNEL); > + gfp |= __GFP_NORETRY | __GFP_NOWARN; > } > > if (page_has_buffers(page)) That fixes the problem for me. Tested-by: Guenter Roeck <linux@xxxxxxxxxxxx> Guenter