mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-31 16:38:12 +00:00
fs: remove mpage_alloc
open code mpage_alloc in it's two callers and simplify the results because of the context: - __mpage_writepage always passes GFP_NOFS and can thus always sleep and will never get a NULL return from bio_alloc at all. - do_mpage_readpage can only get a non-sleeping context for readahead which never sets PF_MEMALLOC and thus doesn't need the retry loop either. Both cases will never have __GFP_HIGH set. Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20220124091107.642561-2-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
322cbb50de
commit
d5f68a42da
1 changed files with 6 additions and 29 deletions
35
fs/mpage.c
35
fs/mpage.c
|
@ -66,29 +66,6 @@ static struct bio *mpage_bio_submit(int op, int op_flags, struct bio *bio)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static struct bio *
|
||||
mpage_alloc(struct block_device *bdev,
|
||||
sector_t first_sector, int nr_vecs,
|
||||
gfp_t gfp_flags)
|
||||
{
|
||||
struct bio *bio;
|
||||
|
||||
/* Restrict the given (page cache) mask for slab allocations */
|
||||
gfp_flags &= GFP_KERNEL;
|
||||
bio = bio_alloc(gfp_flags, nr_vecs);
|
||||
|
||||
if (bio == NULL && (current->flags & PF_MEMALLOC)) {
|
||||
while (!bio && (nr_vecs /= 2))
|
||||
bio = bio_alloc(gfp_flags, nr_vecs);
|
||||
}
|
||||
|
||||
if (bio) {
|
||||
bio_set_dev(bio, bdev);
|
||||
bio->bi_iter.bi_sector = first_sector;
|
||||
}
|
||||
return bio;
|
||||
}
|
||||
|
||||
/*
|
||||
* support function for mpage_readahead. The fs supplied get_block might
|
||||
* return an up to date buffer. This is used to map that buffer into
|
||||
|
@ -296,10 +273,11 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args)
|
|||
page))
|
||||
goto out;
|
||||
}
|
||||
args->bio = mpage_alloc(bdev, blocks[0] << (blkbits - 9),
|
||||
bio_max_segs(args->nr_pages), gfp);
|
||||
args->bio = bio_alloc(gfp, bio_max_segs(args->nr_pages));
|
||||
if (args->bio == NULL)
|
||||
goto confused;
|
||||
bio_set_dev(args->bio, bdev);
|
||||
args->bio->bi_iter.bi_sector = blocks[0] << (blkbits - 9);
|
||||
}
|
||||
|
||||
length = first_hole << blkbits;
|
||||
|
@ -608,10 +586,9 @@ static int __mpage_writepage(struct page *page, struct writeback_control *wbc,
|
|||
page, wbc))
|
||||
goto out;
|
||||
}
|
||||
bio = mpage_alloc(bdev, blocks[0] << (blkbits - 9),
|
||||
BIO_MAX_VECS, GFP_NOFS|__GFP_HIGH);
|
||||
if (bio == NULL)
|
||||
goto confused;
|
||||
bio = bio_alloc(GFP_NOFS, BIO_MAX_VECS);
|
||||
bio_set_dev(bio, bdev);
|
||||
bio->bi_iter.bi_sector = blocks[0] << (blkbits - 9);
|
||||
|
||||
wbc_init_bio(wbc, bio);
|
||||
bio->bi_write_hint = inode->i_write_hint;
|
||||
|
|
Loading…
Reference in a new issue