multipath failures normally detected at the frequency of
the event thread.

 - detect LUN failures earlier by checking request
   completion status

Reviewed-by: Bader Ali-saleh <bader.ali-sa...@microsemi.com>
Reviewed-by: Scott Benesh <scott.ben...@microsemi.com>
Reviewed-by: Scott Teel <scott.t...@microsemi.com>
Reviewed-by: Prasad Munirathnam <prasad.munirath...@microsemi.com>
Reviewed-by: Kevin Barnett <kevin.barn...@microsemi.com>
Signed-off-by: Don Brace <don.br...@microsemi.com>
---
 drivers/scsi/hpsa.c |   13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index f044e7d10d63..f311ab259a02 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -2647,9 +2647,20 @@ static void complete_scsi_command(struct CommandList *cp)
                        decode_sense_data(ei->SenseInfo, sense_data_size,
                                &sense_key, &asc, &ascq);
                if (ei->ScsiStatus == SAM_STAT_CHECK_CONDITION) {
-                       if (sense_key == ABORTED_COMMAND) {
+                       switch (sense_key) {
+                       case ABORTED_COMMAND:
                                cmd->result |= DID_SOFT_ERROR << 16;
                                break;
+                       case UNIT_ATTENTION:
+                               if (asc == 0x3F && ascq == 0x0E)
+                                       h->drv_req_rescan = 1;
+                               break;
+                       case ILLEGAL_REQUEST:
+                               if (asc == 0x25 && ascq == 0x00) {
+                                       dev->removed = 1;
+                                       cmd->result = DID_NO_CONNECT << 16;
+                               }
+                               break;
                        }
                        break;
                }

Reply via email to