All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Christie <michaelc@cs.wisc.edu>
To: Mike Snitzer <snitzer@redhat.com>
Cc: Hannes Reinecke <hare@suse.de>,
	"Nicholas A. Bellinger" <nab@linux-iscsi.org>,
	James Bottomley <James.Bottomley@suse.de>,
	linux-scsi@vger.kernel.org
Subject: Re: scsi_dh_alua: add missing transitioning state support
Date: Tue, 21 Sep 2010 16:14:14 -0500	[thread overview]
Message-ID: <4C992026.5080402@cs.wisc.edu> (raw)
In-Reply-To: <20100921193320.GA5110@redhat.com>

On 09/21/2010 02:33 PM, Mike Snitzer wrote:
> On Mon, Sep 20 2010 at 10:27pm -0400,
> Mike Christie<michaelc@cs.wisc.edu>  wrote:
>
>> On 09/20/2010 10:35 AM, Mike Snitzer wrote:
>>> Hi Hannes,
>>>
>>> On Tue, Aug 31 2010 at 11:11am -0400,
>>> Mike Snitzer<snitzer@redhat.com>   wrote:
>>>
>>>> On Mon, Aug 30 2010 at  5:36am -0400,
>>>> Hannes Reinecke<hare@suse.de>   wrote:
>>>>
>>>>> Nicholas A. Bellinger wrote:
>>>>>> On Tue, 2010-08-17 at 15:05 -0400, Mike Snitzer wrote:
>>>>>>> Handle transitioning in the prep_fn.
>>>>>>> Handle transitioning in alua_rtpg's implicit alua code too.
>>>>>>>
>>>>>>> These gaps were identified during controller failover testing of an
>>>>>>> ALUA array.
>>>>>>>
>>>>>>> Signed-off-by: Mike Snitzer<snitzer@redhat.com>
>>>>>>> ---
>>>>>>>   drivers/scsi/device_handler/scsi_dh_alua.c |   10 +++++++---
>>>>>>>   1 files changed, 7 insertions(+), 3 deletions(-)
>>>>>>>
>>>>>>> diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c
>>>>>>> index 1a970a7..c1eedc5 100644
>>>>>>> --- a/drivers/scsi/device_handler/scsi_dh_alua.c
>>>>>>> +++ b/drivers/scsi/device_handler/scsi_dh_alua.c
>>>>>>> @@ -616,6 +616,9 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_dh_data *h)
>>>>>>>   		    h->state == TPGS_STATE_STANDBY)
>>>>>>>   			/* Useable path if active */
>>>>>>>   			err = SCSI_DH_OK;
>>>>>>> +		else if (h->state == TPGS_STATE_TRANSITIONING)
>>>>>>> +			/* State transition, retry */
>>>>>>> +			goto retry;
>>>>>>>   		else
>>>>>>>   			/* Path unuseable for unavailable/offline */
>>>>>>>   			err = SCSI_DH_DEV_OFFLINED;
>>>>>>> @@ -698,13 +701,14 @@ static int alua_prep_fn(struct scsi_device *sdev, struct request *req)
>>>>>>>   	struct alua_dh_data *h = get_alua_data(sdev);
>>>>>>>   	int ret = BLKPREP_OK;
>>>>>>>
>>>>>>> -	if (h->state != TPGS_STATE_OPTIMIZED&&
>>>>>>> -	    h->state != TPGS_STATE_NONOPTIMIZED) {
>>>>>>> +	if (h->state == TPGS_STATE_TRANSITIONING)
>>>>>>> +		ret = BLKPREP_DEFER;
>>>>>>> +	else if (h->state != TPGS_STATE_OPTIMIZED&&
>>>>>>> +		 h->state != TPGS_STATE_NONOPTIMIZED) {
>>>>>>>   		ret = BLKPREP_KILL;
>>>>>>>   		req->cmd_flags |= REQ_QUIET;
>>>>>>>   	}
>>>>>>>   	return ret;
>>>>>>> -
>>>>>>>   }
>>>>>>>
>>>>>>
>>>>>> Makes sense to me..
>>>>>>
>>>>>> Acked-by: Nicholas A. Bellinger<nab@linux-iscsi.org>
>>>>>>
>>>>> Not so fast. There are two problems with this approach:
>>>>>
>>>>> The path is retried indefinitely. Arrays are _supposed_ to be in 'transitioning'
>>>>> only temporary; however, if the array is stuck due to a fw error we're stuck in 'defer',
>>>>> too.
>>>>
>>>> And what is the problem with that?  The IO will eventually time out.
>>>
>>> To restate as a question: even though we'll retry in alua_rtpg();
>>> shouldn't the SCSI command eventually time out (via
>>> scsi_attempt_requeue_command)?
>>
>> That function is only in RHEL. Requests that are prepd and sent to
>> the scsi layer and driver would eventually timeout in
>> scsi_softirq_done in upstream.
>>
>> alua_prep_fn prevents the IO from getting sent to the scsi layer so
>> we do not hit the check in scsi_softirq_done though.
>
> That is only the case if alua_prep_fn were to return BLKPREP_DEFER
> right?

Yeah. I misread the email above. Just to clarify..

For the alua case, we will always retry due the prep_fn issue I mentioned.

For the alua_rtpg() retry case you were discussing we will also always 
retry, because the timer check in 
scsi_attempt_requeue_command/scsi_softirq_done will break us from 
retrying forever in that execution of the request started by the 
submit_rtpg call. However, the added goto retry will would just end up 
starting a another execution. To handle Hannes comment I think you would 
want to add some retry/timer checks in alua_rtpg to prevent that from 
retrying forever.

>
> 2) the patch also modified alua_rtpg() so implicit ALUA would retry
>     (just like explicit ALUA currently does) if TPGS_STATE_TRANSITIONING
>     - so why should we avoid retry for implicit but do it for explicit?

Leaving that for Hannes. I cannot think of a reason. Probably just did 
not do it.

  reply	other threads:[~2010-09-21 21:08 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-17 19:05 [PATCH] scsi_dh_alua: add missing transitioning state support Mike Snitzer
2010-08-17 19:23 ` Nicholas A. Bellinger
2010-08-30  9:36   ` Hannes Reinecke
2010-08-31 15:11     ` Mike Snitzer
2010-09-20 15:35       ` Mike Snitzer
2010-09-21  2:27         ` Mike Christie
2010-09-21  2:28           ` Mike Christie
2010-09-21 19:33           ` Mike Snitzer
2010-09-21 21:14             ` Mike Christie [this message]
2010-09-22 10:13               ` Hannes Reinecke
2010-09-22 12:29                 ` Mike Snitzer
2010-09-23  7:15                   ` Hannes Reinecke
2010-09-23 13:44                     ` Mike Snitzer
2010-09-23 18:53                       ` Mike Snitzer

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=4C992026.5080402@cs.wisc.edu \
    --to=michaelc@cs.wisc.edu \
    --cc=James.Bottomley@suse.de \
    --cc=hare@suse.de \
    --cc=linux-scsi@vger.kernel.org \
    --cc=nab@linux-iscsi.org \
    --cc=snitzer@redhat.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.