[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[dm-devel] [PATCH 3/3] scsi_dh_rdac : decide on whether to send mode select or not based on operating mode



Based on the operating modes, handler decides whether to send mode select or not. Purpose here is to reduce
io-shipping as much as possible whenever there is an option.

Signed-off-by: Babu Moger <babu moger lsi com>
Reviewed-by: Yanling Qi <yanling qi lsi com> 
Reviewed-by: Sudhir Dachepalli <Sudhir Dachepalli lis com>
Reviewed-by: Somasundaram Krishnasamy <Somasundaram Krishnasamy lsi com>
Reviewed-by: Bob Stankey <Robert Stankey lsi com>
Reviewed-by: Vijay Chauhan <Vijay Chauhan lsi com>

---
--- linux-2.6.38/drivers/scsi/device_handler/scsi_dh_rdac.c.orig	2011-03-17 16:57:51.000000000 -0500
+++ linux-2.6.38/drivers/scsi/device_handler/scsi_dh_rdac.c	2011-03-17 16:59:11.000000000 -0500
@@ -670,12 +670,27 @@ static int rdac_activate(struct scsi_dev
 {
 	struct rdac_dh_data *h = get_rdac_data(sdev);
 	int err = SCSI_DH_OK;
+	int act = 0;
 
 	err = check_ownership(sdev, h);
 	if (err != SCSI_DH_OK)
 		goto done;
 
-	if (h->lun_state == RDAC_LUN_UNOWNED) {
+	switch (h->mode) {
+	case RDAC_MODE:
+		if (h->lun_state == RDAC_LUN_UNOWNED)
+			act = 1;
+		break;
+	case RDAC_MODE_IOSHIP:
+		if ((h->lun_state == RDAC_LUN_UNOWNED) &&
+		    (h->preferred == RDAC_PREFERRED))
+			act = 1;
+		break;
+	default:
+		break;
+	}
+
+	if (act) {
 		err = queue_mode_select(sdev, fn, data);
 		if (err == SCSI_DH_OK)
 			return 0;




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]