From: Clay Mayers <Clay.Mayers@kioxia.com>
To: "linux-nvme@lists.infradead.org" <linux-nvme@lists.infradead.org>,
"io-uring@vger.kernel.org" <io-uring@vger.kernel.org>,
"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>
Cc: "axboe@kernel.dk" <axboe@kernel.dk>, "hch@lst.de" <hch@lst.de>,
"kbusch@kernel.org" <kbusch@kernel.org>,
"javier@javigon.com" <javier@javigon.com>,
"anuj20.g@samsung.com" <anuj20.g@samsung.com>,
"joshiiitr@gmail.com" <joshiiitr@gmail.com>,
"pankydev8@gmail.com" <pankydev8@gmail.com>
Subject: RE: [RFC 02/13] nvme: wire-up support for async-passthru on
Date: Tue, 21 Dec 2021 21:16:27 +0000 [thread overview]
Message-ID: <2da62822fd56414d9893b89e160ed05c@kioxia.com> (raw)
Message-ID: <20211220141734.12206-3-joshi.k@samsung.com>
On 12/20/21 19:47:23 +0530, Kanchan Joshi wrote:
> Introduce handlers for fops->async_cmd(), implementing async passthru on
> char device (including the multipath one).
> The handlers supports NVME_IOCTL_IO64_CMD.
>
I commented on these two issues below in more detail at
https://github.com/joshkan/nvme-uring-pt/issues
> +static void nvme_setup_uring_cmd_data(struct request *rq,
> + struct io_uring_cmd *ioucmd, void *meta,
> + void __user *meta_buffer, u32 meta_len, bool write) {
> + struct nvme_uring_cmd *cmd = nvme_uring_cmd(ioucmd);
> +
> + /* to free bio on completion, as req->bio will be null at that time */
> + cmd->bio = rq->bio;
> + /* meta update is required only for read requests */
> + if (meta && !write) {
> + cmd->meta = meta;
> + cmd->meta_buffer = meta_buffer;
> + cmd->meta_len = meta_len;
> + } else {
> + cmd->meta = NULL;
I believe that not saving meta in cmd->meta will leak it when it's a write.
But nvme_pt_task_cb also needs to change to copy to user when
cmd->meta_buffer is set instead of cmd->meta.
> +
> +int nvme_ns_chr_async_cmd(struct io_uring_cmd *ioucmd,
> + enum io_uring_cmd_flags flags)
> +{
> + struct nvme_ns *ns = container_of(file_inode(ioucmd->file)->i_cdev,
> + struct nvme_ns, cdev);
> +
> + return nvme_ns_async_ioctl(ns, ioucmd); }
> +
The uring cmd flags are not being passed to nvme_ns_async_ioctl - what if
IO_URING_F_NONBLOCK Is set? When it is, I think the nvme_alloc_request()
call in nvme_submit_user_cmd() needs to pass in BLK_MQ_REQ_NOWAIT as
the flags parameter or move to another thread. Our proto-type does the former
requiring user mode to retry on -EWOULDBLOCK and -EBUSY.
--
Clay Mayers
next reply other threads:[~2021-12-21 21:31 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-21 21:16 Clay Mayers [this message]
2021-12-22 8:02 ` [RFC 02/13] nvme: wire-up support for async-passthru on hch
2021-12-22 15:11 ` Clay Mayers
2021-12-22 13:46 ` Kanchan Joshi
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=2da62822fd56414d9893b89e160ed05c@kioxia.com \
--to=clay.mayers@kioxia.com \
--cc=anuj20.g@samsung.com \
--cc=axboe@kernel.dk \
--cc=hch@lst.de \
--cc=io-uring@vger.kernel.org \
--cc=javier@javigon.com \
--cc=joshiiitr@gmail.com \
--cc=kbusch@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=pankydev8@gmail.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.