block: factor out blk_rq_map_bio_alloc helper
Move bio allocation logic from bio_map_user_iov to a new helper blk_rq_map_bio_alloc. It is named so because functionality is opposite of what is done inside blk_mq_map_bio_put. This is a prep patch. Signed-off-by: Kanchan Joshi <joshi.k@samsung.com> Link: https://lore.kernel.org/r/20220930062749.152261-10-anuj20.g@samsung.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
32f1c71b15
commit
ab89e8e7ca
|
@ -241,6 +241,27 @@ static void blk_mq_map_bio_put(struct bio *bio)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct bio *blk_rq_map_bio_alloc(struct request *rq,
|
||||||
|
unsigned int nr_vecs, gfp_t gfp_mask)
|
||||||
|
{
|
||||||
|
struct bio *bio;
|
||||||
|
|
||||||
|
if (rq->cmd_flags & REQ_POLLED) {
|
||||||
|
blk_opf_t opf = rq->cmd_flags | REQ_ALLOC_CACHE;
|
||||||
|
|
||||||
|
bio = bio_alloc_bioset(NULL, nr_vecs, opf, gfp_mask,
|
||||||
|
&fs_bio_set);
|
||||||
|
if (!bio)
|
||||||
|
return NULL;
|
||||||
|
} else {
|
||||||
|
bio = bio_kmalloc(nr_vecs, gfp_mask);
|
||||||
|
if (!bio)
|
||||||
|
return NULL;
|
||||||
|
bio_init(bio, NULL, bio->bi_inline_vecs, nr_vecs, req_op(rq));
|
||||||
|
}
|
||||||
|
return bio;
|
||||||
|
}
|
||||||
|
|
||||||
static int bio_map_user_iov(struct request *rq, struct iov_iter *iter,
|
static int bio_map_user_iov(struct request *rq, struct iov_iter *iter,
|
||||||
gfp_t gfp_mask)
|
gfp_t gfp_mask)
|
||||||
{
|
{
|
||||||
|
@ -253,19 +274,9 @@ static int bio_map_user_iov(struct request *rq, struct iov_iter *iter,
|
||||||
if (!iov_iter_count(iter))
|
if (!iov_iter_count(iter))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (rq->cmd_flags & REQ_POLLED) {
|
bio = blk_rq_map_bio_alloc(rq, nr_vecs, gfp_mask);
|
||||||
blk_opf_t opf = rq->cmd_flags | REQ_ALLOC_CACHE;
|
if (bio == NULL)
|
||||||
|
return -ENOMEM;
|
||||||
bio = bio_alloc_bioset(NULL, nr_vecs, opf, gfp_mask,
|
|
||||||
&fs_bio_set);
|
|
||||||
if (!bio)
|
|
||||||
return -ENOMEM;
|
|
||||||
} else {
|
|
||||||
bio = bio_kmalloc(nr_vecs, gfp_mask);
|
|
||||||
if (!bio)
|
|
||||||
return -ENOMEM;
|
|
||||||
bio_init(bio, NULL, bio->bi_inline_vecs, nr_vecs, req_op(rq));
|
|
||||||
}
|
|
||||||
|
|
||||||
while (iov_iter_count(iter)) {
|
while (iov_iter_count(iter)) {
|
||||||
struct page **pages, *stack_pages[UIO_FASTIOV];
|
struct page **pages, *stack_pages[UIO_FASTIOV];
|
||||||
|
|
Loading…
Reference in New Issue