diff options
author | Anuj Gupta <anuj20.g@samsung.com> | 2022-09-30 08:27:41 +0200 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2022-09-30 15:51:13 +0200 |
commit | 6732932c836a4313f471b92b4d90761f31d3fa81 (patch) | |
tree | b7e34e82f49c84152786373f69d7e154d8b79562 /drivers/scsi/sg.c | |
parent | block: add blk_rq_map_user_io (diff) | |
download | linux-6732932c836a4313f471b92b4d90761f31d3fa81.tar.xz linux-6732932c836a4313f471b92b4d90761f31d3fa81.zip |
scsi: Use blk_rq_map_user_io helper
Use the new blk_rq_map_user_io helper instead of duplicating code at
various places. Additionally this also takes advantage of the on-stack
iov fast path.
Signed-off-by: Anuj Gupta <anuj20.g@samsung.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20220930062749.152261-5-anuj20.g@samsung.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to '')
-rw-r--r-- | drivers/scsi/sg.c | 22 |
1 files changed, 2 insertions, 20 deletions
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 94c5e9a9309c..ce34a8ad53b4 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -1804,26 +1804,8 @@ sg_start_req(Sg_request *srp, unsigned char *cmd) md->from_user = 0; } - if (iov_count) { - struct iovec *iov = NULL; - struct iov_iter i; - - res = import_iovec(rw, hp->dxferp, iov_count, 0, &iov, &i); - if (res < 0) - return res; - - iov_iter_truncate(&i, hp->dxfer_len); - if (!iov_iter_count(&i)) { - kfree(iov); - return -EINVAL; - } - - res = blk_rq_map_user_iov(q, rq, md, &i, GFP_ATOMIC); - kfree(iov); - } else - res = blk_rq_map_user(q, rq, md, hp->dxferp, - hp->dxfer_len, GFP_ATOMIC); - + res = blk_rq_map_user_io(rq, md, hp->dxferp, hp->dxfer_len, + GFP_ATOMIC, iov_count, iov_count, 1, rw); if (!res) { srp->bio = rq->bio; |