Commit a9d2d806 authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Martin K. Petersen
Browse files

scsi: acornscsi: Translate message byte to host byte

Instead of setting the message byte translate it to the appropriate host
byte. As error recovery would return DID_ERROR for any non-zero message
byte the translation doesn't change the error handling.  And use SCSI
result accessors while we're at it.

Link: https://lore.kernel.org/r/20210427083046.31620-29-hare@suse.de


Signed-off-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 3c969131
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -794,7 +794,10 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,

	acornscsi_dma_cleanup(host);

	SCpnt->result = result << 16 | host->scsi.SCp.Message << 8 | host->scsi.SCp.Status;
	set_host_byte(SCpnt, result);
	if (result == DID_OK)
		scsi_msg_to_host_byte(SCpnt, host->scsi.SCp.Message);
	set_status_byte(SCpnt, host->scsi.SCp.Status);

	/*
	 * In theory, this should not happen.  In practice, it seems to.
@@ -833,12 +836,12 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,
			xfer_warn = 0;

		if (xfer_warn) {
		    switch (status_byte(SCpnt->result)) {
		    case CHECK_CONDITION:
		    case COMMAND_TERMINATED:
		    case BUSY:
		    case QUEUE_FULL:
		    case RESERVATION_CONFLICT:
		    switch (get_status_byte(SCpnt)) {
		    case SAM_STAT_CHECK_CONDITION:
		    case SAM_STAT_COMMAND_TERMINATED:
		    case SAM_STAT_BUSY:
		    case SAM_STAT_TASK_SET_FULL:
		    case SAM_STAT_RESERVATION_CONFLICT:
			break;

		    default:
@@ -2470,7 +2473,7 @@ static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt,
    if (acornscsi_cmdtype(SCpnt->cmnd[0]) == CMD_WRITE && (NO_WRITE & (1 << SCpnt->device->id))) {
	printk(KERN_CRIT "scsi%d.%c: WRITE attempted with NO_WRITE flag set\n",
	    host->host->host_no, '0' + SCpnt->device->id);
	SCpnt->result = DID_NO_CONNECT << 16;
	set_host_byte(SCpnt, DID_NO_CONNECT);
	done(SCpnt);
	return 0;
    }
@@ -2492,7 +2495,7 @@ static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt,
	unsigned long flags;

	if (!queue_add_cmd_ordered(&host->queues.issue, SCpnt)) {
	    SCpnt->result = DID_ERROR << 16;
		set_host_byte(SCpnt, DID_ERROR);
	    done(SCpnt);
	    return 0;
	}