diff options
author | Moger, Babu <Babu.Moger@lsi.com> | 2011-04-08 13:39:30 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2011-05-01 11:47:41 -0400 |
commit | 3425fbfe2293244abba72c80b215d09ead32d1ad (patch) | |
tree | a0d9107f9d4fe3a235ad2cb24decd243114c4e1f | |
parent | 1c3afc423460035a6c2d0e4f01217e953bad3fd7 (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.c | 17 |
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 4efe638036f..e7fc70d6b47 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; |