Bug#555901: Update multipath-tools to fix "rdac path checked leads to I/O hang when volumes are unmapped from storage."
Bernd Zeimetz
bernd at bzed.de
Thu Nov 12 13:42:08 UTC 2009
Package: multipath-tools
Version: 0.4.8-15.1
Severity: normal
Hi,
the following bug report and patch was posted on dm-devel some days ago, please
update the package in Debian when the fix hits upstream's git. I'll be happy to
work on a backport if you want me to.
Cheers,
Bernd
-------- Original Message --------
Subject: [dm-devel] [Patch] multipath-tools: rdac path checked leads to I/O hang
when volumes are unmapped from storage.
Date: Tue, 20 Oct 2009 18:39:15 +0530
From: Chauhan, Vijay <Vijay.Chauhan at lsi.com>
Reply-To: device-mapper development <dm-devel at redhat.com>
To: device-mapper development <dm-devel at redhat.com>,
"christophe.varoqui at free.fr" <christophe.varoqui at free.fr>
CC: Dachepalli, Sudhir <Sudhir.Dachepalli at lsi.com>,
sekharan at linux.vnet.ibm.com <sekharan at linux.vnet.ibm.com>, Moger, Babu
<Babu.Moger at lsi.com>
Hi,
We are seeing I/O hang when volumes (configured with rdac path checker) are
unmapped from the storage. Expected is I/O should fail. Please see the syslog
snippet below:
Oct 15 14:40:43 linux kernel: sd 6:0:0:0: queueing MODE_SELECT command.
Oct 15 14:40:43 linux kernel: sd 6:0:0:0: MODE_SELECT failed with sense 0x59100.
Oct 15 14:40:43 linux kernel: end_request: I/O error, dev sdh, sector 18509824
Oct 15 14:40:43 linux kernel: device-mapper: multipath: Failing path 8:112.
Oct 15 14:40:43 linux kernel: end_request: I/O error, dev sdh, sector 0
Oct 15 14:40:43 linux kernel: end_request: I/O error, dev sdh, sector 18512896
Oct 15 14:40:43 linux kernel: end_request: I/O error, dev sdh, sector 18511872
Oct 15 14:40:43 linux kernel: end_request: I/O error, dev sdh, sector 18510848
Oct 15 14:40:43 linux multipathd: 8:112: mark as failed
Oct 15 14:40:43 linux multipathd: 3600a0b800029ea52000097bc4acde51e: Entering
recovery mode: max_retries=30
Oct 15 14:40:44 linux multipathd: 3600a0b800029eb0a0000f2af4acde4d1:
queue_if_no_path enabled
Oct 15 14:40:44 linux multipathd: 3600a0b800029eb0a0000f2af4acde4d1: Recovered
to normal mode
Oct 15 14:40:44 linux kernel: sd 5:0:0:1: queueing MODE_SELECT command.
Oct 15 14:40:44 linux kernel: sd 5:0:0:1: MODE_SELECT failed with sense 0x59100.
Oct 15 14:40:44 linux kernel: end_request: I/O error, dev sdc, sector 0
Oct 15 14:40:44 linux kernel: device-mapper: multipath: Failing path 8:32.
Oct 15 14:40:44 linux kernel: end_request: I/O error, dev sdc, sector 16089088
Oct 15 14:40:44 linux kernel: end_request: I/O error, dev sdc, sector 16090112
Oct 15 14:40:44 linux kernel: end_request: I/O error, dev sdc, sector 16091136
Oct 15 14:40:44 linux kernel: end_request: I/O error, dev sdc, sector 16092160
Oct 15 14:40:44 linux multipathd: 8:32: mark as failed
Below is the patch that fix this issue. When devices are unmapped from storage,
rdac patch checker sets the path state for those devices as ghost. As a reason
dm issues mode select to failover path group and fails with 0x59100, which
eventually ends up with ping pong between path groups resulting in I/O hang. In
rdac path checker, we need to check if devices are not connected, mark it as
failed. This patch adds check for Peripheral Qualifier (PQ) & Peripheral Device
type(PDT) of Inquiry data and fails the path if either 1) PQ is set to 0x1 or 2)
PQ set to 0x11 and PDT set to 0x1F.
Signed-off-by: Vijay Chauhan <vijay.chauhan at lsi.com>
Reviewed-by: Babu Moger <babu.moger at lsi.com>
---
--- multipath-tools/libmultipath/checkers/rdac.c.orig 2009-10-20
23:01:50.000000000 +0530
+++ multipath-tools/libmultipath/checkers/rdac.c 2009-10-20 23:49:31.000000000 +0530
@@ -91,7 +91,8 @@ do_inq(int sg_fd, unsigned int pg_op, vo
struct volume_access_inq
{
- char dontcare0[8];
+ char PQ_PDT;
+ char dontcare0[7];
char avtcvp;
char dontcare1[39];
};
@@ -105,6 +106,11 @@ libcheck_check (struct checker * c)
if (0 != do_inq(c->fd, 0xC9, &inq, sizeof(struct volume_access_inq))) {
MSG(c, MSG_RDAC_DOWN);
return PATH_DOWN;
+ } else {
+ if ((inq.PQ_PDT & 0x20) || (inq.PQ_PDT & 0x7f)) {
+ /* LUN not connected*/
+ return PATH_DOWN;
+ }
}
if (inq.avtcvp & 0x1) {
--
--
dm-devel mailing list
dm-devel at redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
--
Bernd Zeimetz Debian GNU/Linux Developer
http://bzed.de http://www.debian.org
GPG Fingerprints: 06C8 C9A2 EAAD E37E 5B2C BE93 067A AD04 C93B FF79
ECA1 E3F2 8E11 2432 D485 DD95 EB36 171A 6FF9 435F
More information about the pkg-lvm-maintainers
mailing list