From: Christoph Hellwig <hch@lst.de>
To: Max Gurtovoy <maxg@mellanox.com>
Cc: axboe@kernel.dk, jsmart2021@gmail.com, sagi@grimberg.me,
martin.petersen@oracle.com, shlomin@mellanox.com,
linux-rdma@vger.kernel.org, israelr@mellanox.com,
vladimirk@mellanox.com, linux-nvme@lists.infradead.org,
idanb@mellanox.com, jgg@mellanox.com, oren@mellanox.com,
kbusch@kernel.org, hch@lst.de
Subject: Re: [PATCH 08/17] nvme-rdma: add metadata/T10-PI support
Date: Tue, 21 Apr 2020 14:20:30 +0200 [thread overview]
Message-ID: <20200421122030.GI26432@lst.de> (raw)
In-Reply-To: <20200327171545.98970-10-maxg@mellanox.com>
On Fri, Mar 27, 2020 at 08:15:36PM +0300, Max Gurtovoy wrote:
> For capable HCAs (e.g. ConnectX-5/ConnectX-6) this will allow end-to-end
> protection information passthrough and validation for NVMe over RDMA
> transport. Metadata offload support was implemented over the new RDMA
> signature verbs API and it is enabled per controller by using nvme-cli.
>
> usage example:
> nvme connect --pi_enable --transport=rdma --traddr=10.0.1.1 --nqn=test-nvme
>
> Signed-off-by: Max Gurtovoy <maxg@mellanox.com>
> Signed-off-by: Israel Rukshin <israelr@mellanox.com>
> ---
> drivers/nvme/host/rdma.c | 330 ++++++++++++++++++++++++++++++++++++++++++-----
> 1 file changed, 296 insertions(+), 34 deletions(-)
>
> diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
> index e38f8f7..23cc77e 100644
> --- a/drivers/nvme/host/rdma.c
> +++ b/drivers/nvme/host/rdma.c
> @@ -67,6 +67,9 @@ struct nvme_rdma_request {
> struct ib_cqe reg_cqe;
> struct nvme_rdma_queue *queue;
> struct nvme_rdma_sgl data_sgl;
> + /* Metadata (T10-PI) support */
> + struct nvme_rdma_sgl *md_sgl;
> + bool use_md;
Do we need a use_md flag vs just using md_sgl as a boolean and/or
using blk_integrity_rq?
> enum nvme_rdma_queue_flags {
> @@ -88,6 +91,7 @@ struct nvme_rdma_queue {
> struct rdma_cm_id *cm_id;
> int cm_error;
> struct completion cm_done;
> + bool pi_support;
Why do we need this on a per-queue basis vs always checking the
controller?
> + u32 max_page_list_len =
> + pi_support ? ibdev->attrs.max_pi_fast_reg_page_list_len :
> + ibdev->attrs.max_fast_reg_page_list_len;
> +
> + return min_t(u32, NVME_RDMA_MAX_SEGMENTS, max_page_list_len - 1);
Can you use a good old if / else here?
> +#ifdef CONFIG_BLK_DEV_INTEGRITY
> +static void nvme_rdma_set_sig_domain(struct blk_integrity *bi,
> + struct nvme_command *cmd, struct ib_sig_domain *domain,
> + u16 control)
> {
> + domain->sig_type = IB_SIG_TYPE_T10_DIF;
> + domain->sig.dif.bg_type = IB_T10DIF_CRC;
> + domain->sig.dif.pi_interval = 1 << bi->interval_exp;
> + domain->sig.dif.ref_tag = le32_to_cpu(cmd->rw.reftag);
>
> /*
> + * At the moment we hard code those, but in the future
> + * we will take them from cmd.
I don't understand this comment. Also it doesn't use up all 80 chars.
> +static void nvme_rdma_set_sig_attrs(struct blk_integrity *bi,
> + struct nvme_command *cmd, struct ib_sig_attrs *sig_attrs)
> +{
> + u16 control = le16_to_cpu(cmd->rw.control);
> +
> + WARN_ON(bi == NULL);
I think this WARN_ON is pointless, as we'll get a NULL pointer derference
a little later anyway.
> +mr_put:
> + if (req->use_md)
> + ib_mr_pool_put(queue->qp, &queue->qp->sig_mrs, req->mr);
> + else
> + ib_mr_pool_put(queue->qp, &queue->qp->rdma_mrs, req->mr);
I've seen this patterns a few times, maybe a little helper to return
the right mr pool for a request?
> + if (blk_integrity_rq(rq)) {
> + memset(req->md_sgl, 0, sizeof(struct nvme_rdma_sgl));
Why do we need this memset?
_______________________________________________
linux-nvme mailing list
linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme
WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de>
To: Max Gurtovoy <maxg@mellanox.com>
Cc: linux-nvme@lists.infradead.org, kbusch@kernel.org, hch@lst.de,
sagi@grimberg.me, martin.petersen@oracle.com,
jsmart2021@gmail.com, linux-rdma@vger.kernel.org,
idanb@mellanox.com, axboe@kernel.dk, vladimirk@mellanox.com,
oren@mellanox.com, shlomin@mellanox.com, israelr@mellanox.com,
jgg@mellanox.com
Subject: Re: [PATCH 08/17] nvme-rdma: add metadata/T10-PI support
Date: Tue, 21 Apr 2020 14:20:30 +0200 [thread overview]
Message-ID: <20200421122030.GI26432@lst.de> (raw)
In-Reply-To: <20200327171545.98970-10-maxg@mellanox.com>
On Fri, Mar 27, 2020 at 08:15:36PM +0300, Max Gurtovoy wrote:
> For capable HCAs (e.g. ConnectX-5/ConnectX-6) this will allow end-to-end
> protection information passthrough and validation for NVMe over RDMA
> transport. Metadata offload support was implemented over the new RDMA
> signature verbs API and it is enabled per controller by using nvme-cli.
>
> usage example:
> nvme connect --pi_enable --transport=rdma --traddr=10.0.1.1 --nqn=test-nvme
>
> Signed-off-by: Max Gurtovoy <maxg@mellanox.com>
> Signed-off-by: Israel Rukshin <israelr@mellanox.com>
> ---
> drivers/nvme/host/rdma.c | 330 ++++++++++++++++++++++++++++++++++++++++++-----
> 1 file changed, 296 insertions(+), 34 deletions(-)
>
> diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
> index e38f8f7..23cc77e 100644
> --- a/drivers/nvme/host/rdma.c
> +++ b/drivers/nvme/host/rdma.c
> @@ -67,6 +67,9 @@ struct nvme_rdma_request {
> struct ib_cqe reg_cqe;
> struct nvme_rdma_queue *queue;
> struct nvme_rdma_sgl data_sgl;
> + /* Metadata (T10-PI) support */
> + struct nvme_rdma_sgl *md_sgl;
> + bool use_md;
Do we need a use_md flag vs just using md_sgl as a boolean and/or
using blk_integrity_rq?
> enum nvme_rdma_queue_flags {
> @@ -88,6 +91,7 @@ struct nvme_rdma_queue {
> struct rdma_cm_id *cm_id;
> int cm_error;
> struct completion cm_done;
> + bool pi_support;
Why do we need this on a per-queue basis vs always checking the
controller?
> + u32 max_page_list_len =
> + pi_support ? ibdev->attrs.max_pi_fast_reg_page_list_len :
> + ibdev->attrs.max_fast_reg_page_list_len;
> +
> + return min_t(u32, NVME_RDMA_MAX_SEGMENTS, max_page_list_len - 1);
Can you use a good old if / else here?
> +#ifdef CONFIG_BLK_DEV_INTEGRITY
> +static void nvme_rdma_set_sig_domain(struct blk_integrity *bi,
> + struct nvme_command *cmd, struct ib_sig_domain *domain,
> + u16 control)
> {
> + domain->sig_type = IB_SIG_TYPE_T10_DIF;
> + domain->sig.dif.bg_type = IB_T10DIF_CRC;
> + domain->sig.dif.pi_interval = 1 << bi->interval_exp;
> + domain->sig.dif.ref_tag = le32_to_cpu(cmd->rw.reftag);
>
> /*
> + * At the moment we hard code those, but in the future
> + * we will take them from cmd.
I don't understand this comment. Also it doesn't use up all 80 chars.
> +static void nvme_rdma_set_sig_attrs(struct blk_integrity *bi,
> + struct nvme_command *cmd, struct ib_sig_attrs *sig_attrs)
> +{
> + u16 control = le16_to_cpu(cmd->rw.control);
> +
> + WARN_ON(bi == NULL);
I think this WARN_ON is pointless, as we'll get a NULL pointer derference
a little later anyway.
> +mr_put:
> + if (req->use_md)
> + ib_mr_pool_put(queue->qp, &queue->qp->sig_mrs, req->mr);
> + else
> + ib_mr_pool_put(queue->qp, &queue->qp->rdma_mrs, req->mr);
I've seen this patterns a few times, maybe a little helper to return
the right mr pool for a request?
> + if (blk_integrity_rq(rq)) {
> + memset(req->md_sgl, 0, sizeof(struct nvme_rdma_sgl));
Why do we need this memset?
next prev parent reply other threads:[~2020-04-21 12:20 UTC|newest]
Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-27 17:15 [PATCH 00/17 V5] nvme-rdma/nvmet-rdma: Add metadata/T10-PI support Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-03-27 17:15 ` [PATCH 1/1] nvme-cli/fabrics: Add pi_enable param to connect cmd Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-03-27 17:15 ` [PATCH 01/17] nvme: introduce namespace features flag Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 11:59 ` Christoph Hellwig
2020-04-21 11:59 ` Christoph Hellwig
2020-04-21 15:53 ` James Smart
2020-04-21 15:53 ` James Smart
2020-04-21 18:11 ` Christoph Hellwig
2020-04-21 18:11 ` Christoph Hellwig
2020-03-27 17:15 ` [PATCH 02/17] nvme: Add has_md field to the nvme_req structure Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 11:59 ` Christoph Hellwig
2020-04-21 11:59 ` Christoph Hellwig
2020-03-27 17:15 ` [PATCH 03/17] nvme: Enforce extended LBA format for fabrics metadata Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 12:08 ` Christoph Hellwig
2020-04-21 12:08 ` Christoph Hellwig
2020-03-27 17:15 ` [PATCH 04/17] nvme: introduce max_integrity_segments ctrl attribute Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 12:09 ` Christoph Hellwig
2020-04-21 12:09 ` Christoph Hellwig
2020-03-27 17:15 ` [PATCH 05/17] nvme-fabrics: Allow user enabling metadata/T10-PI support Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 12:12 ` Christoph Hellwig
2020-04-21 12:12 ` Christoph Hellwig
2020-04-21 15:17 ` Christoph Hellwig
2020-04-21 15:17 ` Christoph Hellwig
2020-04-22 22:07 ` Max Gurtovoy
2020-04-22 22:07 ` Max Gurtovoy
2020-04-22 22:24 ` James Smart
2020-04-22 22:24 ` James Smart
2020-04-22 22:39 ` Max Gurtovoy
2020-04-22 22:39 ` Max Gurtovoy
2020-04-23 5:54 ` Christoph Hellwig
2020-04-23 5:54 ` Christoph Hellwig
2020-04-23 7:30 ` Max Gurtovoy
2020-04-23 7:30 ` Max Gurtovoy
2020-04-24 7:06 ` Christoph Hellwig
2020-04-24 7:06 ` Christoph Hellwig
2020-04-26 9:48 ` Max Gurtovoy
2020-04-26 9:48 ` Max Gurtovoy
2020-04-27 6:04 ` Christoph Hellwig
2020-04-27 6:04 ` Christoph Hellwig
2020-04-27 13:52 ` Max Gurtovoy
2020-04-27 13:52 ` Max Gurtovoy
2020-04-27 13:54 ` Christoph Hellwig
2020-04-27 13:54 ` Christoph Hellwig
2020-04-28 9:18 ` Max Gurtovoy
2020-04-28 9:18 ` Max Gurtovoy
2020-04-23 5:53 ` Christoph Hellwig
2020-04-23 5:53 ` Christoph Hellwig
2020-03-27 17:15 ` [PATCH 06/17] nvme: introduce NVME_INLINE_MD_SG_CNT Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 12:12 ` Christoph Hellwig
2020-04-21 12:12 ` Christoph Hellwig
2020-03-27 17:15 ` [PATCH 07/17] nvme-rdma: Introduce nvme_rdma_sgl structure Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 12:13 ` Christoph Hellwig
2020-04-21 12:13 ` Christoph Hellwig
2020-03-27 17:15 ` [PATCH 08/17] nvme-rdma: add metadata/T10-PI support Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 12:20 ` Christoph Hellwig [this message]
2020-04-21 12:20 ` Christoph Hellwig
2020-04-23 9:22 ` Max Gurtovoy
2020-04-23 9:22 ` Max Gurtovoy
2020-04-24 7:09 ` Christoph Hellwig
2020-04-24 7:09 ` Christoph Hellwig
2020-04-26 10:04 ` Max Gurtovoy
2020-04-26 10:04 ` Max Gurtovoy
2020-03-27 17:15 ` [PATCH 09/17] nvmet: prepare metadata request Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 15:21 ` Christoph Hellwig
2020-04-21 15:21 ` Christoph Hellwig
2020-03-27 17:15 ` [PATCH 10/17] nvmet: add metadata characteristics for a namespace Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 15:23 ` Christoph Hellwig
2020-04-21 15:23 ` Christoph Hellwig
2020-03-27 17:15 ` [PATCH 11/17] nvmet: Rename nvmet_rw_len to nvmet_rw_data_len Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-03-27 17:15 ` [PATCH 12/17] nvmet: Rename nvmet_check_data_len to nvmet_check_transfer_len Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-03-27 17:15 ` [PATCH 13/17] nvme: Add Metadata Capabilities enumerations Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 15:24 ` Christoph Hellwig
2020-04-21 15:24 ` Christoph Hellwig
2020-04-23 12:09 ` Max Gurtovoy
2020-04-23 12:09 ` Max Gurtovoy
2020-04-24 7:12 ` Christoph Hellwig
2020-04-24 7:12 ` Christoph Hellwig
2020-03-27 17:15 ` [PATCH 14/17] nvmet: Add metadata/T10-PI support Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 15:30 ` Christoph Hellwig
2020-04-21 15:30 ` Christoph Hellwig
2020-04-23 12:39 ` Max Gurtovoy
2020-04-23 12:39 ` Max Gurtovoy
2020-04-24 7:14 ` Christoph Hellwig
2020-04-24 7:14 ` Christoph Hellwig
2020-04-26 10:50 ` Max Gurtovoy
2020-04-26 10:50 ` Max Gurtovoy
2020-04-27 6:06 ` Christoph Hellwig
2020-04-27 6:06 ` Christoph Hellwig
2020-03-27 17:15 ` [PATCH 15/17] nvmet: Add metadata support for block devices Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 15:33 ` Christoph Hellwig
2020-04-21 15:33 ` Christoph Hellwig
2020-04-23 17:25 ` Max Gurtovoy
2020-04-23 17:25 ` Max Gurtovoy
2020-04-24 7:54 ` Christoph Hellwig
2020-04-24 7:54 ` Christoph Hellwig
2020-03-27 17:15 ` [PATCH 16/17] RDMA/rw: Expose maximal page list for a device per 1 MR Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-03-27 17:15 ` [PATCH 17/17] nvmet-rdma: Add metadata/T10-PI support Max Gurtovoy
2020-03-27 17:15 ` Max Gurtovoy
2020-04-21 15:37 ` Christoph Hellwig
2020-04-21 15:37 ` Christoph Hellwig
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=20200421122030.GI26432@lst.de \
--to=hch@lst.de \
--cc=axboe@kernel.dk \
--cc=idanb@mellanox.com \
--cc=israelr@mellanox.com \
--cc=jgg@mellanox.com \
--cc=jsmart2021@gmail.com \
--cc=kbusch@kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=linux-rdma@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=maxg@mellanox.com \
--cc=oren@mellanox.com \
--cc=sagi@grimberg.me \
--cc=shlomin@mellanox.com \
--cc=vladimirk@mellanox.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.