ext4: remove unneeded check for error allocating bio_post_read_ctx
Since allocating an object from a mempool never fails when __GFP_DIRECT_RECLAIM (which is included in GFP_NOFS) is set, the check for failure to allocate a bio_post_read_ctx is unnecessary. Remove it. Also remove the redundant assignment to ->bi_private. Signed-off-by: Eric Biggers <ebiggers@google.com> Link: https://lore.kernel.org/r/20191231181256.47770-1-ebiggers@kernel.org Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
68e45330e3
commit
fd5fe25356
|
@ -189,12 +189,11 @@ static inline bool ext4_need_verity(const struct inode *inode, pgoff_t idx)
|
||||||
idx < DIV_ROUND_UP(inode->i_size, PAGE_SIZE);
|
idx < DIV_ROUND_UP(inode->i_size, PAGE_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct bio_post_read_ctx *get_bio_post_read_ctx(struct inode *inode,
|
static void ext4_set_bio_post_read_ctx(struct bio *bio,
|
||||||
struct bio *bio,
|
const struct inode *inode,
|
||||||
pgoff_t first_idx)
|
pgoff_t first_idx)
|
||||||
{
|
{
|
||||||
unsigned int post_read_steps = 0;
|
unsigned int post_read_steps = 0;
|
||||||
struct bio_post_read_ctx *ctx = NULL;
|
|
||||||
|
|
||||||
if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode))
|
if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode))
|
||||||
post_read_steps |= 1 << STEP_DECRYPT;
|
post_read_steps |= 1 << STEP_DECRYPT;
|
||||||
|
@ -203,14 +202,14 @@ static struct bio_post_read_ctx *get_bio_post_read_ctx(struct inode *inode,
|
||||||
post_read_steps |= 1 << STEP_VERITY;
|
post_read_steps |= 1 << STEP_VERITY;
|
||||||
|
|
||||||
if (post_read_steps) {
|
if (post_read_steps) {
|
||||||
ctx = mempool_alloc(bio_post_read_ctx_pool, GFP_NOFS);
|
/* Due to the mempool, this never fails. */
|
||||||
if (!ctx)
|
struct bio_post_read_ctx *ctx =
|
||||||
return ERR_PTR(-ENOMEM);
|
mempool_alloc(bio_post_read_ctx_pool, GFP_NOFS);
|
||||||
|
|
||||||
ctx->bio = bio;
|
ctx->bio = bio;
|
||||||
ctx->enabled_steps = post_read_steps;
|
ctx->enabled_steps = post_read_steps;
|
||||||
bio->bi_private = ctx;
|
bio->bi_private = ctx;
|
||||||
}
|
}
|
||||||
return ctx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline loff_t ext4_readpage_limit(struct inode *inode)
|
static inline loff_t ext4_readpage_limit(struct inode *inode)
|
||||||
|
@ -371,24 +370,16 @@ int ext4_mpage_readpages(struct address_space *mapping,
|
||||||
bio = NULL;
|
bio = NULL;
|
||||||
}
|
}
|
||||||
if (bio == NULL) {
|
if (bio == NULL) {
|
||||||
struct bio_post_read_ctx *ctx;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* bio_alloc will _always_ be able to allocate a bio if
|
* bio_alloc will _always_ be able to allocate a bio if
|
||||||
* __GFP_DIRECT_RECLAIM is set, see bio_alloc_bioset().
|
* __GFP_DIRECT_RECLAIM is set, see bio_alloc_bioset().
|
||||||
*/
|
*/
|
||||||
bio = bio_alloc(GFP_KERNEL,
|
bio = bio_alloc(GFP_KERNEL,
|
||||||
min_t(int, nr_pages, BIO_MAX_PAGES));
|
min_t(int, nr_pages, BIO_MAX_PAGES));
|
||||||
ctx = get_bio_post_read_ctx(inode, bio, page->index);
|
ext4_set_bio_post_read_ctx(bio, inode, page->index);
|
||||||
if (IS_ERR(ctx)) {
|
|
||||||
bio_put(bio);
|
|
||||||
bio = NULL;
|
|
||||||
goto set_error_page;
|
|
||||||
}
|
|
||||||
bio_set_dev(bio, bdev);
|
bio_set_dev(bio, bdev);
|
||||||
bio->bi_iter.bi_sector = blocks[0] << (blkbits - 9);
|
bio->bi_iter.bi_sector = blocks[0] << (blkbits - 9);
|
||||||
bio->bi_end_io = mpage_end_io;
|
bio->bi_end_io = mpage_end_io;
|
||||||
bio->bi_private = ctx;
|
|
||||||
bio_set_op_attrs(bio, REQ_OP_READ,
|
bio_set_op_attrs(bio, REQ_OP_READ,
|
||||||
is_readahead ? REQ_RAHEAD : 0);
|
is_readahead ? REQ_RAHEAD : 0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue