[PATCH 1/2] block: introduce and export blk_rq_map_user_vec
Kanchan Joshi
joshi.k at samsung.com
Thu Jan 27 00:25:35 PST 2022
Similiar to blk_rq_map_user except that it operates on iovec.
This is a prep patch.
Signed-off-by: Kanchan Joshi <joshi.k at samsung.com>
Signed-off-by: Anuj Gupta <anuj20.g at samsung.com>
---
block/blk-map.c | 19 +++++++++++++++++++
include/linux/blk-mq.h | 2 ++
2 files changed, 21 insertions(+)
diff --git a/block/blk-map.c b/block/blk-map.c
index 4526adde0156..7fe45df3e580 100644
--- a/block/blk-map.c
+++ b/block/blk-map.c
@@ -577,6 +577,25 @@ int blk_rq_map_user(struct request_queue *q, struct request *rq,
}
EXPORT_SYMBOL(blk_rq_map_user);
+int blk_rq_map_user_vec(struct request_queue *q, struct request *rq,
+ struct rq_map_data *map_data, void __user *uvec,
+ unsigned long nr_vecs, gfp_t gfp_mask)
+{
+ struct iovec fast_iov[UIO_FASTIOV];
+ struct iovec *iov = fast_iov;
+ struct iov_iter iter;
+ int ret;
+
+ ret = import_iovec(rq_data_dir(rq), uvec, nr_vecs, UIO_FASTIOV, &iov, &iter);
+ if (unlikely(ret < 0))
+ return ret;
+ ret = blk_rq_map_user_iov(q, rq, NULL, &iter, gfp_mask);
+ kfree(iov);
+
+ return ret;
+}
+EXPORT_SYMBOL(blk_rq_map_user_vec);
+
/**
* blk_rq_unmap_user - unmap a request with user data
* @bio: start of bio list
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index d319ffa59354..0fda666d2230 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -966,6 +966,8 @@ struct rq_map_data {
int blk_rq_map_user(struct request_queue *, struct request *,
struct rq_map_data *, void __user *, unsigned long, gfp_t);
+int blk_rq_map_user_vec(struct request_queue *, struct request *,
+ struct rq_map_data *, void __user *, unsigned long, gfp_t);
int blk_rq_map_user_iov(struct request_queue *, struct request *,
struct rq_map_data *, const struct iov_iter *, gfp_t);
int blk_rq_unmap_user(struct bio *);
--
2.25.1
More information about the Linux-nvme
mailing list