public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
From: Johannes Thumshirn <jthumshirn@suse.de>
To: jsmart2021@gmail.com
Cc: linux-scsi@vger.kernel.org, linux-nvme@lists.infradead.org,
	sagi@grimberg.me, martin.petersen@oracle.com,
	Dick Kennedy <dick.kennedy@broadcom.com>,
	James Smart <james.smart@broadcom.com>
Subject: Re: ["PATCH-v2" 20/22] Update ABORT processing for NVMET.
Date: Fri, 21 Apr 2017 09:07:12 +0200	[thread overview]
Message-ID: <20170421070712.GC26346@linux-x5ow.site> (raw)
In-Reply-To: <20170420220448.27095-21-jsmart2021@gmail.com>

On Thu, Apr 20, 2017 at 03:04:46PM -0700, jsmart2021@gmail.com wrote:
> From: James Smart <jsmart2021@gmail.com>
> 
> The driver with nvme had this routine stubbed.
> 
> Right now XRI_ABORTED_CQE is not handled and the FC NVMET
> Transport has a new API for the driver.
> 
> Missing code path, new NVME abort API
> Update ABORT processing for NVMET
> 
> There are 3 new FC NVMET Transport API/ template routines for NVMET:
> 
> lpfc_nvmet_xmt_fcp_release
> This NVMET template callback routine called to release context
> associated with an IO This routine is ALWAYS called last, even
> if the IO was aborted or completed in error.
> 
> lpfc_nvmet_xmt_fcp_abort
> This NVMET template callback routine called to abort an exchange that
> has an IO in progress
> 
> nvmet_fc_rcv_fcp_req
> When the lpfc driver receives an ABTS, this NVME FC transport layer
> callback routine is called. For this case there are 2 paths thru the
> driver: the driver either has an outstanding exchange / context for the
> XRI to be aborted or not.  If not, a BA_RJT is issued otherwise a BA_ACC
> 
> NVMET Driver abort paths:
> 
> There are 2 paths for aborting an IO. The first one is we receive an IO and
> decide not to process it because of lack of resources. An unsolicated ABTS
> is immediately sent back to the initiator as a response.
> lpfc_nvmet_unsol_fcp_buffer
>             lpfc_nvmet_unsol_issue_abort  (XMIT_SEQUENCE_WQE)
> 
> The second one is we sent the IO up to the NVMET transport layer to
> process, and for some reason the NVME Transport layer decided to abort the
> IO before it completes all its phases. For this case there are 2 paths
> thru the driver:
> the driver either has an outstanding TSEND/TRECEIVE/TRSP WQE or no
> outstanding WQEs are present for the exchange / context.
> lpfc_nvmet_xmt_fcp_abort
>     if (LPFC_NVMET_IO_INP)
>         lpfc_nvmet_sol_fcp_issue_abort  (ABORT_WQE)
>                 lpfc_nvmet_sol_fcp_abort_cmp
>     else
>         lpfc_nvmet_unsol_fcp_issue_abort
>                 lpfc_nvmet_unsol_issue_abort  (XMIT_SEQUENCE_WQE)
>                         lpfc_nvmet_unsol_fcp_abort_cmp
> 
> Context flags:
> LPFC_NVMET_IOP - his flag signifies an IO is in progress on the exchange.
> LPFC_NVMET_XBUSY  - this flag indicates the IO completed but the firmware
> is still busy with the corresponding exchange. The exchange should not be
> reused until after a XRI_ABORTED_CQE is received for that exchange.
> LPFC_NVMET_ABORT_OP - this flag signifies an ABORT_WQE was issued on the
> exchange.
> LPFC_NVMET_CTX_RLS  - this flag signifies a context free was requested,
> but we are deferring it due to an XBUSY or ABORT in progress.
> 
> A ctxlock is added to the context structure that is used whenever these
> flags are set/read  within the context of an IO.
> The LPFC_NVMET_CTX_RLS flag is only set in the defer_relase routine when
> the transport has resolved all IO associated with the buffer. The flag is
> cleared when the CTX is associated with a new IO.
> 
> An exchange can has both an LPFC_NVMET_XBUSY and a LPFC_NVMET_ABORT_OP
> condition active simultaneously. Both conditions must complete before the
> exchange is freed.
> When the abort callback (lpfc_nvmet_xmt_fcp_abort) is envoked:
> If there is an outstanding IO, the driver will issue an ABORT_WQE. This
> should result in 3 completions for the exchange:
> 1) IO cmpl with XB bit set
> 2) Abort WQE cmpl
> 3) XRI_ABORTED_CQE cmpl
> For this scenerio, after completion #1, the NVMET Transport IO rsp
> callback is called.  After completion #2, no action is taken with respect
> to the exchange / context.  After completion #3, the exchange context is
> free for re-use on another IO.
> 
> If there is no outstanding activity on the exchange, the driver will send a
> ABTS to the Initiator. Upon completion of this WQE, the exchange / context
> is freed for re-use on another IO.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---

Looks good. Thanks,
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>

-- 
Johannes Thumshirn                                          Storage
jthumshirn@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850

  reply	other threads:[~2017-04-21  7:07 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-20 22:04 ["PATCH-v2" 00/22] lpfc updates for 11.2.0.12 jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 01/22] Standardize nvme SGL segment count jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 02/22] Fix nvme unregister port timeout jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 03/22] Fix rejected nvme LS Req jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 04/22] Fix log message in completion path jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 05/22] Add debug messages for nvme/fcp resource allocation jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 06/22] Fix spelling in comments jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 07/22] Remove unused defines for NVME PostBuf jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 08/22] Remove NULL ptr check before kfree jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 09/22] Fix extra line print in rqpair debug print jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 10/22] Fix PRLI ACC rsp for NVME jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 11/22] Fix driver unload/reload operation jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 12/22] Fix driver usage of 128B WQEs when WQ_CREATE is V1 jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 13/22] Fix nvme initiator handling when not enabled jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 14/22] Remove hba lock from NVMET issue WQE jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 15/22] Fix driver load issues when MRQ=8 jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 16/22] Fix crash after issuing lip reset jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 17/22] Fix max_sgl_segments settings for NVME / NVMET jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 18/22] Add Fabric assigned WWN support jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 19/22] Fix implicit logo and RSCN handling for NVMET jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 20/22] Update ABORT processing " jsmart2021
2017-04-21  7:07   ` Johannes Thumshirn [this message]
2017-04-20 22:04 ` ["PATCH-v2" 21/22] Fix Express lane queue creation jsmart2021
2017-04-20 22:04 ` ["PATCH-v2" 22/22] lpfc revison 11.2.0.12 jsmart2021
2017-04-20 23:52 ` ["PATCH-v2" 00/22] lpfc updates for 11.2.0.12 Sagi Grimberg
2017-04-21  6:22   ` Christoph Hellwig
2017-04-21 14:24     ` Martin K. Petersen
2017-04-21 17:13       ` James Smart
2017-04-21 16:44     ` James Smart

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=20170421070712.GC26346@linux-x5ow.site \
    --to=jthumshirn@suse.de \
    --cc=dick.kennedy@broadcom.com \
    --cc=james.smart@broadcom.com \
    --cc=jsmart2021@gmail.com \
    --cc=linux-nvme@lists.infradead.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=sagi@grimberg.me \
    /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