fs: do not pass __GFP_HIGHMEM to bio_alloc in do_mpage_readpage
authorChristoph Hellwig <hch@lst.de>
Wed, 23 Mar 2022 15:39:52 +0000 (16:39 +0100)
committerJens Axboe <axboe@kernel.dk>
Wed, 23 Mar 2022 15:42:15 +0000 (09:42 -0600)
The mpage bio alloc cleanup accidentally removed clearing ~GFP_KERNEL
bits from the mask passed to bio_alloc.  Fix this up in a slightly
less obsfucated way that mirrors what iomap does in its readpage code.

Fixes: 77c436de01c0 ("mpage: pass the operation to bio_alloc")
Reported-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Link: https://lore.kernel.org/r/20220323153952.1418560-1-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/mpage.c

index 6c4b810a21d0ab2d5c5a951866964e1243efcff5..2492b30192c009961524f3b33347d502a87701f8 100644 (file)
@@ -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))