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

scsi: wd33c93: 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.

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


Signed-off-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 0e00ba73
Loading
Loading
Loading
Loading
+23 −20
Original line number Diff line number Diff line
@@ -1176,13 +1176,13 @@ wd33c93_intr(struct Scsi_Host *instance)
			if (cmd->SCp.Status == ILLEGAL_STATUS_BYTE)
				cmd->SCp.Status = lun;
			if (cmd->cmnd[0] == REQUEST_SENSE
			    && cmd->SCp.Status != SAM_STAT_GOOD)
				cmd->result =
				    (cmd->
				     result & 0x00ffff) | (DID_ERROR << 16);
			else
				cmd->result =
				    cmd->SCp.Status | (cmd->SCp.Message << 8);
			    && cmd->SCp.Status != SAM_STAT_GOOD) {
				set_host_byte(cmd, DID_ERROR);
			} else {
				set_host_byte(cmd, DID_OK);
				scsi_msg_to_host_byte(cmd, cmd->SCp.Message);
				set_status_byte(cmd, cmd->SCp.Status);
			}
			cmd->scsi_done(cmd);

/* We are no longer  connected to a target - check to see if
@@ -1262,11 +1262,14 @@ wd33c93_intr(struct Scsi_Host *instance)
		    hostdata->connected = NULL;
		hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
		hostdata->state = S_UNCONNECTED;
		if (cmd->cmnd[0] == REQUEST_SENSE && cmd->SCp.Status != SAM_STAT_GOOD)
			cmd->result =
			    (cmd->result & 0x00ffff) | (DID_ERROR << 16);
		else
			cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8);
		if (cmd->cmnd[0] == REQUEST_SENSE &&
		    cmd->SCp.Status != SAM_STAT_GOOD) {
			set_host_byte(cmd, DID_ERROR);
		} else {
			set_host_byte(cmd, DID_OK);
			scsi_msg_to_host_byte(cmd, cmd->SCp.Message);
			set_status_byte(cmd, cmd->SCp.Status);
		}
		cmd->scsi_done(cmd);

/* We are no longer connected to a target - check to see if
@@ -1296,13 +1299,13 @@ wd33c93_intr(struct Scsi_Host *instance)
			hostdata->state = S_UNCONNECTED;
			DB(DB_INTR, printk(":%d", cmd->SCp.Status))
			if (cmd->cmnd[0] == REQUEST_SENSE
				&& cmd->SCp.Status != SAM_STAT_GOOD)
				cmd->result =
				    (cmd->
				     result & 0x00ffff) | (DID_ERROR << 16);
			else
				cmd->result =
				    cmd->SCp.Status | (cmd->SCp.Message << 8);
			    && cmd->SCp.Status != SAM_STAT_GOOD) {
				set_host_byte(cmd, DID_ERROR);
			} else {
				set_host_byte(cmd, DID_OK);
				scsi_msg_to_host_byte(cmd, cmd->SCp.Message);
				set_status_byte(cmd, cmd->SCp.Status);
			}
			cmd->scsi_done(cmd);
			break;
		case S_PRE_TMP_DISC: