From: Caleb Sander Mateos <csander@purestorage.com>
To: Ming Lei <ming.lei@redhat.com>, Jens Axboe <axboe@kernel.dk>,
Shuah Khan <shuah@kernel.org>
Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org,
linux-kernel@vger.kernel.org,
Stanley Zhang <stazhang@purestorage.com>,
Uday Shankar <ushankar@purestorage.com>,
"Martin K . Petersen" <martin.petersen@oracle.com>,
Caleb Sander Mateos <csander@purestorage.com>
Subject: [PATCH v3 07/19] ublk: inline ublk_check_and_get_req() into ublk_user_copy()
Date: Mon, 5 Jan 2026 17:57:39 -0700 [thread overview]
Message-ID: <20260106005752.3784925-8-csander@purestorage.com> (raw)
In-Reply-To: <20260106005752.3784925-1-csander@purestorage.com>
ublk_check_and_get_req() has a single callsite in ublk_user_copy(). It
takes a ton of arguments in order to pass local variables from
ublk_user_copy() to ublk_check_and_get_req() and vice versa. And more
are about to be added. Combine the functions to reduce the argument
passing noise.
Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
---
drivers/block/ublk_drv.c | 51 ++++++++++++++--------------------------
1 file changed, 18 insertions(+), 33 deletions(-)
diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
index c3832ed8cec1..abb668b460a8 100644
--- a/drivers/block/ublk_drv.c
+++ b/drivers/block/ublk_drv.c
@@ -2650,70 +2650,55 @@ static inline bool ublk_check_ubuf_dir(const struct request *req,
return true;
return false;
}
-static struct request *ublk_check_and_get_req(struct kiocb *iocb,
- struct iov_iter *iter, size_t *off, int dir,
- struct ublk_io **io)
+static ssize_t
+ublk_user_copy(struct kiocb *iocb, struct iov_iter *iter, int dir)
{
struct ublk_device *ub = iocb->ki_filp->private_data;
struct ublk_queue *ubq;
struct request *req;
+ struct ublk_io *io;
size_t buf_off;
u16 tag, q_id;
+ ssize_t ret;
if (!user_backed_iter(iter))
- return ERR_PTR(-EACCES);
+ return -EACCES;
if (ub->dev_info.state == UBLK_S_DEV_DEAD)
- return ERR_PTR(-EACCES);
+ return -EACCES;
tag = ublk_pos_to_tag(iocb->ki_pos);
q_id = ublk_pos_to_hwq(iocb->ki_pos);
buf_off = ublk_pos_to_buf_off(iocb->ki_pos);
if (q_id >= ub->dev_info.nr_hw_queues)
- return ERR_PTR(-EINVAL);
+ return -EINVAL;
ubq = ublk_get_queue(ub, q_id);
if (!ublk_dev_support_user_copy(ub))
- return ERR_PTR(-EACCES);
+ return -EACCES;
if (tag >= ub->dev_info.queue_depth)
- return ERR_PTR(-EINVAL);
+ return -EINVAL;
- *io = &ubq->ios[tag];
- req = __ublk_check_and_get_req(ub, q_id, tag, *io, buf_off);
+ io = &ubq->ios[tag];
+ req = __ublk_check_and_get_req(ub, q_id, tag, io, buf_off);
if (!req)
- return ERR_PTR(-EINVAL);
-
- if (!ublk_check_ubuf_dir(req, dir))
- goto fail;
-
- *off = buf_off;
- return req;
-fail:
- ublk_put_req_ref(*io, req);
- return ERR_PTR(-EACCES);
-}
-
-static ssize_t
-ublk_user_copy(struct kiocb *iocb, struct iov_iter *iter, int dir)
-{
- struct request *req;
- struct ublk_io *io;
- size_t buf_off;
- size_t ret;
+ return -EINVAL;
- req = ublk_check_and_get_req(iocb, iter, &buf_off, dir, &io);
- if (IS_ERR(req))
- return PTR_ERR(req);
+ if (!ublk_check_ubuf_dir(req, dir)) {
+ ret = -EACCES;
+ goto out;
+ }
ret = ublk_copy_user_pages(req, buf_off, iter, dir);
- ublk_put_req_ref(io, req);
+out:
+ ublk_put_req_ref(io, req);
return ret;
}
static ssize_t ublk_ch_read_iter(struct kiocb *iocb, struct iov_iter *to)
{
--
2.45.2
next prev parent reply other threads:[~2026-01-06 0:58 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-06 0:57 [PATCH v3 00/19] ublk: add support for integrity data Caleb Sander Mateos
2026-01-06 0:57 ` [PATCH v3 01/19] blk-integrity: take const pointer in blk_integrity_rq() Caleb Sander Mateos
2026-01-06 0:57 ` [PATCH v3 02/19] ublk: move ublk flag check functions earlier Caleb Sander Mateos
2026-01-06 0:57 ` [PATCH v3 03/19] ublk: support UBLK_PARAM_TYPE_INTEGRITY in device creation Caleb Sander Mateos
2026-01-06 13:09 ` Ming Lei
2026-01-06 16:32 ` Caleb Sander Mateos
2026-01-07 0:15 ` Ming Lei
2026-01-07 2:20 ` Caleb Sander Mateos
2026-01-06 0:57 ` [PATCH v3 04/19] ublk: set UBLK_IO_F_INTEGRITY in ublksrv_io_desc Caleb Sander Mateos
2026-01-06 0:57 ` [PATCH v3 05/19] ublk: add ublk_copy_user_bvec() helper Caleb Sander Mateos
2026-01-06 13:14 ` Ming Lei
2026-01-06 0:57 ` [PATCH v3 06/19] ublk: split out ublk_user_copy() helper Caleb Sander Mateos
2026-01-06 0:57 ` Caleb Sander Mateos [this message]
2026-01-06 0:57 ` [PATCH v3 08/19] ublk: move offset check out of __ublk_check_and_get_req() Caleb Sander Mateos
2026-01-06 0:57 ` [PATCH v3 09/19] ublk: implement integrity user copy Caleb Sander Mateos
2026-01-06 13:34 ` Ming Lei
2026-01-06 18:20 ` Caleb Sander Mateos
2026-01-07 0:28 ` Ming Lei
2026-01-08 1:50 ` Caleb Sander Mateos
2026-01-08 2:11 ` Ming Lei
2026-01-06 13:46 ` Ming Lei
2026-01-06 0:57 ` [PATCH v3 10/19] ublk: support UBLK_F_INTEGRITY Caleb Sander Mateos
2026-01-06 13:36 ` Ming Lei
2026-01-06 0:57 ` [PATCH v3 11/19] ublk: optimize ublk_user_copy() on daemon task Caleb Sander Mateos
2026-01-06 0:57 ` [PATCH v3 12/19] selftests: ublk: display UBLK_F_INTEGRITY support Caleb Sander Mateos
2026-01-06 13:38 ` Ming Lei
2026-01-06 0:57 ` [PATCH v3 13/19] selftests: ublk: add utility to get block device metadata size Caleb Sander Mateos
2026-01-06 13:50 ` Ming Lei
2026-01-06 17:18 ` Caleb Sander Mateos
2026-01-06 0:57 ` [PATCH v3 14/19] selftests: ublk: add kublk support for integrity params Caleb Sander Mateos
2026-01-06 0:57 ` [PATCH v3 15/19] selftests: ublk: implement integrity user copy in kublk Caleb Sander Mateos
2026-01-06 0:57 ` [PATCH v3 16/19] selftests: ublk: support non-O_DIRECT backing files Caleb Sander Mateos
2026-01-06 0:57 ` [PATCH v3 17/19] selftests: ublk: add integrity data support to loop target Caleb Sander Mateos
2026-01-06 0:57 ` [PATCH v3 18/19] selftests: ublk: add integrity params test Caleb Sander Mateos
2026-01-06 0:57 ` [PATCH v3 19/19] selftests: ublk: add end-to-end integrity test Caleb Sander Mateos
2026-01-06 14:10 ` Ming Lei
2026-01-06 17:15 ` Caleb Sander Mateos
2026-01-07 0:21 ` Ming Lei
2026-01-07 1:32 ` Caleb Sander Mateos
2026-01-07 1:49 ` Ming Lei
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260106005752.3784925-8-csander@purestorage.com \
--to=csander@purestorage.com \
--cc=axboe@kernel.dk \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=ming.lei@redhat.com \
--cc=shuah@kernel.org \
--cc=stazhang@purestorage.com \
--cc=ushankar@purestorage.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.