public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
From: James Smart <James.Smart@emulex.com>
To: Hannes Reinecke <hare@suse.de>
Cc: Bart Van Assche <bvanassche@acm.org>,
	Mike Christie <michaelc@cs.wisc.edu>,
	"Bryn M. Reeves" <bmr@redhat.com>,
	Steffen Maier <maier@linux.vnet.ibm.com>,
	linux-scsi@vger.kernel.org, Chad Dupuis <chad.dupuis@qlogic.com>,
	Andrew Vasquez <andrew.vasquez@qlogic.com>,
	James Bottomley <jbottomley@parallels.com>
Subject: Re: [PATCH] scsi_transport_fc: Make 'port_state' writeable
Date: Mon, 1 Apr 2013 17:06:46 -0400	[thread overview]
Message-ID: <5159F6E6.9030900@emulex.com> (raw)
In-Reply-To: <5146BDBD.3070408@suse.de>


On 3/18/2013 3:09 AM, Hannes Reinecke wrote:
> On 03/15/2013 08:13 PM, Bart Van Assche wrote:
>> On 03/15/13 19:51, Mike Christie wrote:
>>> On 03/15/2013 08:41 AM, Bart Van Assche wrote:
>>>> How about using the value of scsi_cmnd.jiffies_at_alloc to finish
>>>> only
>>>> those SCSI commands in the host reset handler that exceeded a
>>>> certain
>>>> processing time ?
>>>
>>> We basically do this now. When a scsi command times out the scsi
>>> layer
>>> blocks the host from processing new commands and waits for all
>>> outstanding commands to either finish normally or timeout. When all
>>> commands have finished or timedout, then we start the scsi eh
>>> code. So,
>>> by the time we have go to the scsi eh callbacks we are in a state
>>> where
>>> all the commands being processed by the eh have exceeded a certain
>>> processing time.
>>>
>>> If you mean you want to drop the block and wait part, then I think it
>>> could speed things up to do the abort callbacks while other IO is
>>> running (as long as the driver can support it). However if the abort
>>> fails and you need to escalate to operations like resets which
>>> interfere
>>> with multiple commands, then the driver/scsi-ml does not have much
>>> choice in what it does cleanup wise. There would be no point in
>>> checking
>>> the jiffies_at_alloc. The commands that are going to be affected
>>> by the
>>> tmf or host reset operation must be returned to the scsi-ml for
>>> retries
>>> or failure upwards.
>>
>> Hello Mike,
>>
>> It seems like there is a misunderstanding. With my comment I was not
>> referring to the SCSI ML but to the SCSI LLD. LLD drivers like
>> ib_srp keep track of outstanding SCSI requests. With the SRP
>> protocol it is possible to tell the InfiniBand HCA not to deliver
>> completions for outstanding requests by closing the connection used
>> for SRP communication. Hence my suggestion to finish SCSI commands
>> that were queued longer than a certain time ago from inside the LLD
>> host reset handler. I'm not sure though whether all types of FC
>> HBA's allow something equivalent.
>>
> Well, this is not quite identical to what I've been trying to
> achieve with this patch.
> This patch is for an individual rport which has gone out to lunch.
> Sure we could down the link from the HBA, but that would terminate
> I/O to _all_ connected rports, not just the malfunctioning one.
> So that wouldn't help us here.
>
> The closest equivalent to that would be a port logout; however, as 
> discussed in the I_T nexus reset thread we would need another callout 
> to the LLDs here as this definitely needs LLD support
> and none of the current LLDs have it implemented.
>
> Cheers,
>
> Hannes

I think lpfc survives your rport state change as : part of the lld 
behavior on the callback, to clean up reference counts, is to abort all 
i/o that is outstanding to the rport.   So the ref checking not only 
protects lpfc from prematurely freeing a structure (my real concern), 
but also just happens to abort all i/o.  We got lucky.

I still believe the I_T_nexus reset is the right way to solve this.

-- james s



  reply	other threads:[~2013-04-01 21:06 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-15 15:02 [PATCH] scsi_transport_fc: Make 'port_state' writeable Hannes Reinecke
2013-03-14 18:09 ` Steffen Maier
2013-03-15 11:55   ` Hannes Reinecke
2013-03-15 12:01     ` Bryn M. Reeves
2013-03-15 12:24     ` Bart Van Assche
2013-03-15 12:37       ` Bryn M. Reeves
2013-03-15 12:46         ` Bart Van Assche
2013-03-15 13:28           ` Bryn M. Reeves
2013-03-15 13:41             ` Bart Van Assche
2013-03-15 18:51               ` Mike Christie
2013-03-15 19:13                 ` Bart Van Assche
2013-03-15 21:12                   ` Mike Christie
2013-03-18  7:09                   ` Hannes Reinecke
2013-04-01 21:06                     ` James Smart [this message]
2013-04-04  6:26                       ` Hannes Reinecke
2013-04-05 15:14                         ` James Smart
2013-04-12 14:24                           ` Chad Dupuis
2013-03-18 21:54             ` Jeremy Linton
2013-04-01 20:51     ` 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=5159F6E6.9030900@emulex.com \
    --to=james.smart@emulex.com \
    --cc=andrew.vasquez@qlogic.com \
    --cc=bmr@redhat.com \
    --cc=bvanassche@acm.org \
    --cc=chad.dupuis@qlogic.com \
    --cc=hare@suse.de \
    --cc=jbottomley@parallels.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=maier@linux.vnet.ibm.com \
    --cc=michaelc@cs.wisc.edu \
    /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