b0ec4a42c8
Modify 0021-RHBZ-548874-add-find-multipaths.patch Modify 0022-RHBZ-557845-RHEL5-style-partitions.patch Add 0025-RHBZ-508827-update-multipathd-manpage.patch through 0101-RHBZ-631009-disable-udev-disk-rules-on-reload.patch * sync with current state of RHEL6. Next release should include a updated source tarball with most of these fixes rolled in. Add 0102-RHBZ-690828-systemd-unit-file.patch * Add Jóhann B. Guðmundsson's unit file for systemd. * Add sub-package sysvinit for SysV init script. Resolves: bz #690828
65 lines
2.1 KiB
Diff
65 lines
2.1 KiB
Diff
From patchwork Tue Mar 1 19:08:24 2011
|
|
Content-Type: text/plain; charset="utf-8"
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 7bit
|
|
Subject: multipath: Retry host transient errors for rdac checker
|
|
Date: Tue, 01 Mar 2011 19:08:24 -0000
|
|
From: Moger, Babu <Babu.Moger@lsi.com>
|
|
X-Patchwork-Id: 600411
|
|
Message-Id: <E463DF2B2E584B4A82673F53D62C2EF4FF7DC637@cosmail01.lsi.com>
|
|
To: "dm-devel@redhat.com" <dm-devel@redhat.com>
|
|
|
|
Sometimes if the host is in transient state, we need to wait till the devloss timeout to
|
|
expire before switching path group. We have seen in some cases path group switch happens
|
|
even before the devloss timeout expire. This patch fixes the problem for rdac checker..
|
|
|
|
Signed-off-by: Babu Moger <babu.moger@lsi.com>
|
|
|
|
---
|
|
--
|
|
dm-devel mailing list
|
|
dm-devel@redhat.com
|
|
https://www.redhat.com/mailman/listinfo/dm-devel
|
|
|
|
---
|
|
libmultipath/checkers/rdac.c | 18 ++++++++++++++++++
|
|
1 file changed, 18 insertions(+)
|
|
|
|
Index: multipath-tools/libmultipath/checkers/rdac.c
|
|
===================================================================
|
|
--- multipath-tools.orig/libmultipath/checkers/rdac.c
|
|
+++ multipath-tools/libmultipath/checkers/rdac.c
|
|
@@ -48,7 +48,9 @@ do_inq(int sg_fd, unsigned int pg_op, vo
|
|
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;
|
|
+ int retry_rdac = 5;
|
|
|
|
+retry:
|
|
inqCmdBlk[2] = (unsigned char) pg_op;
|
|
inqCmdBlk[4] = (unsigned char) (mx_resp_len & 0xff);
|
|
memset(&io_hdr, 0, sizeof (struct sg_io_hdr));
|
|
@@ -72,6 +74,22 @@ do_inq(int sg_fd, unsigned int pg_op, vo
|
|
if ((0 == io_hdr.status) && (0 == io_hdr.host_status) &&
|
|
(0 == io_hdr.driver_status))
|
|
return 0;
|
|
+
|
|
+ /* check if we need to retry this error */
|
|
+ if (io_hdr.info & SG_INFO_OK_MASK) {
|
|
+ switch (io_hdr.host_status) {
|
|
+ case DID_BUS_BUSY:
|
|
+ case DID_ERROR:
|
|
+ case DID_TRANSPORT_DISRUPTED:
|
|
+ /* Transport error, retry */
|
|
+ if (--retry_rdac)
|
|
+ goto retry;
|
|
+ break;
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
if ((SCSI_CHECK_CONDITION == io_hdr.status) ||
|
|
(SCSI_COMMAND_TERMINATED == io_hdr.status) ||
|
|
(SG_ERR_DRIVER_SENSE == (0xf & io_hdr.driver_status))) {
|