[dm-devel] [PATCH 13/21] libmultipath: clariion checker: leave unsupported paths alone
Martin Wilck
mwilck at suse.com
Fri Oct 26 09:01:49 UTC 2018
On Thu, 2018-10-25 at 16:41 -0500, Benjamin Marzinski wrote:
> On Fri, Oct 12, 2018 at 12:26:59AM +0200, Martin Wilck wrote:
> > A checker shouldn't set the path state to PATH_DOWN if it fails
> > to obtain information about the path in the first place. Add logic
> > to the checker to distinguish a failed path from an unsupported
> > path.
> >
> > Signed-off-by: Martin Wilck <mwilck at suse.com>
> > ---
> > libmultipath/checkers/emc_clariion.c | 50
> > ++++++++++++++++++++++++++--
> > 1 file changed, 48 insertions(+), 2 deletions(-)
> >
> > diff --git a/libmultipath/checkers/emc_clariion.c
> > b/libmultipath/checkers/emc_clariion.c
> > index f8e55b93..a277a004 100644
> > --- a/libmultipath/checkers/emc_clariion.c
> > +++ b/libmultipath/checkers/emc_clariion.c
> > @@ -20,6 +20,11 @@
> > #define INQUIRY_CMD 0x12
> > #define INQUIRY_CMDLEN 6
> > #define HEAVY_CHECK_COUNT 10
> > +#define SCSI_COMMAND_TERMINATED 0x22
> > +#define SCSI_CHECK_CONDITION 0x2
> > +#define RECOVERED_ERROR 0x01
> > +#define ILLEGAL_REQUEST 0x05
> > +#define SG_ERR_DRIVER_SENSE 0x08
> >
> > /*
> > * Mechanism to track CLARiiON inactive snapshot LUs.
> > @@ -130,7 +135,9 @@ int libcheck_check (struct checker * c)
> > (struct emc_clariion_checker_path_context *)c->context;
> > char wwnstr[33];
> > int ret;
> > + int retry_emc = 5;
> >
> > +retry:
> > memset(&io_hdr, 0, sizeof (struct sg_io_hdr));
> > memset(sense_buffer, 0, 128);
> > memset(sb, 0, SENSE_BUFF_LEN);
> > @@ -145,12 +152,51 @@ int libcheck_check (struct checker * c)
> > io_hdr.timeout = c->timeout * 1000;
> > io_hdr.pack_id = 0;
> > if (ioctl(c->fd, SG_IO, &io_hdr) < 0) {
> > + if (errno == ENOTTY) {
> > + c->msgid = CHECKER_MSGID_UNSUPPORTED;
> > + return PATH_WILD;
> > + }
> > c->msgid = MSG_CLARIION_QUERY_FAILED;
> > return PATH_DOWN;
> > }
> > +
> > if (io_hdr.info & SG_INFO_OK_MASK) {
> > - c->msgid = MSG_CLARIION_QUERY_ERROR;
> > - return PATH_DOWN;
>
> Previously, if (io_hdr.info & SG_INFO_OK_MASK) the checker would
> always
> return PATH_DOWN. Both the tur and rdac checker always return either
> PATH_DOWN or PATH_WILD if (io_hdr.info & SG_INFO_OK_MASK && sense_key
> != RECOVERED_ERROR). With the clariion checker, it now appears
> possible
> to have (io_hdr.info & SG_INFO_OK_MASK && sense_key !=
> RECOVERED_ERROR)
> and still return PATH_UP. Is this intentional? Am I missing something
> here?
I copied this code from the rdac checker. But the default return value
in emc_clariion is different, thanks for spotting that. I will post an
update.
Handling of SCSI status and sense codes is done differently in
different parts of multipath-tools. We really need common SCSI code :-/
Martin
--
Dr. Martin Wilck <mwilck at suse.com>, Tel. +49 (0)911 74053 2107
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
More information about the dm-devel
mailing list