public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] dm mpath: Try recover from I/O failure by re-initializing the PG if device is running on one path
@ 2009-04-20 18:05 Moger, Babu
  2009-04-21  1:06 ` Kiyoshi Ueda
  2009-04-22 17:41 ` Grant Grundler
  0 siblings, 2 replies; 10+ messages in thread
From: Moger, Babu @ 2009-04-20 18:05 UTC (permalink / raw)
  To: 'dm-devel@redhat.com', linux-scsi@vger.kernel.org; +Cc: Chauhan, Vijay

This patch introduces the mechanism to recover from I/O failures by re-initializing the path if the device is running on only one path. 

Problem: Device mapper fails the path for every I/O error. It does not care about the type of error. There are certain errors which can be recovered by re-initializing the path again. I have seen this problem during my testing on rdac device handler. I have observed I/O errors when there is a change in Lun ownership. When Lun ownership changes device will return back with check condition with sense 0x05/0x94/0x01(SK/ASC/ASCQ -meaning Lun ownership changed). Currently, device mapper fails the path for this error and eventually this will lead to I/O error. We don't want to see I/O error for this reason. 

The patch will set the flag pg_init_required if the device is running on single path. The process_queued_ios will re-initialize path if required. I have tested this patch on LSI rdac handler.

Signed-off-by: Babu Moger <babu.moger@lsi.com>
---

--- linux-2.6.30-rc2/drivers/md/dm-mpath.c.orig	2009-04-17 16:49:33.000000000 -0500
+++ linux-2.6.30-rc2/drivers/md/dm-mpath.c	2009-04-17 17:09:51.000000000 -0500
@@ -1152,6 +1152,15 @@ static int do_end_io(struct multipath *m
 		return error;
 
 	spin_lock_irqsave(&m->lock, flags);
+	/*
+	 * If this is the only path left, then lets try to
+	 * re-initialize the PG one last time..
+	 */
+	if (m->nr_valid_paths == 1 && m->hw_handler_name) {
+		m->pg_init_required = 1;
+		spin_unlock_irqrestore(&m->lock, flags);
+		goto requeue;
+	}
 	if (!m->nr_valid_paths) {
 		if (__must_push_back(m)) {
 			spin_unlock_irqrestore(&m->lock, flags);

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2009-04-22 19:29 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-20 18:05 [PATCH] dm mpath: Try recover from I/O failure by re-initializing the PG if device is running on one path Moger, Babu
2009-04-21  1:06 ` Kiyoshi Ueda
2009-04-21 17:06   ` Moger, Babu
2009-04-22  1:52     ` Kiyoshi Ueda
2009-04-22 14:03       ` Moger, Babu
2009-04-22 17:33         ` Chandra Seetharaman
2009-04-22 17:43           ` Moger, Babu
2009-04-22 17:41 ` Grant Grundler
2009-04-22 18:16   ` Moger, Babu
2009-04-22 19:29   ` Chandra Seetharaman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox