aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-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 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;