From: Jens Axboe <axboe@kernel.dk>
To: Christoph Hellwig <hch@infradead.org>
Cc: linux-block@vger.kernel.org, linux-scsi@vger.kernel.org,
linux-nvme@lists.infradead.org, Stefan Roesch <shr@fb.com>
Subject: Re: [PATCH 4/5] nvme: split out metadata vs non metadata end_io uring_cmd completions
Date: Fri, 23 Sep 2022 14:52:54 -0600 [thread overview]
Message-ID: <d09e1645-919f-9239-f86d-a8e85a133e5c@kernel.dk> (raw)
In-Reply-To: <Yy3O7wH16t6AhC3j@infradead.org>
On 9/23/22 9:21 AM, Christoph Hellwig wrote:
>> + union {
>> + struct {
>> + void *meta; /* kernel-resident buffer */
>> + void __user *meta_buffer;
>> + };
>> + struct {
>> + u32 nvme_flags;
>> + u32 nvme_status;
>> + u64 result;
>> + };
>> + };
>
> Without naming the arms of the union this is becoming a bit too much
> of a mess..
>
>> +static void nvme_uring_task_cb(struct io_uring_cmd *ioucmd)
>> +{
>> + struct nvme_uring_cmd_pdu *pdu = nvme_uring_cmd_pdu(ioucmd);
>> + int status;
>> +
>> + if (pdu->nvme_flags & NVME_REQ_CANCELLED)
>> + status = -EINTR;
>> + else
>> + status = pdu->nvme_status;
>
> If you add a signed int field you only need one field instead of
> two in the pdu for this (the nvme status is only 15 bits anyway).
For both of these, how about we just simplify like below? I think
at that point it's useless to name them anyway.
diff --git a/drivers/nvme/host/ioctl.c b/drivers/nvme/host/ioctl.c
index 25f2f6df1602..6f955984ca14 100644
--- a/drivers/nvme/host/ioctl.c
+++ b/drivers/nvme/host/ioctl.c
@@ -350,16 +350,13 @@ struct nvme_uring_cmd_pdu {
struct request *req;
};
u32 meta_len;
+ u32 nvme_status;
union {
struct {
void *meta; /* kernel-resident buffer */
void __user *meta_buffer;
};
- struct {
- u32 nvme_flags;
- u32 nvme_status;
- u64 result;
- };
+ u64 result;
};
};
@@ -396,17 +393,11 @@ static void nvme_uring_task_meta_cb(struct io_uring_cmd *ioucmd)
static void nvme_uring_task_cb(struct io_uring_cmd *ioucmd)
{
struct nvme_uring_cmd_pdu *pdu = nvme_uring_cmd_pdu(ioucmd);
- int status;
-
- if (pdu->nvme_flags & NVME_REQ_CANCELLED)
- status = -EINTR;
- else
- status = pdu->nvme_status;
if (pdu->bio)
blk_rq_unmap_user(pdu->bio);
- io_uring_cmd_done(ioucmd, status, pdu->result);
+ io_uring_cmd_done(ioucmd, pdu->nvme_status, pdu->result);
}
static enum rq_end_io_ret nvme_uring_cmd_end_io(struct request *req,
@@ -417,8 +408,10 @@ static enum rq_end_io_ret nvme_uring_cmd_end_io(struct request *req,
void *cookie = READ_ONCE(ioucmd->cookie);
req->bio = pdu->bio;
- pdu->nvme_flags = nvme_req(req)->flags;
- pdu->nvme_status = nvme_req(req)->status;
+ if (nvme_req(req)->flags & NVME_REQ_CANCELLED)
+ pdu->nvme_status = -EINTR;
+ else
+ pdu->nvme_status = nvme_req(req)->status;
pdu->result = le64_to_cpu(nvme_req(req)->result.u64);
/*
--
Jens Axboe
next prev parent reply other threads:[~2022-09-23 20:53 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-22 18:28 [PATCHSET 0/5] Enable alloc caching and batched freeing for passthrough Jens Axboe
2022-09-22 18:28 ` [PATCH 1/5] block: enable batched allocation for blk_mq_alloc_request() Jens Axboe
2022-09-23 14:52 ` Pankaj Raghav
2022-09-23 15:13 ` Pankaj Raghav
2022-09-23 20:54 ` Jens Axboe
2022-09-24 0:59 ` Damien Le Moal
2022-09-24 1:01 ` Jens Axboe
2022-09-24 1:22 ` Damien Le Moal
2022-09-24 11:56 ` Pankaj Raghav
2022-09-24 14:44 ` Jens Axboe
2022-09-22 18:28 ` [PATCH 2/5] block: change request end_io handler to pass back a return value Jens Axboe
2022-09-22 18:28 ` [PATCH 3/5] block: allow end_io based requests in the completion batch handling Jens Axboe
2022-09-22 18:28 ` [PATCH 4/5] nvme: split out metadata vs non metadata end_io uring_cmd completions Jens Axboe
2022-09-23 15:21 ` Christoph Hellwig
2022-09-23 20:52 ` Jens Axboe [this message]
2022-09-26 14:41 ` Christoph Hellwig
2022-09-26 14:41 ` Jens Axboe
2022-09-26 14:43 ` Christoph Hellwig
2022-09-26 14:50 ` Jens Axboe
2022-09-26 14:52 ` Christoph Hellwig
2022-09-26 14:54 ` Jens Axboe
2022-09-22 18:28 ` [PATCH 5/5] nvme: enable batched completions of passthrough IO Jens Axboe
2022-09-23 15:16 ` [PATCHSET 0/5] Enable alloc caching and batched freeing for passthrough Christoph Hellwig
2022-09-23 15:19 ` Jens Axboe
2022-09-23 15:21 ` Christoph Hellwig
2022-09-23 15:22 ` Jens Axboe
2022-09-27 1:44 [PATCHSET v2 " Jens Axboe
2022-09-27 1:44 ` [PATCH 4/5] nvme: split out metadata vs non metadata end_io uring_cmd completions Jens Axboe
2022-09-27 7:50 ` Christoph Hellwig
2022-09-28 13:51 ` Anuj gupta
2022-09-28 14:47 ` Sagi Grimberg
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=d09e1645-919f-9239-f86d-a8e85a133e5c@kernel.dk \
--to=axboe@kernel.dk \
--cc=hch@infradead.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=linux-scsi@vger.kernel.org \
--cc=shr@fb.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).