modprobe dm-multipath fastfailbit=0
//seting it off
modprobe dm-multipath fastfailbit=1
//seting it on
Vijay Kumar
[Kumar, Vijay (STSD)]
mailto:
vijay.kumar7@xxxxxx
From: dm-devel-bounces@xxxxxxxxxx [mailto:dm-devel-bounces@xxxxxxxxxx] On Behalf Of Kumar, Vijay (STSD)
Sent: Wednesday, September 26, 2007 12:18 AM
To: device-mapper development; christophe.varoqui@xxxxxxx
Subject: Enabling/disabling BIO_RW_FAILFAST at load timeHi Christophe and All,
During I/O on a path, the paths are marked as failed at DM Multipath, when the I/O returns with Error status as 0x20000 (host code 0x2 denotes DID_BUS_BUSY). What we understand here is, since I/O on multipath devices have BIO_RW_FAILFAST set(hence REQ_FASTFAIL ), retries are not allowed at SCSI mid layer for errors such as QUEUEFULL, UNDERRUN....(as captured in the below syslog snippet)syslog snippet
*******************
May 23 16:51:49 lnx kernel: sd 2:0:3:8: SCSI error: return code = 0x20000
May 23 16:51:49 lnx kernel: end_request: I/O error, dev sdfg, sector 4188002
May 23 16:51:49 lnx kernel: end_request: I/O error, dev sdfg, sector 4188008
May 23 16:51:49 lnx kernel: device-mapper: dm-multipath: Failing path 130:32.
May 23 16:51:49 lnx kernel: sd 2:0:3:8: SCSI error: return code = 0x20000
May 23 16:51:49 lnx kernel: end_request: I/O error, dev sdfg, sector 4188302
May 23 16:51:49 lnx kernel: end_request: I/O error, dev sdfg, sector 4188303
May 23 16:52:00 lnx kernel: sd 1:0:2:12: SCSI error: return code = 0x20000As an option we can have user configurable BIO_RW_FAILFAST for enabling and disabling which allows scsi mid layer to retry for I/0 . Below is the patch for passing parameter at load time with DM multipath module for enabling/disabling BIO_RW_FAILFAST flag.
* Flag can be set On/Off as follows
modprobe dm-multipath fastfailbit=0 //seting it off
modprobe dm-multipath fastfailbit=0 //seting it on* By default the flag is kept on.
It can also be set from modprobe.conf as :
options dm_multipath fastfailbit=0
Please comment !!
***************************************
diff -Naur linux-2.6.18.x86_64-orig/drivers/md/dm-mpath.c linux-
2.6.18.x86_64/drivers/md/dm-mpath.c
--- linux-2.6.18.x86_64-orig/drivers/md/dm-mpath.c 2007-08-27
02:18:51.000000000 +0530
+++ linux-2.6.18.x86_64/drivers/md/dm-mpath.c 2007-09-12 16:02:29.000000000
+0530
@@ -19,6 +19,7 @@
#include <linux/slab.h>
#include <linux/time.h>
#include <linux/workqueue.h>
+#include <linux/moduleparam.h>
#include <asm/atomic.h>#define DM_MSG_PREFIX "multipath"
@@ -107,6 +108,7 @@
static void process_queued_ios(void *data);
static void trigger_event(void *data);+static int fastfailbit = 1; /*fastfail bit set on by default*/
/*-----------------------------------------------
* Allocation routines
@@ -800,7 +802,7 @@
dm_bio_record(&mpio->details, bio);map_context->ptr = mpio;
- bio->bi_rw |= (1 << BIO_RW_FAILFAST);
+ bio->bi_rw |= (fastfailbit << BIO_RW_FAILFAST);
r = map_io(m, bio, mpio, 0);
if (r < 0 || r == DM_MAPIO_REQUEUE)
mempool_free(mpio, m->mpio_pool);
@@ -1340,6 +1342,10 @@
{
int r;+ /* validating fastfailbit */
+ if(fastfailbit)
+ fastfailbit=1;
+
/* allocate a slab for the dm_ios */
_mpio_cache = kmem_cache_create("dm_mpath", sizeof(struct mpath_io),
0, 0, NULL, NULL);
@@ -1387,6 +1393,8 @@
module_init(dm_multipath_init);
module_exit(dm_multipath_exit);+module_param(fastfailbit, int, 0);
+MODULE_PARM_DESC(fastfailbit, "FASTFAIL bit flag ");
MODULE_DESCRIPTION(DM_NAME " multipath target");
MODULE_AUTHOR("Sistina Software <dm-devel@xxxxxxxxxx>");
MODULE_LICENSE("GPL");******************************
Thanks,Vijay Kumar
[Kumar, Vijay (STSD)]
mailto: vijay.kumar7@xxxxxx
-- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel