hpsa: do not unconditionally copy sense data
authorRobert Elliott <elliott@hp.com>
Thu, 3 Jul 2014 15:18:19 +0000 (10:18 -0500)
committerChristoph Hellwig <hch@lst.de>
Fri, 25 Jul 2014 21:17:00 +0000 (17:17 -0400)
Signed-off-by: Robert Elliott <elliott@hp.com>
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Reviewed-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/scsi/hpsa.c

index 6edd2aa..10aed7d 100644 (file)
@@ -1708,7 +1708,14 @@ static void complete_scsi_command(struct CommandList *cp)
 
        cmd->result |= ei->ScsiStatus;
 
-       /* copy the sense data whether we need to or not. */
+       scsi_set_resid(cmd, ei->ResidualCnt);
+       if (ei->CommandStatus == 0) {
+               cmd_free(h, cp);
+               cmd->scsi_done(cmd);
+               return;
+       }
+
+       /* copy the sense data */
        if (SCSI_SENSE_BUFFERSIZE < sizeof(ei->SenseInfo))
                sense_data_size = SCSI_SENSE_BUFFERSIZE;
        else
@@ -1717,13 +1724,6 @@ static void complete_scsi_command(struct CommandList *cp)
                sense_data_size = ei->SenseLen;
 
        memcpy(cmd->sense_buffer, ei->SenseInfo, sense_data_size);
-       scsi_set_resid(cmd, ei->ResidualCnt);
-
-       if (ei->CommandStatus == 0) {
-               cmd_free(h, cp);
-               cmd->scsi_done(cmd);
-               return;
-       }
 
        /* For I/O accelerator commands, copy over some fields to the normal
         * CISS header used below for error handling.