Skip to content

Commit d46aa78

Browse files
keithbuschaxboe
authored andcommitted
block: use iter_ubuf for single range
This is more efficient than iter_iov. Signed-off-by: Keith Busch <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> [axboe: fold in iovec assumption fix] Signed-off-by: Jens Axboe <[email protected]>
1 parent 4397a17 commit d46aa78

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

block/blk-map.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ static struct bio_map_data *bio_alloc_map_data(struct iov_iter *data,
3131
return NULL;
3232
memcpy(bmd->iov, data->iov, sizeof(struct iovec) * data->nr_segs);
3333
bmd->iter = *data;
34-
bmd->iter.iov = bmd->iov;
34+
if (iter_is_iovec(data))
35+
bmd->iter.iov = bmd->iov;
3536
return bmd;
3637
}
3738

@@ -641,7 +642,7 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq,
641642
copy = true;
642643
else if (iov_iter_is_bvec(iter))
643644
map_bvec = true;
644-
else if (!iter_is_iovec(iter))
645+
else if (!user_backed_iter(iter))
645646
copy = true;
646647
else if (queue_virt_boundary(q))
647648
copy = queue_virt_boundary(q) & iov_iter_gap_alignment(iter);
@@ -682,9 +683,8 @@ int blk_rq_map_user(struct request_queue *q, struct request *rq,
682683
struct rq_map_data *map_data, void __user *ubuf,
683684
unsigned long len, gfp_t gfp_mask)
684685
{
685-
struct iovec iov;
686686
struct iov_iter i;
687-
int ret = import_single_range(rq_data_dir(rq), ubuf, len, &iov, &i);
687+
int ret = import_ubuf(rq_data_dir(rq), ubuf, len, &i);
688688

689689
if (unlikely(ret < 0))
690690
return ret;

0 commit comments

Comments
 (0)