Blob Blame History Raw
From: Hannes Reinecke <hare@suse.de>
Date: Fri, 15 Jan 2016 14:25:25 +0100
Subject: megaraid_sas: boot hangs while LD is offline
Patch-mainline: submitted linux-scsi 2017/08/13
References: bnc#698102

Offline Logical drives (LDs) should not allowed to be visible
to the OS, as the OS will hang trying to send commands to it.
This patch skips offline LDs like it already does for
non-system physical drives (PDs).

Signed-off-by: Hannes Reinecke <hare@suse.com>
Cc: Sumit Saxena <sumit.saxena@broadcom.com>
Cc: Kashyap Desai <kashyap.desai@broadcom.com>
Cc: megaraidlinux.pdl@broadcom.com
---
 drivers/scsi/megaraid/megaraid_sas_base.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index 40e28aa..360e24f 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -1897,7 +1897,7 @@ static void megasas_set_static_target_properties(struct scsi_device *sdev,
 
 static int megasas_slave_configure(struct scsi_device *sdev)
 {
-	u16 pd_index = 0;
+	u16 pd_index = 0, ld_index;
 	struct megasas_instance *instance;
 	int ret_target_prop = DCMD_FAILED;
 	bool is_target_prop = false;
@@ -1911,6 +1911,12 @@ static int megasas_slave_configure(struct scsi_device *sdev)
 				MR_PD_STATE_SYSTEM)
 				return -ENXIO;
 		}
+		if (MEGASAS_IS_LOGICAL(sdev)) {
+			ld_index = ((sdev->channel - MEGASAS_MAX_PD_CHANNELS) *
+				    MEGASAS_MAX_DEV_PER_CHANNEL) + sdev->id;
+			if (instance->ld_ids[ld_index] == 0xff)
+				return -ENXIO;
+		}
 	}
 
 	mutex_lock(&instance->hba_mutex);
-- 
1.8.5.6