From: Chandra Seetharaman <sekharan@us.ibm.com>
To: dm-devel@redhat.com
Cc: andmike@us.ibm.com, michaelc@cs.wisc.edu,
christophe.varoqui@free.fr, agk@redhat.com
Subject: [PATCH 1/3] C4 Inquiry based path checker
Date: Wed, 21 Mar 2007 11:38:38 -0800 [thread overview]
Message-ID: <20070321193838.24487.83544.sendpatchset@localhost.localdomain> (raw)
In-Reply-To: <20070321193833.24487.76682.sendpatchset@localhost.localdomain>
Index: multipath-tools-0.4.7/libcheckers/Makefile
===================================================================
--- multipath-tools-0.4.7.orig/libcheckers/Makefile 2007-03-02 18:42:00.000000000 -0800
+++ multipath-tools-0.4.7/libcheckers/Makefile 2007-03-02 18:42:19.000000000 -0800
@@ -6,7 +6,7 @@
include ../Makefile.inc
-OBJS = checkers.o readsector0.o tur.o directio.o emc_clariion.o hp_sw.o
+OBJS = checkers.o readsector0.o tur.o directio.o emc_clariion.o hp_sw.o rdac.o
all: $(BUILD)
Index: multipath-tools-0.4.7/libcheckers/rdac.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ multipath-tools-0.4.7/libcheckers/rdac.c 2007-03-20 14:43:38.000000000 -0700
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2005 Christophe Varoqui
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <errno.h>
+
+#include "checkers.h"
+
+#include "../libmultipath/sg_include.h"
+
+#define INQUIRY_CMDLEN 6
+#define INQUIRY_CMD 0x12
+#define SENSE_BUFF_LEN 32
+#define DEF_TIMEOUT 60000
+#define SCSI_CHECK_CONDITION 0x2
+#define SCSI_COMMAND_TERMINATED 0x22
+#define SG_ERR_DRIVER_SENSE 0x08
+#define RECOVERED_ERROR 0x01
+
+#define MSG_RDAC_UP "rdac checker reports path is up"
+#define MSG_RDAC_DOWN "rdac checker reports path is down"
+#define MSG_RDAC_GHOST "rdac checker reports path is ghost"
+
+struct rdac_checker_context {
+ void * dummy;
+};
+
+int rdac_init (struct checker * c)
+{
+ return 0;
+}
+
+void rdac_free (struct checker * c)
+{
+ return;
+}
+
+static int
+do_inq(int sg_fd, unsigned int pg_op, void *resp, int mx_resp_len)
+{
+ unsigned char inqCmdBlk[INQUIRY_CMDLEN] = { INQUIRY_CMD, 1, 0, 0, 0, 0 };
+ unsigned char sense_b[SENSE_BUFF_LEN];
+ struct sg_io_hdr io_hdr;
+
+ inqCmdBlk[2] = (unsigned char) pg_op;
+ inqCmdBlk[4] = (unsigned char) (mx_resp_len & 0xff);
+ memset(&io_hdr, 0, sizeof (struct sg_io_hdr));
+
+ io_hdr.interface_id = 'S';
+ io_hdr.cmd_len = sizeof (inqCmdBlk);
+ io_hdr.mx_sb_len = sizeof (sense_b);
+ io_hdr.dxfer_direction = SG_DXFER_FROM_DEV;
+ io_hdr.dxfer_len = mx_resp_len;
+ io_hdr.dxferp = resp;
+ io_hdr.cmdp = inqCmdBlk;
+ io_hdr.sbp = sense_b;
+ io_hdr.timeout = DEF_TIMEOUT;
+
+ if (ioctl(sg_fd, SG_IO, &io_hdr) < 0)
+ return 1;
+
+ /* treat SG_ERR here to get rid of sg_err.[ch] */
+ io_hdr.status &= 0x7e;
+ if ((0 == io_hdr.status) && (0 == io_hdr.host_status) &&
+ (0 == io_hdr.driver_status))
+ return 0;
+ if ((SCSI_CHECK_CONDITION == io_hdr.status) ||
+ (SCSI_COMMAND_TERMINATED == io_hdr.status) ||
+ (SG_ERR_DRIVER_SENSE == (0xf & io_hdr.driver_status))) {
+ if (io_hdr.sbp && (io_hdr.sb_len_wr > 2)) {
+ int sense_key;
+ unsigned char * sense_buffer = io_hdr.sbp;
+ if (sense_buffer[0] & 0x2)
+ sense_key = sense_buffer[1] & 0xf;
+ else
+ sense_key = sense_buffer[2] & 0xf;
+ if (RECOVERED_ERROR == sense_key)
+ return 0;
+ }
+ }
+ return 1;
+}
+
+struct volume_access_inq
+{
+ char dontcare0[8];
+ char avtcvp;
+ char dontcare1[39];
+};
+
+extern int
+rdac(struct checker * c)
+{
+ struct volume_access_inq inq;
+
+ if (0 != do_inq(c->fd, 0xC9, &inq, sizeof(struct volume_access_inq))) {
+ MSG(c, MSG_RDAC_DOWN);
+ return PATH_DOWN;
+ }
+
+ return ((inq.avtcvp & 0x1) ? PATH_UP : PATH_GHOST);
+}
Index: multipath-tools-0.4.7/libcheckers/checkers.c
===================================================================
--- multipath-tools-0.4.7.orig/libcheckers/checkers.c 2006-03-13 03:07:45.000000000 -0800
+++ multipath-tools-0.4.7/libcheckers/checkers.c 2007-03-20 14:44:56.000000000 -0700
@@ -7,6 +7,7 @@
#include "tur.h"
#include "hp_sw.h"
#include "emc_clariion.h"
+#include "rdac.h"
#include "readsector0.h"
static struct checker checkers[] = {
@@ -48,6 +49,15 @@
},
{
.fd = 0,
+ .name = RDAC,
+ .message = "",
+ .context = NULL,
+ .check = rdac,
+ .init = rdac_init,
+ .free = rdac_free
+ },
+ {
+ .fd = 0,
.name = READSECTOR0,
.message = "",
.context = NULL,
Index: multipath-tools-0.4.7/libcheckers/rdac.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ multipath-tools-0.4.7/libcheckers/rdac.h 2007-03-20 14:43:58.000000000 -0700
@@ -0,0 +1,8 @@
+#ifndef _RDAC_H
+#define _RDAC_H
+
+int rdac(struct checker *);
+int rdac_init(struct checker *);
+void rdac_free(struct checker *);
+
+#endif /* _RDAC_H */
Index: multipath-tools-0.4.7/libcheckers/checkers.h
===================================================================
--- multipath-tools-0.4.7.orig/libcheckers/checkers.h 2006-03-13 03:07:45.000000000 -0800
+++ multipath-tools-0.4.7/libcheckers/checkers.h 2007-03-02 18:50:48.000000000 -0800
@@ -14,6 +14,7 @@
#define DIRECTIO "directio"
#define TUR "tur"
#define HP_SW "hp_sw"
+#define RDAC "rdac"
#define EMC_CLARIION "emc_clariion"
#define READSECTOR0 "readsector0"
--
----------------------------------------------------------------------
Chandra Seetharaman | Be careful what you choose....
- sekharan@us.ibm.com | .......you may get it.
----------------------------------------------------------------------
next prev parent reply other threads:[~2007-03-21 19:38 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-21 19:38 [PATCH 0/3] Changes to Userspace multipath code to support lsi-rdac Chandra Seetharaman
2007-03-21 19:38 ` Chandra Seetharaman [this message]
2007-03-21 19:38 ` [PATCH 2/3] Fix the priority calculation to use PATH_GHOST state Chandra Seetharaman
2007-03-21 19:38 ` [PATCH 3/3] Increase the wait time for device to appear in /dev Chandra Seetharaman
2007-03-21 23:06 ` [PATCH 0/3] Changes to Userspace multipath code to support lsi-rdac Christophe Varoqui
2007-03-22 22:52 ` Bernd Zeimetz
2007-03-22 23:45 ` Chandra Seetharaman
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=20070321193838.24487.83544.sendpatchset@localhost.localdomain \
--to=sekharan@us.ibm.com \
--cc=agk@redhat.com \
--cc=andmike@us.ibm.com \
--cc=christophe.varoqui@free.fr \
--cc=dm-devel@redhat.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 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.