mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-29 17:23:36 +00:00
block: add a bio_chain_and_submit helper
This is basically blk_next_bio just with the bio allocation moved to the caller to allow for more flexible bio handling in the caller. Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20240506042027.2289826-4-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
30f1e72414
commit
81c2168c22
27
block/bio.c
27
block/bio.c
@ -345,17 +345,28 @@ void bio_chain(struct bio *bio, struct bio *parent)
|
||||
}
|
||||
EXPORT_SYMBOL(bio_chain);
|
||||
|
||||
/**
|
||||
* bio_chain_and_submit - submit a bio after chaining it to another one
|
||||
* @prev: bio to chain and submit
|
||||
* @new: bio to chain to
|
||||
*
|
||||
* If @prev is non-NULL, chain it to @new and submit it.
|
||||
*
|
||||
* Return: @new.
|
||||
*/
|
||||
struct bio *bio_chain_and_submit(struct bio *prev, struct bio *new)
|
||||
{
|
||||
if (prev) {
|
||||
bio_chain(prev, new);
|
||||
submit_bio(prev);
|
||||
}
|
||||
return new;
|
||||
}
|
||||
|
||||
struct bio *blk_next_bio(struct bio *bio, struct block_device *bdev,
|
||||
unsigned int nr_pages, blk_opf_t opf, gfp_t gfp)
|
||||
{
|
||||
struct bio *new = bio_alloc(bdev, nr_pages, opf, gfp);
|
||||
|
||||
if (bio) {
|
||||
bio_chain(bio, new);
|
||||
submit_bio(bio);
|
||||
}
|
||||
|
||||
return new;
|
||||
return bio_chain_and_submit(bio, bio_alloc(bdev, nr_pages, opf, gfp));
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(blk_next_bio);
|
||||
|
||||
|
@ -831,5 +831,6 @@ static inline void bio_clear_polled(struct bio *bio)
|
||||
|
||||
struct bio *blk_next_bio(struct bio *bio, struct block_device *bdev,
|
||||
unsigned int nr_pages, blk_opf_t opf, gfp_t gfp);
|
||||
struct bio *bio_chain_and_submit(struct bio *prev, struct bio *new);
|
||||
|
||||
#endif /* __LINUX_BIO_H */
|
||||
|
Loading…
Reference in New Issue
Block a user