scsi: aacraid: Added support for read medium error
authorRaghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
Thu, 2 Feb 2017 23:53:23 +0000 (15:53 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 3 Feb 2017 15:35:03 +0000 (10:35 -0500)
This patch processes Raw IO read medium errors.

Signed-off-by: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
Signed-off-by: Dave Carroll <David.Carroll@microsemi.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/aacraid/aachba.c
drivers/scsi/aacraid/aacraid.h

index 8fc06e3..b854c49 100644 (file)
@@ -62,6 +62,7 @@
 #define SENCODE_END_OF_DATA                    0x00
 #define SENCODE_BECOMING_READY                 0x04
 #define SENCODE_INIT_CMD_REQUIRED              0x04
+#define SENCODE_UNRECOVERED_READ_ERROR         0x11
 #define SENCODE_PARAM_LIST_LENGTH_ERROR                0x1A
 #define SENCODE_INVALID_COMMAND                        0x20
 #define SENCODE_LBA_OUT_OF_RANGE               0x21
@@ -1997,6 +1998,15 @@ static void io_callback(void *context, struct fib * fibptr)
                       min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data),
                             SCSI_SENSE_BUFFERSIZE));
                break;
+       case ST_MEDERR:
+               scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
+                       SAM_STAT_CHECK_CONDITION;
+               set_sense(&dev->fsa_dev[cid].sense_data, MEDIUM_ERROR,
+                 SENCODE_UNRECOVERED_READ_ERROR, ASENCODE_NO_SENSE, 0, 0);
+               memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
+                      min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data),
+                            SCSI_SENSE_BUFFERSIZE));
+               break;
        default:
 #ifdef AAC_DETAILED_STATUS_INFO
                printk(KERN_WARNING "io_callback: io failed, status = %d\n",
index d1f5a66..b54c1bf 100644 (file)
@@ -1462,6 +1462,7 @@ struct aac_dev
 #define                ST_IO           5
 #define                ST_NXIO         6
 #define                ST_E2BIG        7
+#define                ST_MEDERR       8
 #define                ST_ACCES        13
 #define                ST_EXIST        17
 #define                ST_XDEV         18