diff options
| -rw-r--r-- | drivers/scsi/aacraid/aachba.c | 18 | 
1 files changed, 16 insertions, 2 deletions
| diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c index 24b1ba06ece4..fdc7d9935aeb 100644 --- a/drivers/scsi/aacraid/aachba.c +++ b/drivers/scsi/aacraid/aachba.c @@ -2693,8 +2693,22 @@ static void aac_srb_callback(void *context, struct fib * fibptr)  			scsicmd->cmnd[0],  			le32_to_cpu(srbreply->scsi_status));  #endif -		scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8; -		break; +		if ((scsicmd->cmnd[0] == ATA_12) +		  || (scsicmd->cmnd[0] == ATA_16)) { +			if (scsicmd->cmnd[2] & (0x01 << 5)) { +				scsicmd->result = DID_OK << 16 +						| COMMAND_COMPLETE << 8; +				break; +			} else { +				scsicmd->result = DID_ERROR << 16 +						| COMMAND_COMPLETE << 8; +				break; +			} +		} else { +			scsicmd->result = DID_ERROR << 16 +					| COMMAND_COMPLETE << 8; +			break; +		}  	}  	if (le32_to_cpu(srbreply->scsi_status) == SAM_STAT_CHECK_CONDITION) {  		int len; | 
