All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hannes Reinecke <hare@suse.de>
To: Arne Redlich <arne.redlich@xiranet.com>
Cc: Alasdair Kergon <agk@redhat.com>,
	michaelc@cs.wisc.edu, dm-devel@redhat.com,
	linux-scsi@vger.kernel.org
Subject: Re: [PATCH 2/3] multipath: Add new SPC-3 ALUA hardware handler
Date: Fri, 16 Nov 2007 12:36:01 +0100	[thread overview]
Message-ID: <473D80A1.7000402@suse.de> (raw)
In-Reply-To: <8764021o7x.fsf@confield.dd.xiranet.com>

Arne Redlich wrote:
> Hi Hannes,
> 
> hare@suse.de (Hannes Reinecke) writes:
> 
>> This adds a new SPC-3 ALUA hardware handler for multipathing.
>>
>> Signed-off-by: Hannes Reinecke <hare@suse.de>
> 
> <snip>
> 
>> +#define TPGS_STATE_OPTIMIZED		0x0
>> +#define TPGS_STATE_NONOPTIMIZED		0x1
>> +#define TPGS_STATE_STANDBY		0x2
>> +#define TPGS_STATE_UNAVAILABLE		0x3
>> +#define TPGS_STATE_OFFLINE		0xe
> 
> SPC-3 (at least the draft, rev 23 I'm looking at) doesn't know an
> 'Offline' state - I think it's a SPC-4 feature. So maybe 'Unavailable'
> should be interpreted as path failure as well / instead?
> 
It is SPC-4. And if the state is unavailable, we can try to
activate it; spc3r23 says (5.8.2.4.5):
Therefore it may not be possible to transition from this state to
either the active/optimized, active/non-optimized or standby states.

But consequently it _may_ be possible, so we should at least try.
If that fails (ie if SET TARGET PORT GROUPS returns
an error) we'll fail the path anyway.
No harm in trying.

> <snip>
> 
>> +/*
>> + * SET TARGET GROUP STATES endio handler
>> + *
>> + * We only have to test here if we should resubmit the command;
>> + * any other error is assumed as a failure.
>> + * Maybe we should analyze the sensebuffer here, too.
>> + */
>> +static void stpg_endio(struct request *req, int error)
>> +{
>> +	struct hw_handler *hwh = req->end_io_data;
>> +	struct alua_handler *h = hwh->context;
>> +
>> +	switch(host_byte(error)) {
>> +	case DID_BUS_BUSY:
>> +		if (!h->retry)
>> +			break;
>> +		h->retry--;
>> +	case DID_REQUEUE:
>> +	case DID_IMM_RETRY:
>> +		dm_enqueue_hw_workq(hwh);
>> +		goto done;
>> +	}
>> +
>> +	if (had_failures(req, error)) {
>> +		if (h->tpgs & TPGS_MODE_IMPLICIT) {
>> +			/* Ignore errors; the array will figure it out */
>> +			DMWARN("%s: stpg failed %x, disabling explicit mode",
>> +			       h->path->dev->name, error);
>> +			h->tpgs &= ~TPGS_MODE_EXPLICIT;
>> +			dm_enqueue_hw_workq(hwh);
>> +		} else {
>> +			DMWARN("%s: stpg failed %x, disable path",
>> +			       h->path->dev->name, error);
>> +			dm_pg_init_complete(h->path, MP_FAIL_PATH);
>> +		}
>> +	} else {
>> +		DMWARN("%s: port group %02x new state %c",
>> +		       h->path->dev->name, h->group_id,
>> +		       print_alua_state(h->state) );
>> +		dm_pg_init_complete(h->path, 0);
> 
> Hmmm, maybe I'm just missing something so CMIIW, but I think the PG
> state should be retrieved once more before finally calling
> dm_pg_init_complete(), because the target might return the STPG command
> before the transition has completed (SPC-3, 6.31). This could confuse
> application clients?
> 
Hmm. Spec isn't exactly clear here. One would expect that these arrays
would have set the T_SUP bit in REPORT TARGET PORT GROUPS, and set the
ALUA state to 'TRANSITIONING' accordingly. But we catch the relevant
sense codes as per SPC-3, so we should retry it properly.

And it's not that I've actually seen an array implementing this, so
it's a bit academic currently. 

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		      zSeries & Storage
hare@suse.de			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Markus Rex, HRB 16746 (AG Nürnberg)
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

      reply	other threads:[~2007-11-16 11:36 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-15  9:16 [PATCH 2/3] multipath: Add new SPC-3 ALUA hardware handler Hannes Reinecke
2007-11-16 10:25 ` Arne Redlich
2007-11-16 11:36   ` Hannes Reinecke [this message]

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=473D80A1.7000402@suse.de \
    --to=hare@suse.de \
    --cc=agk@redhat.com \
    --cc=arne.redlich@xiranet.com \
    --cc=dm-devel@redhat.com \
    --cc=linux-scsi@vger.kernel.org \
    --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 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.