aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMoger, Babu <Babu.Moger@lsi.com>2011-04-08 13:39:30 -0400
committerJames Bottomley <James.Bottomley@suse.de>2011-05-01 11:47:41 -0400
commit3425fbfe2293244abba72c80b215d09ead32d1ad (patch)
treea0d9107f9d4fe3a235ad2cb24decd243114c4e1f
parent1c3afc423460035a6c2d0e4f01217e953bad3fd7 (diff)
[SCSI] scsi_dh_rdac : decide whether to send mode select 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> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
-rw-r--r--drivers/scsi/device_handler/scsi_dh_rdac.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c b/drivers/scsi/device_handler/scsi_dh_rdac.c
index 4efe638036f6..e7fc70d6b478 100644
--- a/drivers/scsi/device_handler/scsi_dh_rdac.c
+++ b/drivers/scsi/device_handler/scsi_dh_rdac.c
@@ -670,12 +670,27 @@ static int rdac_activate(struct scsi_device *sdev,
670{ 670{
671 struct rdac_dh_data *h = get_rdac_data(sdev); 671 struct rdac_dh_data *h = get_rdac_data(sdev);
672 int err = SCSI_DH_OK; 672 int err = SCSI_DH_OK;
673 int act = 0;
673 674
674 err = check_ownership(sdev, h); 675 err = check_ownership(sdev, h);
675 if (err != SCSI_DH_OK) 676 if (err != SCSI_DH_OK)
676 goto done; 677 goto done;
677 678
678 if (h->lun_state == RDAC_LUN_UNOWNED) { 679 switch (h->mode) {
680 case RDAC_MODE:
681 if (h->lun_state == RDAC_LUN_UNOWNED)
682 act = 1;
683 break;
684 case RDAC_MODE_IOSHIP:
685 if ((h->lun_state == RDAC_LUN_UNOWNED) &&
686 (h->preferred == RDAC_PREFERRED))
687 act = 1;
688 break;
689 default:
690 break;
691 }
692
693 if (act) {
679 err = queue_mode_select(sdev, fn, data); 694 err = queue_mode_select(sdev, fn, data);
680 if (err == SCSI_DH_OK) 695 if (err == SCSI_DH_OK)
681 return 0; 696 return 0;