mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 14:12:06 +00:00
scsi: core: check for equality of result byte values
When evaluating a SCSI command's result using the field access macros, check for equality of the fields and not if a specific bit is set. This is a preparation patch, for reworking the results field in the SCSI command. Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Bart Van Assche <bart.vanassche@wdc.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
8e1695a07c
commit
c65be1a63f
@ -199,7 +199,7 @@ ch_do_scsi(scsi_changer *ch, unsigned char *cmd, int cmd_len,
|
|||||||
buflength, &sshdr, timeout * HZ,
|
buflength, &sshdr, timeout * HZ,
|
||||||
MAX_RETRIES, NULL);
|
MAX_RETRIES, NULL);
|
||||||
|
|
||||||
if (driver_byte(result) & DRIVER_SENSE) {
|
if (driver_byte(result) == DRIVER_SENSE) {
|
||||||
if (debug)
|
if (debug)
|
||||||
scsi_print_sense_hdr(ch->device, ch->name, &sshdr);
|
scsi_print_sense_hdr(ch->device, ch->name, &sshdr);
|
||||||
errno = ch_find_errno(&sshdr);
|
errno = ch_find_errno(&sshdr);
|
||||||
|
@ -3473,9 +3473,8 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
|
|||||||
|
|
||||||
/*if( srb->cmd->cmnd[0] == INQUIRY && */
|
/*if( srb->cmd->cmnd[0] == INQUIRY && */
|
||||||
/* (host_byte(cmd->result) == DID_OK || status_byte(cmd->result) & CHECK_CONDITION) ) */
|
/* (host_byte(cmd->result) == DID_OK || status_byte(cmd->result) & CHECK_CONDITION) ) */
|
||||||
if ((cmd->result == (DID_OK << 16)
|
if ((cmd->result == (DID_OK << 16) ||
|
||||||
|| status_byte(cmd->result) &
|
status_byte(cmd->result) == CHECK_CONDITION)) {
|
||||||
CHECK_CONDITION)) {
|
|
||||||
if (!dcb->init_tcq_flag) {
|
if (!dcb->init_tcq_flag) {
|
||||||
add_dev(acb, dcb, ptr);
|
add_dev(acb, dcb, ptr);
|
||||||
dcb->init_tcq_flag = 1;
|
dcb->init_tcq_flag = 1;
|
||||||
|
@ -162,7 +162,7 @@ void scsi_log_completion(struct scsi_cmnd *cmd, int disposition)
|
|||||||
(level > 1)) {
|
(level > 1)) {
|
||||||
scsi_print_result(cmd, "Done", disposition);
|
scsi_print_result(cmd, "Done", disposition);
|
||||||
scsi_print_command(cmd);
|
scsi_print_command(cmd);
|
||||||
if (status_byte(cmd->result) & CHECK_CONDITION)
|
if (status_byte(cmd->result) == CHECK_CONDITION)
|
||||||
scsi_print_sense(cmd);
|
scsi_print_sense(cmd);
|
||||||
if (level > 3)
|
if (level > 3)
|
||||||
scmd_printk(KERN_INFO, cmd,
|
scmd_printk(KERN_INFO, cmd,
|
||||||
|
@ -100,8 +100,8 @@ static int ioctl_internal_command(struct scsi_device *sdev, char *cmd,
|
|||||||
SCSI_LOG_IOCTL(2, sdev_printk(KERN_INFO, sdev,
|
SCSI_LOG_IOCTL(2, sdev_printk(KERN_INFO, sdev,
|
||||||
"Ioctl returned 0x%x\n", result));
|
"Ioctl returned 0x%x\n", result));
|
||||||
|
|
||||||
if ((driver_byte(result) & DRIVER_SENSE) &&
|
if (driver_byte(result) == DRIVER_SENSE &&
|
||||||
(scsi_sense_valid(&sshdr))) {
|
scsi_sense_valid(&sshdr)) {
|
||||||
switch (sshdr.sense_key) {
|
switch (sshdr.sense_key) {
|
||||||
case ILLEGAL_REQUEST:
|
case ILLEGAL_REQUEST:
|
||||||
if (cmd[0] == ALLOW_MEDIUM_REMOVAL)
|
if (cmd[0] == ALLOW_MEDIUM_REMOVAL)
|
||||||
|
@ -911,7 +911,7 @@ static void scsi_io_completion_action(struct scsi_cmnd *cmd, int result)
|
|||||||
*/
|
*/
|
||||||
if (!level && __ratelimit(&_rs)) {
|
if (!level && __ratelimit(&_rs)) {
|
||||||
scsi_print_result(cmd, NULL, FAILED);
|
scsi_print_result(cmd, NULL, FAILED);
|
||||||
if (driver_byte(result) & DRIVER_SENSE)
|
if (driver_byte(result) == DRIVER_SENSE)
|
||||||
scsi_print_sense(cmd);
|
scsi_print_sense(cmd);
|
||||||
scsi_print_command(cmd);
|
scsi_print_command(cmd);
|
||||||
}
|
}
|
||||||
@ -2605,7 +2605,7 @@ scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
|
|||||||
* ILLEGAL REQUEST if the code page isn't supported */
|
* ILLEGAL REQUEST if the code page isn't supported */
|
||||||
|
|
||||||
if (use_10_for_ms && !scsi_status_is_good(result) &&
|
if (use_10_for_ms && !scsi_status_is_good(result) &&
|
||||||
(driver_byte(result) & DRIVER_SENSE)) {
|
driver_byte(result) == DRIVER_SENSE) {
|
||||||
if (scsi_sense_valid(sshdr)) {
|
if (scsi_sense_valid(sshdr)) {
|
||||||
if ((sshdr->sense_key == ILLEGAL_REQUEST) &&
|
if ((sshdr->sense_key == ILLEGAL_REQUEST) &&
|
||||||
(sshdr->asc == 0x20) && (sshdr->ascq == 0)) {
|
(sshdr->asc == 0x20) && (sshdr->ascq == 0)) {
|
||||||
|
@ -614,7 +614,7 @@ static int scsi_probe_lun(struct scsi_device *sdev, unsigned char *inq_result,
|
|||||||
* INQUIRY should not yield UNIT_ATTENTION
|
* INQUIRY should not yield UNIT_ATTENTION
|
||||||
* but many buggy devices do so anyway.
|
* but many buggy devices do so anyway.
|
||||||
*/
|
*/
|
||||||
if ((driver_byte(result) & DRIVER_SENSE) &&
|
if (driver_byte(result) == DRIVER_SENSE &&
|
||||||
scsi_sense_valid(&sshdr)) {
|
scsi_sense_valid(&sshdr)) {
|
||||||
if ((sshdr.sense_key == UNIT_ATTENTION) &&
|
if ((sshdr.sense_key == UNIT_ATTENTION) &&
|
||||||
((sshdr.asc == 0x28) ||
|
((sshdr.asc == 0x28) ||
|
||||||
|
@ -136,7 +136,7 @@ static int spi_execute(struct scsi_device *sdev, const void *cmd,
|
|||||||
REQ_FAILFAST_TRANSPORT |
|
REQ_FAILFAST_TRANSPORT |
|
||||||
REQ_FAILFAST_DRIVER,
|
REQ_FAILFAST_DRIVER,
|
||||||
0, NULL);
|
0, NULL);
|
||||||
if (!(driver_byte(result) & DRIVER_SENSE) ||
|
if (driver_byte(result) != DRIVER_SENSE ||
|
||||||
sshdr->sense_key != UNIT_ATTENTION)
|
sshdr->sense_key != UNIT_ATTENTION)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1635,7 +1635,7 @@ static int sd_sync_cache(struct scsi_disk *sdkp, struct scsi_sense_hdr *sshdr)
|
|||||||
if (res) {
|
if (res) {
|
||||||
sd_print_result(sdkp, "Synchronize Cache(10) failed", res);
|
sd_print_result(sdkp, "Synchronize Cache(10) failed", res);
|
||||||
|
|
||||||
if (driver_byte(res) & DRIVER_SENSE)
|
if (driver_byte(res) == DRIVER_SENSE)
|
||||||
sd_print_sense_hdr(sdkp, sshdr);
|
sd_print_sense_hdr(sdkp, sshdr);
|
||||||
|
|
||||||
/* we need to evaluate the error return */
|
/* we need to evaluate the error return */
|
||||||
@ -1737,8 +1737,8 @@ static int sd_pr_command(struct block_device *bdev, u8 sa,
|
|||||||
result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, &data, sizeof(data),
|
result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, &data, sizeof(data),
|
||||||
&sshdr, SD_TIMEOUT, SD_MAX_RETRIES, NULL);
|
&sshdr, SD_TIMEOUT, SD_MAX_RETRIES, NULL);
|
||||||
|
|
||||||
if ((driver_byte(result) & DRIVER_SENSE) &&
|
if (driver_byte(result) == DRIVER_SENSE &&
|
||||||
(scsi_sense_valid(&sshdr))) {
|
scsi_sense_valid(&sshdr)) {
|
||||||
sdev_printk(KERN_INFO, sdev, "PR command failed: %d\n", result);
|
sdev_printk(KERN_INFO, sdev, "PR command failed: %d\n", result);
|
||||||
scsi_print_sense_hdr(sdev, NULL, &sshdr);
|
scsi_print_sense_hdr(sdev, NULL, &sshdr);
|
||||||
}
|
}
|
||||||
@ -2095,10 +2095,10 @@ sd_spinup_disk(struct scsi_disk *sdkp)
|
|||||||
retries++;
|
retries++;
|
||||||
} while (retries < 3 &&
|
} while (retries < 3 &&
|
||||||
(!scsi_status_is_good(the_result) ||
|
(!scsi_status_is_good(the_result) ||
|
||||||
((driver_byte(the_result) & DRIVER_SENSE) &&
|
((driver_byte(the_result) == DRIVER_SENSE) &&
|
||||||
sense_valid && sshdr.sense_key == UNIT_ATTENTION)));
|
sense_valid && sshdr.sense_key == UNIT_ATTENTION)));
|
||||||
|
|
||||||
if ((driver_byte(the_result) & DRIVER_SENSE) == 0) {
|
if (driver_byte(the_result) != DRIVER_SENSE) {
|
||||||
/* no sense, TUR either succeeded or failed
|
/* no sense, TUR either succeeded or failed
|
||||||
* with a status error */
|
* with a status error */
|
||||||
if(!spintime && !scsi_status_is_good(the_result)) {
|
if(!spintime && !scsi_status_is_good(the_result)) {
|
||||||
@ -2224,7 +2224,7 @@ static void read_capacity_error(struct scsi_disk *sdkp, struct scsi_device *sdp,
|
|||||||
struct scsi_sense_hdr *sshdr, int sense_valid,
|
struct scsi_sense_hdr *sshdr, int sense_valid,
|
||||||
int the_result)
|
int the_result)
|
||||||
{
|
{
|
||||||
if (driver_byte(the_result) & DRIVER_SENSE)
|
if (driver_byte(the_result) == DRIVER_SENSE)
|
||||||
sd_print_sense_hdr(sdkp, sshdr);
|
sd_print_sense_hdr(sdkp, sshdr);
|
||||||
else
|
else
|
||||||
sd_printk(KERN_NOTICE, sdkp, "Sense not available.\n");
|
sd_printk(KERN_NOTICE, sdkp, "Sense not available.\n");
|
||||||
@ -3490,7 +3490,7 @@ static int sd_start_stop_device(struct scsi_disk *sdkp, int start)
|
|||||||
SD_TIMEOUT, SD_MAX_RETRIES, 0, RQF_PM, NULL);
|
SD_TIMEOUT, SD_MAX_RETRIES, 0, RQF_PM, NULL);
|
||||||
if (res) {
|
if (res) {
|
||||||
sd_print_result(sdkp, "Start/Stop Unit failed", res);
|
sd_print_result(sdkp, "Start/Stop Unit failed", res);
|
||||||
if (driver_byte(res) & DRIVER_SENSE)
|
if (driver_byte(res) == DRIVER_SENSE)
|
||||||
sd_print_sense_hdr(sdkp, &sshdr);
|
sd_print_sense_hdr(sdkp, &sshdr);
|
||||||
if (scsi_sense_valid(&sshdr) &&
|
if (scsi_sense_valid(&sshdr) &&
|
||||||
/* 0x3a is medium not present */
|
/* 0x3a is medium not present */
|
||||||
|
@ -7303,7 +7303,7 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
|
|||||||
sdev_printk(KERN_WARNING, sdp,
|
sdev_printk(KERN_WARNING, sdp,
|
||||||
"START_STOP failed for power mode: %d, result %x\n",
|
"START_STOP failed for power mode: %d, result %x\n",
|
||||||
pwr_mode, ret);
|
pwr_mode, ret);
|
||||||
if (driver_byte(ret) & DRIVER_SENSE)
|
if (driver_byte(ret) == DRIVER_SENSE)
|
||||||
scsi_print_sense_hdr(sdp, NULL, &sshdr);
|
scsi_print_sense_hdr(sdp, NULL, &sshdr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user