linux-nvme.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Himanshu Madhani <himanshu.madhani@oracle.com>
To: James Smart <jsmart2021@gmail.com>, linux-nvme@lists.infradead.org
Cc: martin.petersen@oracle.com
Subject: Re: [PATCH 03/29] nvme-fc and nvmet-fc: revise LLDD api for LS reception and LS request
Date: Thu, 26 Mar 2020 11:16:10 -0500	[thread overview]
Message-ID: <7fc5d470-d68d-24fc-0a75-8fb34d978731@oracle.com> (raw)
In-Reply-To: <20200205183753.25959-4-jsmart2021@gmail.com>

On 2/5/2020 12:37 PM, James Smart wrote:
> The current LLDD api has:
>    nvme-fc: contains api for transport to do LS requests (and aborts of
>      them). However, there is no interface for reception of LS's and sending
>      responses for them.
>    nvmet-fc: contains api for transport to do reception of LS's and sending
>      of responses for them. However, there is no interface for doing LS
>      requests.
> 
> Revise the api's so that both nvme-fc and nvmet-fc can send LS's, as well
> as receiving LS's and sending their responses.
> 
> Change name of the rcv_ls_req struct to better reflect generic use as
> a context to used to send an ls rsp.
> 
> Change nvmet_fc_rcv_ls_req() calling sequence to provide handle that
> can be used by transport in later LS request sequences for an association.
> 
> Signed-off-by: James Smart <jsmart2021@gmail.com>
> ---
>   include/linux/nvme-fc-driver.h | 368 ++++++++++++++++++++++++++++++-----------
>   1 file changed, 270 insertions(+), 98 deletions(-)
> 
> diff --git a/include/linux/nvme-fc-driver.h b/include/linux/nvme-fc-driver.h
> index 6d0d70f3219c..8b97c899517d 100644
> --- a/include/linux/nvme-fc-driver.h
> +++ b/include/linux/nvme-fc-driver.h
> @@ -10,47 +10,26 @@
>   
>   
>   /*
> - * **********************  LLDD FC-NVME Host API ********************
> + * **********************  FC-NVME LS API ********************
>    *
> - *  For FC LLDD's that are the NVME Host role.
> + *  Data structures used by both FC-NVME hosts and FC-NVME
> + *  targets to perform FC-NVME LS requests or transmit
> + *  responses.
>    *
> - * ******************************************************************
> + * ***********************************************************
>    */
>   
> -
> -
>   /**
> - * struct nvme_fc_port_info - port-specific ids and FC connection-specific
> - *                            data element used during NVME Host role
> - *                            registrations
> - *
> - * Static fields describing the port being registered:
> - * @node_name: FC WWNN for the port
> - * @port_name: FC WWPN for the port
> - * @port_role: What NVME roles are supported (see FC_PORT_ROLE_xxx)
> - * @dev_loss_tmo: maximum delay for reconnects to an association on
> - *             this device. Used only on a remoteport.
> + * struct nvmefc_ls_req - Request structure passed from the transport
> + *            to the LLDD to perform a NVME-FC LS request and obtain
> + *            a response.
> + *            Used by nvme-fc transport (host) to send LS's such as
> + *              Create Association, Create Connection and Disconnect
> + *              Association.
> + *            Used by the nvmet-fc transport (controller) to send
> + *              LS's such as Disconnect Association.
>    *
> - * Initialization values for dynamic port fields:
> - * @port_id:      FC N_Port_ID currently assigned the port. Upper 8 bits must
> - *                be set to 0.
> - */
> -struct nvme_fc_port_info {
> -	u64			node_name;
> -	u64			port_name;
> -	u32			port_role;
> -	u32			port_id;
> -	u32			dev_loss_tmo;
> -};
> -
> -
> -/**
> - * struct nvmefc_ls_req - Request structure passed from NVME-FC transport
> - *                        to LLDD in order to perform a NVME FC-4 LS
> - *                        request and obtain a response.
> - *
> - * Values set by the NVME-FC layer prior to calling the LLDD ls_req
> - * entrypoint.
> + * Values set by the requestor prior to calling the LLDD ls_req entrypoint:
>    * @rqstaddr: pointer to request buffer
>    * @rqstdma:  PCI DMA address of request buffer
>    * @rqstlen:  Length, in bytes, of request buffer
> @@ -63,8 +42,8 @@ struct nvme_fc_port_info {
>    * @private:  pointer to memory allocated alongside the ls request structure
>    *            that is specifically for the LLDD to use while processing the
>    *            request. The length of the buffer corresponds to the
> - *            lsrqst_priv_sz value specified in the nvme_fc_port_template
> - *            supplied by the LLDD.
> + *            lsrqst_priv_sz value specified in the xxx_template supplied
> + *            by the LLDD.
>    * @done:     The callback routine the LLDD is to invoke upon completion of
>    *            the LS request. req argument is the pointer to the original LS
>    *            request structure. Status argument must be 0 upon success, a
> @@ -86,6 +65,101 @@ struct nvmefc_ls_req {
>   } __aligned(sizeof(u64));	/* alignment for other things alloc'd with */
>   
>   
> +/**
> + * struct nvmefc_ls_rsp - Structure passed from the transport to the LLDD
> + *            to request the transmit the NVME-FC LS response to a
> + *            NVME-FC LS request.   The structure originates in the LLDD
> + *            and is given to the transport via the xxx_rcv_ls_req()
> + *            transport routine. As such, the structure represents the
> + *            FC exchange context for the NVME-FC LS request that was
> + *            received and which the response is to be sent for.
> + *            Used by the LLDD to pass the nvmet-fc transport (controller)
> + *              received LS's such as Create Association, Create Connection
> + *              and Disconnect Association.
> + *            Used by the LLDD to pass the nvme-fc transport (host)
> + *              received LS's such as Disconnect Association or Disconnect
> + *              Connection.
> + *
> + * The structure is allocated by the LLDD whenever a LS Request is received
> + * from the FC link. The address of the structure is passed to the nvmet-fc
> + * or nvme-fc layer via the xxx_rcv_ls_req() transport routines.
> + *
> + * The address of the structure is to be passed back to the LLDD
> + * when the response is to be transmit. The LLDD will use the address to
> + * map back to the LLDD exchange structure which maintains information such
> + * the remote N_Port that sent the LS as well as any FC exchange context.
> + * Upon completion of the LS response transmit, the LLDD will pass the
> + * address of the structure back to the transport LS rsp done() routine,
> + * allowing the transport release dma resources. Upon completion of
> + * the done() routine, no further access to the structure will be made by
> + * the transport and the LLDD can de-allocate the structure.
> + *
> + * Field initialization:
> + *   At the time of the xxx_rcv_ls_req() call, there is no content that
> + *     is valid in the structure.
> + *
> + *   When the structure is used for the LLDD->xmt_ls_rsp() call, the
> + *     transport layer will fully set the fields in order to specify the
> + *     response payload buffer and its length as well as the done routine
> + *     to be called upon completion of the transmit.  The transport layer
> + *     will also set a private pointer for its own use in the done routine.
> + *
> + * Values set by the transport layer prior to calling the LLDD xmt_ls_rsp
> + * entrypoint:
> + * @rspbuf:   pointer to the LS response buffer
> + * @rspdma:   PCI DMA address of the LS response buffer
> + * @rsplen:   Length, in bytes, of the LS response buffer
> + * @done:     The callback routine the LLDD is to invoke upon completion of
> + *            transmitting the LS response. req argument is the pointer to
> + *            the original ls request.
> + * @nvme_fc_private:  pointer to an internal transport-specific structure
> + *            used as part of the transport done() processing. The LLDD is
> + *            not to access this pointer.
> + */
> +struct nvmefc_ls_rsp {
> +	void		*rspbuf;
> +	dma_addr_t	rspdma;
> +	u16		rsplen;
> +
> +	void (*done)(struct nvmefc_ls_rsp *rsp);
> +	void		*nvme_fc_private;	/* LLDD is not to access !! */
> +};
> +
> +
> +
> +/*
> + * **********************  LLDD FC-NVME Host API ********************
> + *
> + *  For FC LLDD's that are the NVME Host role.
> + *
> + * ******************************************************************
> + */
> +
> +
> +/**
> + * struct nvme_fc_port_info - port-specific ids and FC connection-specific
> + *                            data element used during NVME Host role
> + *                            registrations
> + *
> + * Static fields describing the port being registered:
> + * @node_name: FC WWNN for the port
> + * @port_name: FC WWPN for the port
> + * @port_role: What NVME roles are supported (see FC_PORT_ROLE_xxx)
> + * @dev_loss_tmo: maximum delay for reconnects to an association on
> + *             this device. Used only on a remoteport.
> + *
> + * Initialization values for dynamic port fields:
> + * @port_id:      FC N_Port_ID currently assigned the port. Upper 8 bits must
> + *                be set to 0.
> + */
> +struct nvme_fc_port_info {
> +	u64			node_name;
> +	u64			port_name;
> +	u32			port_role;
> +	u32			port_id;
> +	u32			dev_loss_tmo;
> +};
> +
>   enum nvmefc_fcp_datadir {
>   	NVMEFC_FCP_NODATA,	/* payload_length and sg_cnt will be zero */
>   	NVMEFC_FCP_WRITE,
> @@ -339,6 +413,21 @@ struct nvme_fc_remote_port {
>    *       indicating an FC transport Aborted status.
>    *       Entrypoint is Mandatory.
>    *
> + * @xmt_ls_rsp:  Called to transmit the response to a FC-NVME FC-4 LS service.
> + *       The nvmefc_ls_rsp structure is the same LLDD-supplied exchange
> + *       structure specified in the nvme_fc_rcv_ls_req() call made when
> + *       the LS request was received. The structure will fully describe
> + *       the buffers for the response payload and the dma address of the
> + *       payload. The LLDD is to transmit the response (or return a
> + *       non-zero errno status), and upon completion of the transmit, call
> + *       the "done" routine specified in the nvmefc_ls_rsp structure
> + *       (argument to done is the address of the nvmefc_ls_rsp structure
> + *       itself). Upon the completion of the done routine, the LLDD shall
> + *       consider the LS handling complete and the nvmefc_ls_rsp structure
> + *       may be freed/released.
> + *       Entrypoint is mandatory if the LLDD calls the nvme_fc_rcv_ls_req()
> + *       entrypoint.
> + *
>    * @max_hw_queues:  indicates the maximum number of hw queues the LLDD
>    *       supports for cpu affinitization.
>    *       Value is Mandatory. Must be at least 1.
> @@ -373,7 +462,7 @@ struct nvme_fc_remote_port {
>    * @lsrqst_priv_sz: The LLDD sets this field to the amount of additional
>    *       memory that it would like fc nvme layer to allocate on the LLDD's
>    *       behalf whenever a ls request structure is allocated. The additional
> - *       memory area solely for the of the LLDD and its location is
> + *       memory area is solely for use by the LLDD and its location is
>    *       specified by the ls_request->private pointer.
>    *       Value is Mandatory. Allowed to be zero.
>    *
> @@ -409,6 +498,9 @@ struct nvme_fc_port_template {
>   				struct nvme_fc_remote_port *,
>   				void *hw_queue_handle,
>   				struct nvmefc_fcp_req *);
> +	int	(*xmt_ls_rsp)(struct nvme_fc_local_port *localport,
> +				struct nvme_fc_remote_port *rport,
> +				struct nvmefc_ls_rsp *ls_rsp);
>   
>   	u32	max_hw_queues;
>   	u16	max_sgl_segments;
> @@ -445,6 +537,34 @@ void nvme_fc_rescan_remoteport(struct nvme_fc_remote_port *remoteport);
>   int nvme_fc_set_remoteport_devloss(struct nvme_fc_remote_port *remoteport,
>   			u32 dev_loss_tmo);
>   
> +/*
> + * Routine called to pass a NVME-FC LS request, received by the lldd,
> + * to the nvme-fc transport.
> + *
> + * If the return value is zero: the LS was successfully accepted by the
> + *   transport.
> + * If the return value is non-zero: the transport has not accepted the
> + *   LS. The lldd should ABTS-LS the LS.
> + *
> + * Note: if the LLDD receives and ABTS for the LS prior to the transport
> + * calling the ops->xmt_ls_rsp() routine to transmit a response, the LLDD
> + * shall mark the LS as aborted, and when the xmt_ls_rsp() is called: the
> + * response shall not be transmit and the struct nvmefc_ls_rsp() done
> + * routine shall be called.  The LLDD may transmit the ABTS response as
> + * soon as the LS was marked or can delay until the xmt_ls_rsp() call is
> + * made.
> + * Note: if an RCV LS was successfully posted to the transport and the
> + * remoteport is then unregistered before xmt_ls_rsp() was called for
> + * the lsrsp structure, the transport will still call xmt_ls_rsp()
> + * afterward to cleanup the outstanding lsrsp structure. The LLDD should
> + * noop the transmission of the rsp and call the lsrsp->done() routine
> + * to allow the lsrsp structure to be released.
> + */
> +int nvme_fc_rcv_ls_req(struct nvme_fc_remote_port *remoteport,
> +			struct nvmefc_ls_rsp *lsrsp,
> +			void *lsreqbuf, u32 lsreqbuf_len);
> +
> +
>   
>   /*
>    * ***************  LLDD FC-NVME Target/Subsystem API ***************
> @@ -474,55 +594,6 @@ struct nvmet_fc_port_info {
>   };
>   
>   
> -/**
> - * struct nvmefc_tgt_ls_req - Structure used between LLDD and NVMET-FC
> - *                            layer to represent the exchange context for
> - *                            a FC-NVME Link Service (LS).
> - *
> - * The structure is allocated by the LLDD whenever a LS Request is received
> - * from the FC link. The address of the structure is passed to the nvmet-fc
> - * layer via the nvmet_fc_rcv_ls_req() call. The address of the structure
> - * will be passed back to the LLDD when the response is to be transmit.
> - * The LLDD is to use the address to map back to the LLDD exchange structure
> - * which maintains information such as the targetport the LS was received
> - * on, the remote FC NVME initiator that sent the LS, and any FC exchange
> - * context.  Upon completion of the LS response transmit, the address of the
> - * structure will be passed back to the LS rsp done() routine, allowing the
> - * nvmet-fc layer to release dma resources. Upon completion of the done()
> - * routine, no further access will be made by the nvmet-fc layer and the
> - * LLDD can de-allocate the structure.
> - *
> - * Field initialization:
> - *   At the time of the nvmet_fc_rcv_ls_req() call, there is no content that
> - *     is valid in the structure.
> - *
> - *   When the structure is used for the LLDD->xmt_ls_rsp() call, the nvmet-fc
> - *     layer will fully set the fields in order to specify the response
> - *     payload buffer and its length as well as the done routine to be called
> - *     upon compeletion of the transmit.  The nvmet-fc layer will also set a
> - *     private pointer for its own use in the done routine.
> - *
> - * Values set by the NVMET-FC layer prior to calling the LLDD xmt_ls_rsp
> - * entrypoint.
> - * @rspbuf:   pointer to the LS response buffer
> - * @rspdma:   PCI DMA address of the LS response buffer
> - * @rsplen:   Length, in bytes, of the LS response buffer
> - * @done:     The callback routine the LLDD is to invoke upon completion of
> - *            transmitting the LS response. req argument is the pointer to
> - *            the original ls request.
> - * @nvmet_fc_private:  pointer to an internal NVMET-FC layer structure used
> - *            as part of the NVMET-FC processing. The LLDD is not to access
> - *            this pointer.
> - */
> -struct nvmefc_tgt_ls_req {
> -	void		*rspbuf;
> -	dma_addr_t	rspdma;
> -	u16		rsplen;
> -
> -	void (*done)(struct nvmefc_tgt_ls_req *req);
> -	void *nvmet_fc_private;		/* LLDD is not to access !! */
> -};
> -
>   /* Operations that NVME-FC layer may request the LLDD to perform for FCP */
>   enum {
>   	NVMET_FCOP_READDATA	= 1,	/* xmt data to initiator */
> @@ -697,17 +768,19 @@ struct nvmet_fc_target_port {
>    *       Entrypoint is Mandatory.
>    *
>    * @xmt_ls_rsp:  Called to transmit the response to a FC-NVME FC-4 LS service.
> - *       The nvmefc_tgt_ls_req structure is the same LLDD-supplied exchange
> + *       The nvmefc_ls_rsp structure is the same LLDD-supplied exchange
>    *       structure specified in the nvmet_fc_rcv_ls_req() call made when
> - *       the LS request was received.  The structure will fully describe
> + *       the LS request was received. The structure will fully describe
>    *       the buffers for the response payload and the dma address of the
> - *       payload. The LLDD is to transmit the response (or return a non-zero
> - *       errno status), and upon completion of the transmit, call the
> - *       "done" routine specified in the nvmefc_tgt_ls_req structure
> - *       (argument to done is the ls reqwuest structure itself).
> - *       After calling the done routine, the LLDD shall consider the
> - *       LS handling complete and the nvmefc_tgt_ls_req structure may
> - *       be freed/released.
> + *       payload. The LLDD is to transmit the response (or return a
> + *       non-zero errno status), and upon completion of the transmit, call
> + *       the "done" routine specified in the nvmefc_ls_rsp structure
> + *       (argument to done is the address of the nvmefc_ls_rsp structure
> + *       itself). Upon the completion of the done() routine, the LLDD shall
> + *       consider the LS handling complete and the nvmefc_ls_rsp structure
> + *       may be freed/released.
> + *       The transport will always call the xmt_ls_rsp() routine for any
> + *       LS received.
>    *       Entrypoint is Mandatory.
>    *
>    * @fcp_op:  Called to perform a data transfer or transmit a response.
> @@ -802,6 +875,39 @@ struct nvmet_fc_target_port {
>    *       should cause the initiator to rescan the discovery controller
>    *       on the targetport.
>    *
> + * @ls_req:  Called to issue a FC-NVME FC-4 LS service request.
> + *       The nvme_fc_ls_req structure will fully describe the buffers for
> + *       the request payload and where to place the response payload.
> + *       The targetport that is to issue the LS request is identified by
> + *       the targetport argument.  The remote port that is to receive the
> + *       LS request is identified by the hosthandle argument. The nvmet-fc
> + *       transport is only allowed to issue FC-NVME LS's on behalf of an
> + *       association that was created prior by a Create Association LS.
> + *       The hosthandle will originate from the LLDD in the struct
> + *       nvmefc_ls_rsp structure for the Create Association LS that
> + *       was delivered to the transport. The transport will save the
> + *       hosthandle as an attribute of the association.  If the LLDD
> + *       loses connectivity with the remote port, it must call the
> + *       nvmet_fc_invalidate_host() routine to remove any references to
> + *       the remote port in the transport.
> + *       The LLDD is to allocate an exchange, issue the LS request, obtain
> + *       the LS response, and call the "done" routine specified in the
> + *       request structure (argument to done is the ls request structure
> + *       itself).
> + *       Entrypoint is Optional - but highly recommended.
> + *
> + * @ls_abort: called to request the LLDD to abort the indicated ls request.
> + *       The call may return before the abort has completed. After aborting
> + *       the request, the LLDD must still call the ls request done routine
> + *       indicating an FC transport Aborted status.
> + *       Entrypoint is Mandatory if the ls_req entry point is specified.
> + *
> + * @host_release: called to inform the LLDD that the request to invalidate
> + *       the host port indicated by the hosthandle has been fully completed.
> + *       No associations exist with the host port and there will be no
> + *       further references to hosthandle.
> + *       Entrypoint is Mandatory if the lldd calls nvmet_fc_invalidate_host().
> + *
>    * @max_hw_queues:  indicates the maximum number of hw queues the LLDD
>    *       supports for cpu affinitization.
>    *       Value is Mandatory. Must be at least 1.
> @@ -830,11 +936,19 @@ struct nvmet_fc_target_port {
>    *       area solely for the of the LLDD and its location is specified by
>    *       the targetport->private pointer.
>    *       Value is Mandatory. Allowed to be zero.
> + *
> + * @lsrqst_priv_sz: The LLDD sets this field to the amount of additional
> + *       memory that it would like nvmet-fc layer to allocate on the LLDD's
> + *       behalf whenever a ls request structure is allocated. The additional
> + *       memory area is solely for use by the LLDD and its location is
> + *       specified by the ls_request->private pointer.
> + *       Value is Mandatory. Allowed to be zero.
> + *
>    */
>   struct nvmet_fc_target_template {
>   	void (*targetport_delete)(struct nvmet_fc_target_port *tgtport);
>   	int (*xmt_ls_rsp)(struct nvmet_fc_target_port *tgtport,
> -				struct nvmefc_tgt_ls_req *tls_req);
> +				struct nvmefc_ls_rsp *ls_rsp);
>   	int (*fcp_op)(struct nvmet_fc_target_port *tgtport,
>   				struct nvmefc_tgt_fcp_req *fcpreq);
>   	void (*fcp_abort)(struct nvmet_fc_target_port *tgtport,
> @@ -844,6 +958,11 @@ struct nvmet_fc_target_template {
>   	void (*defer_rcv)(struct nvmet_fc_target_port *tgtport,
>   				struct nvmefc_tgt_fcp_req *fcpreq);
>   	void (*discovery_event)(struct nvmet_fc_target_port *tgtport);
> +	int  (*ls_req)(struct nvmet_fc_target_port *targetport,
> +				void *hosthandle, struct nvmefc_ls_req *lsreq);
> +	void (*ls_abort)(struct nvmet_fc_target_port *targetport,
> +				void *hosthandle, struct nvmefc_ls_req *lsreq);
> +	void (*host_release)(void *hosthandle);
>   
>   	u32	max_hw_queues;
>   	u16	max_sgl_segments;
> @@ -852,7 +971,9 @@ struct nvmet_fc_target_template {
>   
>   	u32	target_features;
>   
> +	/* sizes of additional private data for data structures */
>   	u32	target_priv_sz;
> +	u32	lsrqst_priv_sz;
>   };
>   
>   
> @@ -863,10 +984,61 @@ int nvmet_fc_register_targetport(struct nvmet_fc_port_info *portinfo,
>   
>   int nvmet_fc_unregister_targetport(struct nvmet_fc_target_port *tgtport);
>   
> +/*
> + * Routine called to pass a NVME-FC LS request, received by the lldd,
> + * to the nvmet-fc transport.
> + *
> + * If the return value is zero: the LS was successfully accepted by the
> + *   transport.
> + * If the return value is non-zero: the transport has not accepted the
> + *   LS. The lldd should ABTS-LS the LS.
> + *
> + * Note: if the LLDD receives and ABTS for the LS prior to the transport
> + * calling the ops->xmt_ls_rsp() routine to transmit a response, the LLDD
> + * shall mark the LS as aborted, and when the xmt_ls_rsp() is called: the
> + * response shall not be transmit and the struct nvmefc_ls_rsp() done
> + * routine shall be called.  The LLDD may transmit the ABTS response as
> + * soon as the LS was marked or can delay until the xmt_ls_rsp() call is
> + * made.
> + * Note: if an RCV LS was successfully posted to the transport and the
> + * targetport is then unregistered before xmt_ls_rsp() was called for
> + * the lsrsp structure, the transport will still call xmt_ls_rsp()
> + * afterward to cleanup the outstanding lsrsp structure. The LLDD should
> + * noop the transmission of the rsp and call the lsrsp->done() routine
> + * to allow the lsrsp structure to be released.
> + */
>   int nvmet_fc_rcv_ls_req(struct nvmet_fc_target_port *tgtport,
> -			struct nvmefc_tgt_ls_req *lsreq,
> +			void *hosthandle,
> +			struct nvmefc_ls_rsp *rsp,
>   			void *lsreqbuf, u32 lsreqbuf_len);
>   
> +/*
> + * Routine called by the LLDD whenever it has a logout or loss of
> + * connectivity to a NVME-FC host port which there had been active
> + * NVMe controllers for.  The host port is indicated by the
> + * hosthandle. The hosthandle is given to the nvmet-fc transport
> + * when a NVME LS was received, typically to create a new association.
> + * The nvmet-fc transport will cache the hostport value with the
> + * association for use in LS requests for the association.
> + * When the LLDD calls this routine, the nvmet-fc transport will
> + * immediately terminate all associations that were created with
> + * the hosthandle host port.
> + * The LLDD, after calling this routine and having control returned,
> + * must assume the transport may subsequently utilize hosthandle as
> + * part of sending LS's to terminate the association.  The LLDD
> + * should reject the LS's if they are attempted.
> + * Once the last association has terminated for the hosthandle host
> + * port, the nvmet-fc transport will call the ops->host_release()
> + * callback. As of the callback, the nvmet-fc transport will no
> + * longer reference hosthandle.
> + */
> +void nvmet_fc_invalidate_host(struct nvmet_fc_target_port *tgtport,
> +			void *hosthandle);
> +
> +/*
> + * If nvmet_fc_rcv_fcp_req returns non-zero, the transport has not accepted
> + * the FCP cmd. The lldd should ABTS-LS the cmd.
> + */
>   int nvmet_fc_rcv_fcp_req(struct nvmet_fc_target_port *tgtport,
>   			struct nvmefc_tgt_fcp_req *fcpreq,
>   			void *cmdiubuf, u32 cmdiubuf_len);
> 

Looks Good.

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>


_______________________________________________
linux-nvme mailing list
linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme

  parent reply	other threads:[~2020-03-26 16:16 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-05 18:37 [PATCH 00/29] nvme-fc/nvmet-fc: Add FC-NVME-2 disconnect association support James Smart
2020-02-05 18:37 ` [PATCH 01/29] nvme-fc: Sync header to FC-NVME-2 rev 1.08 James Smart
2020-02-28 20:36   ` Sagi Grimberg
2020-03-06  8:16   ` Hannes Reinecke
2020-03-26 16:10   ` Himanshu Madhani
2020-02-05 18:37 ` [PATCH 02/29] nvmet-fc: fix typo in comment James Smart
2020-02-28 20:36   ` Sagi Grimberg
2020-03-06  8:17   ` Hannes Reinecke
2020-03-26 16:10   ` Himanshu Madhani
2020-02-05 18:37 ` [PATCH 03/29] nvme-fc and nvmet-fc: revise LLDD api for LS reception and LS request James Smart
2020-02-28 20:38   ` Sagi Grimberg
2020-03-06  8:19   ` Hannes Reinecke
2020-03-26 16:16   ` Himanshu Madhani [this message]
2020-02-05 18:37 ` [PATCH 04/29] nvme-fc nvmet_fc nvme_fcloop: adapt code to changed names in api header James Smart
2020-02-28 20:40   ` Sagi Grimberg
2020-03-06  8:21   ` Hannes Reinecke
2020-03-26 16:26   ` Himanshu Madhani
2020-02-05 18:37 ` [PATCH 05/29] lpfc: " James Smart
2020-02-28 20:40   ` Sagi Grimberg
2020-03-06  8:25   ` Hannes Reinecke
2020-03-26 16:30   ` Himanshu Madhani
2020-02-05 18:37 ` [PATCH 06/29] nvme-fcloop: Fix deallocation of working context James Smart
2020-02-28 20:43   ` Sagi Grimberg
2020-03-06  8:34   ` Hannes Reinecke
2020-03-26 16:35   ` Himanshu Madhani
2020-02-05 18:37 ` [PATCH 07/29] nvme-fc nvmet-fc: refactor for common LS definitions James Smart
2020-03-06  8:35   ` Hannes Reinecke
2020-03-26 16:36   ` Himanshu Madhani
2020-02-05 18:37 ` [PATCH 08/29] nvmet-fc: Better size LS buffers James Smart
2020-02-28 21:04   ` Sagi Grimberg
2020-03-06  8:36   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 09/29] nvme-fc: Ensure private pointers are NULL if no data James Smart
2020-02-28 21:05   ` Sagi Grimberg
2020-03-06  8:44   ` Hannes Reinecke
2020-03-26 16:39   ` Himanshu Madhani
2020-02-05 18:37 ` [PATCH 10/29] nvmefc: Use common definitions for LS names, formatting, and validation James Smart
2020-03-06  8:44   ` Hannes Reinecke
2020-03-26 16:41   ` Himanshu Madhani
2020-02-05 18:37 ` [PATCH 11/29] nvme-fc: convert assoc_active flag to atomic James Smart
2020-02-28 21:08   ` Sagi Grimberg
2020-03-06  8:47   ` Hannes Reinecke
2020-03-26 19:16   ` Himanshu Madhani
2020-02-05 18:37 ` [PATCH 12/29] nvme-fc: Add Disconnect Association Rcv support James Smart
2020-03-06  9:00   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 13/29] nvmet-fc: add LS failure messages James Smart
2020-03-06  9:01   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 14/29] nvmet-fc: perform small cleanups on unneeded checks James Smart
2020-03-06  9:01   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 15/29] nvmet-fc: track hostport handle for associations James Smart
2020-03-06  9:02   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 16/29] nvmet-fc: rename ls_list to ls_rcv_list James Smart
2020-03-06  9:03   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 17/29] nvmet-fc: Add Disconnect Association Xmt support James Smart
2020-03-06  9:04   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 18/29] nvme-fcloop: refactor to enable target to host LS James Smart
2020-03-06  9:06   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 19/29] nvme-fcloop: add target to host LS request support James Smart
2020-03-06  9:07   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 20/29] lpfc: Refactor lpfc nvme headers James Smart
2020-03-06  9:18   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 21/29] lpfc: Refactor nvmet_rcv_ctx to create lpfc_async_xchg_ctx James Smart
2020-03-06  9:19   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 22/29] lpfc: Commonize lpfc_async_xchg_ctx state and flag definitions James Smart
2020-03-06  9:19   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 23/29] lpfc: Refactor NVME LS receive handling James Smart
2020-03-06  9:20   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 24/29] lpfc: Refactor Send LS Request support James Smart
2020-03-06  9:20   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 25/29] lpfc: Refactor Send LS Abort support James Smart
2020-03-06  9:21   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 26/29] lpfc: Refactor Send LS Response support James Smart
2020-03-06  9:21   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 27/29] lpfc: nvme: Add Receive LS Request and Send LS Response support to nvme James Smart
2020-03-06  9:23   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 28/29] lpfc: nvmet: Add support for NVME LS request hosthandle James Smart
2020-03-06  9:23   ` Hannes Reinecke
2020-02-05 18:37 ` [PATCH 29/29] lpfc: nvmet: Add Send LS Request and Abort LS Request support James Smart
2020-03-06  9:24   ` Hannes Reinecke
2020-03-06  9:26 ` [PATCH 00/29] nvme-fc/nvmet-fc: Add FC-NVME-2 disconnect association support Hannes Reinecke
2020-03-31 14:29 ` 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=7fc5d470-d68d-24fc-0a75-8fb34d978731@oracle.com \
    --to=himanshu.madhani@oracle.com \
    --cc=jsmart2021@gmail.com \
    --cc=linux-nvme@lists.infradead.org \
    --cc=martin.petersen@oracle.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).