mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-12 01:20:14 +00:00
iomap: move read/readahead bio submission logic into helper function
Move the read/readahead bio submission logic into a separate helper. This is needed to make iomap read/readahead more generically usable, especially for filesystems that do not require CONFIG_BLOCK. Signed-off-by: Joanne Koong <joannelkoong@gmail.com> Tested-by: syzbot@syzkaller.appspotmail.com Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
573c14c821
commit
7588469b5e
@ -367,6 +367,14 @@ struct iomap_readpage_ctx {
|
||||
struct readahead_control *rac;
|
||||
};
|
||||
|
||||
static void iomap_bio_submit_read(struct iomap_readpage_ctx *ctx)
|
||||
{
|
||||
struct bio *bio = ctx->bio;
|
||||
|
||||
if (bio)
|
||||
submit_bio(bio);
|
||||
}
|
||||
|
||||
static void iomap_bio_read_folio_range(const struct iomap_iter *iter,
|
||||
struct iomap_readpage_ctx *ctx, loff_t pos, size_t plen)
|
||||
{
|
||||
@ -392,8 +400,7 @@ static void iomap_bio_read_folio_range(const struct iomap_iter *iter,
|
||||
gfp_t orig_gfp = gfp;
|
||||
unsigned int nr_vecs = DIV_ROUND_UP(length, PAGE_SIZE);
|
||||
|
||||
if (ctx->bio)
|
||||
submit_bio(ctx->bio);
|
||||
iomap_bio_submit_read(ctx);
|
||||
|
||||
if (ctx->rac) /* same as readahead_gfp_mask */
|
||||
gfp |= __GFP_NORETRY | __GFP_NOWARN;
|
||||
@ -488,13 +495,10 @@ int iomap_read_folio(struct folio *folio, const struct iomap_ops *ops)
|
||||
while ((ret = iomap_iter(&iter, ops)) > 0)
|
||||
iter.status = iomap_read_folio_iter(&iter, &ctx);
|
||||
|
||||
if (ctx.bio) {
|
||||
submit_bio(ctx.bio);
|
||||
WARN_ON_ONCE(!ctx.cur_folio_in_bio);
|
||||
} else {
|
||||
WARN_ON_ONCE(ctx.cur_folio_in_bio);
|
||||
iomap_bio_submit_read(&ctx);
|
||||
|
||||
if (!ctx.cur_folio_in_bio)
|
||||
folio_unlock(folio);
|
||||
}
|
||||
|
||||
/*
|
||||
* Just like mpage_readahead and block_read_full_folio, we always
|
||||
@ -560,12 +564,10 @@ void iomap_readahead(struct readahead_control *rac, const struct iomap_ops *ops)
|
||||
while (iomap_iter(&iter, ops) > 0)
|
||||
iter.status = iomap_readahead_iter(&iter, &ctx);
|
||||
|
||||
if (ctx.bio)
|
||||
submit_bio(ctx.bio);
|
||||
if (ctx.cur_folio) {
|
||||
if (!ctx.cur_folio_in_bio)
|
||||
folio_unlock(ctx.cur_folio);
|
||||
}
|
||||
iomap_bio_submit_read(&ctx);
|
||||
|
||||
if (ctx.cur_folio && !ctx.cur_folio_in_bio)
|
||||
folio_unlock(ctx.cur_folio);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(iomap_readahead);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user