@@ -357,7 +357,7 @@ void ata_scsi_set_sense(struct ata_device *dev, struct scsi_cmnd *cmd,
if (!cmd)
return;
- cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(cmd, DRIVER_SENSE, 0, 0, SAM_STAT_CHECK_CONDITION);
scsi_build_sense_buffer(d_sense, cmd->sense_buffer, sk, asc, ascq);
}
@@ -873,7 +873,7 @@ static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
qc->sg = scsi_sglist(cmd);
qc->n_elem = scsi_sg_count(cmd);
} else {
- cmd->result = (DID_OK << 16) | (QUEUE_FULL << 1);
+ set_scsi_result(cmd, 0, DID_OK, 0, (QUEUE_FULL << 1));
cmd->scsi_done(cmd);
}
@@ -1093,7 +1093,7 @@ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc)
memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
- cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(cmd, DRIVER_SENSE, 0, 0, SAM_STAT_CHECK_CONDITION);
/*
* Use ata_to_sense_error() to map status register bits
@@ -1192,7 +1192,7 @@ static void ata_gen_ata_sense(struct ata_queued_cmd *qc)
memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
- cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(cmd, DRIVER_SENSE, 0, 0, SAM_STAT_CHECK_CONDITION);
if (ata_dev_disabled(dev)) {
/* Device disabled after error recovery */
@@ -2350,8 +2350,11 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd)
* max_pages_per_mr sg-list elements, tell the SCSI mid-layer
* to reduce queue depth temporarily.
*/
- scmnd->result = len == -ENOMEM ?
- DID_OK << 16 | QUEUE_FULL << 1 : DID_ERROR << 16;
+ if (len == -ENOMEM)
+ set_scsi_result(scmnd, 0, DID_OK, 0,
+ SAM_STAT_TASK_SET_FULL);
+ else
+ set_host_byte(scmnd, DID_ERROR);
goto err_iu;
}
@@ -806,7 +806,7 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
if((xfer_cnt==0)||(sc->underflow > xfer_cnt))
sc->result=DID_SOFT_ERROR << 16;
else /* Sufficient data transfer occurred */
- sc->result = (DID_OK << 16) | scsi_status;
+ set_scsi_result(sc, 0, DID_OK, 0, scsi_status);
dreplyprintk(ioc, printk(MYIOC_s_DEBUG_FMT
"RESIDUAL_MISMATCH: result=%x on channel=%d id=%d\n",
ioc->name, sc->result, sc->device->channel, sc->device->id));
@@ -817,7 +817,7 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
* Do upfront check for valid SenseData and give it
* precedence!
*/
- sc->result = (DID_OK << 16) | scsi_status;
+ set_scsi_result(sc, 0, DID_OK, 0, scsi_status);
if (!(scsi_state & MPI_SCSI_STATE_AUTOSENSE_VALID)) {
/*
@@ -884,7 +884,7 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
scsi_set_resid(sc, 0);
case MPI_IOCSTATUS_SCSI_RECOVERED_ERROR: /* 0x0040 */
case MPI_IOCSTATUS_SUCCESS: /* 0x0000 */
- sc->result = (DID_OK << 16) | scsi_status;
+ set_scsi_result(sc, 0, DID_OK, 0, scsi_status);
if (scsi_state == 0) {
;
} else if (scsi_state &
@@ -1333,7 +1333,8 @@ static irqreturn_t twa_interrupt(int irq, void *dev_instance)
/* If error, command failed */
if (error == 1) {
/* Ask for a host reset */
- cmd->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
+ set_scsi_result(cmd, 0, DID_OK, 0,
+ (CHECK_CONDITION << 1));
}
/* Report residual bytes for single sgl */
@@ -429,7 +429,9 @@ static int tw_decode_sense(TW_Device_Extension *tw_dev, int request_id, int fill
/* Additional sense code qualifier */
tw_dev->srb[request_id]->sense_buffer[13] = tw_sense_table[i][3];
- tw_dev->srb[request_id]->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
+ set_scsi_result(tw_dev->srb[request_id],
+ 0, DID_OK, 0,
+ (CHECK_CONDITION << 1));
return TW_ISR_DONT_RESULT; /* Special case for isr to not over-write result */
}
}
@@ -1970,7 +1972,8 @@ static int tw_scsi_queue_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_c
printk(KERN_NOTICE "3w-xxxx: scsi%d: Unknown scsi opcode: 0x%x\n", tw_dev->host->host_no, *command);
tw_dev->state[request_id] = TW_S_COMPLETED;
tw_state_request_finish(tw_dev, request_id);
- SCpnt->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(SCpnt, DRIVER_SENSE, 0, 0,
+ SAM_STAT_CHECK_CONDITION);
scsi_build_sense_buffer(1, SCpnt->sense_buffer, ILLEGAL_REQUEST, 0x20, 0);
done(SCpnt);
retval = 0;
@@ -2153,7 +2156,7 @@ static irqreturn_t tw_interrupt(int irq, void *dev_instance)
/* If error, command failed */
if (error == 1) {
/* Ask for a host reset */
- tw_dev->srb[request_id]->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
+ set_scsi_result(tw_dev->srb[request_id], 0, DID_OK, 0, CHECK_CONDITION << 1);
}
/* Now complete the io */
@@ -1794,9 +1794,9 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
hostdata->connected = NULL;
- cmd->result &= ~0xffff;
- cmd->result |= cmd->SCp.Status;
- cmd->result |= cmd->SCp.Message << 8;
+ set_scsi_result(cmd, 0, 0,
+ cmd->SCp.Message,
+ cmd->SCp.Status);
if (cmd->cmnd[0] == REQUEST_SENSE)
complete_cmd(instance, cmd);
@@ -1040,7 +1040,7 @@ static void inia100_scb_handler(struct orc_host *host, struct orc_scb *scb)
memcpy((unsigned char *) &cmd->sense_buffer[0],
(unsigned char *) &escb->sglist[0], SENSE_SIZE);
}
- cmd->result = scb->tastat | (scb->hastat << 16);
+ set_scsi_result(cmd, 0, scb->hastat, 0, scb->tastat);
scsi_dma_unmap(cmd);
cmd->scsi_done(cmd); /* Notify system DONE */
orc_release_scb(host, scb); /* Release SCB for current channel */
@@ -115,8 +115,6 @@
#define ASENCODE_LUN_FAILED_SELF_CONFIG 0x00
#define ASENCODE_OVERLAPPED_COMMAND 0x00
-#define AAC_STAT_GOOD (DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD)
-
#define BYTE0(x) (unsigned char)(x)
#define BYTE1(x) (unsigned char)((x) >> 8)
#define BYTE2(x) (unsigned char)((x) >> 16)
@@ -571,7 +569,7 @@ static void get_container_name_callback(void *context, struct fib * fibptr)
}
}
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE, SAM_STAT_GOOD);
aac_fib_complete(fibptr);
scsicmd->scsi_done(scsicmd);
@@ -1104,7 +1102,7 @@ static void get_container_serial_callback(void *context, struct fib * fibptr)
}
}
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE, SAM_STAT_GOOD);
aac_fib_complete(fibptr);
scsicmd->scsi_done(scsicmd);
@@ -1203,8 +1201,8 @@ static int aac_bounds_32(struct aac_dev * dev, struct scsi_cmnd * cmd, u64 lba)
if (lba & 0xffffffff00000000LL) {
int cid = scmd_id(cmd);
dprintk((KERN_DEBUG "aacraid: Illegal lba\n"));
- cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
- SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(cmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_CHECK_CONDITION);
set_sense(&dev->fsa_dev[cid].sense_data,
HARDWARE_ERROR, SENCODE_INTERNAL_TARGET_FAILURE,
ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0);
@@ -2378,13 +2376,13 @@ static void io_callback(void *context, struct fib * fibptr)
readreply = (struct aac_read_reply *)fib_data(fibptr);
switch (le32_to_cpu(readreply->status)) {
case ST_OK:
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
- SAM_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
dev->fsa_dev[cid].sense_data.sense_key = NO_SENSE;
break;
case ST_NOT_READY:
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
- SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_CHECK_CONDITION);
set_sense(&dev->fsa_dev[cid].sense_data, NOT_READY,
SENCODE_BECOMING_READY, ASENCODE_BECOMING_READY, 0, 0);
memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
@@ -2392,8 +2390,8 @@ static void io_callback(void *context, struct fib * fibptr)
SCSI_SENSE_BUFFERSIZE));
break;
case ST_MEDERR:
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
- SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_CHECK_CONDITION);
set_sense(&dev->fsa_dev[cid].sense_data, MEDIUM_ERROR,
SENCODE_UNRECOVERED_READ_ERROR, ASENCODE_NO_SENSE, 0, 0);
memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
@@ -2405,8 +2403,8 @@ static void io_callback(void *context, struct fib * fibptr)
printk(KERN_WARNING "io_callback: io failed, status = %d\n",
le32_to_cpu(readreply->status));
#endif
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
- SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_CHECK_CONDITION);
set_sense(&dev->fsa_dev[cid].sense_data,
HARDWARE_ERROR, SENCODE_INTERNAL_TARGET_FAILURE,
ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0);
@@ -2481,8 +2479,8 @@ static int aac_read(struct scsi_cmnd * scsicmd)
if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) {
cid = scmd_id(scsicmd);
dprintk((KERN_DEBUG "aacraid: Illegal lba\n"));
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
- SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_CHECK_CONDITION);
set_sense(&dev->fsa_dev[cid].sense_data,
HARDWARE_ERROR, SENCODE_INTERNAL_TARGET_FAILURE,
ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0);
@@ -2514,7 +2512,8 @@ static int aac_read(struct scsi_cmnd * scsicmd)
/*
* For some reason, the Fib didn't queue, return QUEUE_FULL
*/
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_TASK_SET_FULL;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_TASK_SET_FULL);
scsicmd->scsi_done(scsicmd);
aac_fib_complete(cmd_fibcontext);
aac_fib_free(cmd_fibcontext);
@@ -2573,8 +2572,8 @@ static int aac_write(struct scsi_cmnd * scsicmd)
if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) {
cid = scmd_id(scsicmd);
dprintk((KERN_DEBUG "aacraid: Illegal lba\n"));
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
- SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_CHECK_CONDITION);
set_sense(&dev->fsa_dev[cid].sense_data,
HARDWARE_ERROR, SENCODE_INTERNAL_TARGET_FAILURE,
ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0);
@@ -2606,7 +2605,8 @@ static int aac_write(struct scsi_cmnd * scsicmd)
/*
* For some reason, the Fib didn't queue, return QUEUE_FULL
*/
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_TASK_SET_FULL;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_TASK_SET_FULL);
scsicmd->scsi_done(scsicmd);
aac_fib_complete(cmd_fibcontext);
@@ -2631,8 +2631,8 @@ static void synchronize_callback(void *context, struct fib *fibptr)
synchronizereply = fib_data(fibptr);
if (le32_to_cpu(synchronizereply->status) == CT_OK)
- cmd->result = DID_OK << 16 |
- COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
+ set_scsi_result(cmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
else {
struct scsi_device *sdev = cmd->device;
struct aac_dev *dev = fibptr->dev;
@@ -2640,8 +2640,8 @@ static void synchronize_callback(void *context, struct fib *fibptr)
printk(KERN_WARNING
"synchronize_callback: synchronize failed, status = %d\n",
le32_to_cpu(synchronizereply->status));
- cmd->result = DID_OK << 16 |
- COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(cmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_CHECK_CONDITION);
set_sense(&dev->fsa_dev[cid].sense_data,
HARDWARE_ERROR, SENCODE_INTERNAL_TARGET_FAILURE,
ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0);
@@ -2785,7 +2785,7 @@ static void aac_start_stop_callback(void *context, struct fib *fibptr)
BUG_ON(fibptr == NULL);
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE, SAM_STAT_GOOD);
aac_fib_complete(fibptr);
aac_fib_free(fibptr);
@@ -2802,8 +2802,8 @@ static int aac_start_stop(struct scsi_cmnd *scsicmd)
if (!(aac->supplement_adapter_info.supported_options2 &
AAC_OPTION_POWER_MANAGEMENT)) {
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
- SAM_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
scsicmd->scsi_done(scsicmd);
return 0;
}
@@ -2933,7 +2933,8 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
(scsicmd->cmnd[0] != TEST_UNIT_READY))
{
dprintk((KERN_WARNING "Only INQUIRY & TUR command supported for controller, rcvd = 0x%x.\n", scsicmd->cmnd[0]));
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_CHECK_CONDITION);
set_sense(&dev->fsa_dev[cid].sense_data,
ILLEGAL_REQUEST, SENCODE_INVALID_COMMAND,
ASENCODE_INVALID_COMMAND, 0, 0);
@@ -2962,7 +2963,8 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
case SYNCHRONIZE_CACHE:
if (((aac_cache & 6) == 6) && dev->cache_protected) {
- scsicmd->result = AAC_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
break;
}
/* Issue FIB to tell Firmware to flush it's cache */
@@ -2990,7 +2992,9 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
arr[1] = scsicmd->cmnd[2];
scsi_sg_copy_from_buffer(scsicmd, &inq_data,
sizeof(inq_data));
- scsicmd->result = AAC_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK,
+ COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
} else if (scsicmd->cmnd[2] == 0x80) {
/* unit serial number page */
arr[3] = setinqserial(dev, &arr[4],
@@ -3001,7 +3005,9 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
if (aac_wwn != 2)
return aac_get_container_serial(
scsicmd);
- scsicmd->result = AAC_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK,
+ COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
} else if (scsicmd->cmnd[2] == 0x83) {
/* vpd page 0x83 - Device Identification Page */
char *sno = (char *)&inq_data;
@@ -3010,12 +3016,14 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
if (aac_wwn != 2)
return aac_get_container_serial(
scsicmd);
- scsicmd->result = AAC_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK,
+ COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
} else {
/* vpd page not implemented */
- scsicmd->result = DID_OK << 16 |
- COMMAND_COMPLETE << 8 |
- SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(scsicmd, 0, DID_OK,
+ COMMAND_COMPLETE,
+ SAM_STAT_CHECK_CONDITION);
set_sense(&dev->fsa_dev[cid].sense_data,
ILLEGAL_REQUEST, SENCODE_INVALID_CDB_FIELD,
ASENCODE_NO_SENSE, 7, 2);
@@ -3041,7 +3049,8 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
inq_data.inqd_pdt = INQD_PDT_PROC; /* Processor device */
scsi_sg_copy_from_buffer(scsicmd, &inq_data,
sizeof(inq_data));
- scsicmd->result = AAC_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
break;
}
if (dev->in_reset)
@@ -3090,7 +3099,8 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
/* Do not cache partition table for arrays */
scsicmd->device->removable = 1;
- scsicmd->result = AAC_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
break;
}
@@ -3116,7 +3126,8 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
scsi_sg_copy_from_buffer(scsicmd, cp, sizeof(cp));
/* Do not cache partition table for arrays */
scsicmd->device->removable = 1;
- scsicmd->result = AAC_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
break;
}
@@ -3195,7 +3206,8 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
scsi_sg_copy_from_buffer(scsicmd,
(char *)&mpd,
mode_buf_length);
- scsicmd->result = AAC_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
break;
}
case MODE_SENSE_10:
@@ -3272,7 +3284,8 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
(char *)&mpd10,
mode_buf_length);
- scsicmd->result = AAC_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
break;
}
case REQUEST_SENSE:
@@ -3281,7 +3294,8 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
sizeof(struct sense_data));
memset(&dev->fsa_dev[cid].sense_data, 0,
sizeof(struct sense_data));
- scsicmd->result = AAC_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
break;
case ALLOW_MEDIUM_REMOVAL:
@@ -3291,15 +3305,16 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
else
fsa_dev_ptr[cid].locked = 0;
- scsicmd->result = AAC_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
break;
/*
* These commands are all No-Ops
*/
case TEST_UNIT_READY:
if (fsa_dev_ptr[cid].sense_data.sense_key == NOT_READY) {
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
- SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_CHECK_CONDITION);
set_sense(&dev->fsa_dev[cid].sense_data,
NOT_READY, SENCODE_BECOMING_READY,
ASENCODE_BECOMING_READY, 0, 0);
@@ -3315,7 +3330,8 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
case REZERO_UNIT:
case REASSIGN_BLOCKS:
case SEEK_10:
- scsicmd->result = AAC_STAT_GOOD;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_GOOD);
break;
case START_STOP:
@@ -3328,8 +3344,8 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
*/
dprintk((KERN_WARNING "Unhandled SCSI Command: 0x%x.\n",
scsicmd->cmnd[0]));
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
- SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_CHECK_CONDITION);
set_sense(&dev->fsa_dev[cid].sense_data,
ILLEGAL_REQUEST, SENCODE_INVALID_COMMAND,
ASENCODE_INVALID_COMMAND, 0, 0);
@@ -3516,9 +3532,8 @@ static void aac_srb_callback(void *context, struct fib * fibptr)
le32_to_cpu(srbreply->status));
len = min_t(u32, le32_to_cpu(srbreply->sense_data_size),
SCSI_SENSE_BUFFERSIZE);
- scsicmd->result = DID_ERROR << 16
- | COMMAND_COMPLETE << 8
- | SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(scsicmd, 0, DID_ERROR, COMMAND_COMPLETE,
+ SAM_STAT_CHECK_CONDITION);
memcpy(scsicmd->sense_buffer,
srbreply->sense_data, len);
}
@@ -3530,7 +3545,7 @@ static void aac_srb_callback(void *context, struct fib * fibptr)
case SRB_STATUS_ERROR_RECOVERY:
case SRB_STATUS_PENDING:
case SRB_STATUS_SUCCESS:
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE, 0);
break;
case SRB_STATUS_DATA_OVERRUN:
switch (scsicmd->cmnd[0]) {
@@ -3547,60 +3562,56 @@ static void aac_srb_callback(void *context, struct fib * fibptr)
pr_warn("aacraid: SCSI CMD underflow\n");
else
pr_warn("aacraid: SCSI CMD Data Overrun\n");
- scsicmd->result = DID_ERROR << 16
- | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_ERROR,
+ COMMAND_COMPLETE, 0);
break;
case INQUIRY:
- scsicmd->result = DID_OK << 16
- | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ 0);
break;
default:
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ 0);
break;
}
break;
case SRB_STATUS_ABORTED:
- scsicmd->result = DID_ABORT << 16 | ABORT << 8;
+ set_scsi_result(scsicmd, 0, DID_ABORT, ABORT, 0);
break;
case SRB_STATUS_ABORT_FAILED:
/*
* Not sure about this one - but assuming the
* hba was trying to abort for some reason
*/
- scsicmd->result = DID_ERROR << 16 | ABORT << 8;
+ set_scsi_result(scsicmd, 0, DID_ERROR, ABORT, 0);
break;
case SRB_STATUS_PARITY_ERROR:
- scsicmd->result = DID_PARITY << 16
- | MSG_PARITY_ERROR << 8;
+ set_scsi_result(scsicmd, 0, DID_PARITY, MSG_PARITY_ERROR, 0);
break;
case SRB_STATUS_NO_DEVICE:
case SRB_STATUS_INVALID_PATH_ID:
case SRB_STATUS_INVALID_TARGET_ID:
case SRB_STATUS_INVALID_LUN:
case SRB_STATUS_SELECTION_TIMEOUT:
- scsicmd->result = DID_NO_CONNECT << 16
- | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_NO_CONNECT, COMMAND_COMPLETE,
+ 0);
break;
case SRB_STATUS_COMMAND_TIMEOUT:
case SRB_STATUS_TIMEOUT:
- scsicmd->result = DID_TIME_OUT << 16
- | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_TIME_OUT, COMMAND_COMPLETE, 0);
break;
case SRB_STATUS_BUSY:
- scsicmd->result = DID_BUS_BUSY << 16
- | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_BUS_BUSY, COMMAND_COMPLETE, 0);
break;
case SRB_STATUS_BUS_RESET:
- scsicmd->result = DID_RESET << 16
- | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_RESET, COMMAND_COMPLETE, 0);
break;
case SRB_STATUS_MESSAGE_REJECTED:
- scsicmd->result = DID_ERROR << 16
- | MESSAGE_REJECT << 8;
+ set_scsi_result(scsicmd, 0, DID_ERROR, MESSAGE_REJECT, 0);
break;
case SRB_STATUS_REQUEST_FLUSHED:
case SRB_STATUS_ERROR:
@@ -3636,17 +3647,17 @@ static void aac_srb_callback(void *context, struct fib * fibptr)
|| (scsicmd->cmnd[0] == ATA_16)) {
if (scsicmd->cmnd[2] & (0x01 << 5)) {
- scsicmd->result = DID_OK << 16
- | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_OK,
+ COMMAND_COMPLETE, 0);
break;
} else {
- scsicmd->result = DID_ERROR << 16
- | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_ERROR,
+ COMMAND_COMPLETE, 0);
break;
}
} else {
- scsicmd->result = DID_ERROR << 16
- | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_ERROR,
+ COMMAND_COMPLETE, 0);
break;
}
}
@@ -3684,7 +3695,7 @@ static void hba_resp_task_complete(struct aac_dev *dev,
switch (err->status) {
case SAM_STAT_GOOD:
- scsicmd->result |= DID_OK << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE, 0);
break;
case SAM_STAT_CHECK_CONDITION:
{
@@ -3695,19 +3706,19 @@ static void hba_resp_task_complete(struct aac_dev *dev,
if (len)
memcpy(scsicmd->sense_buffer,
err->sense_response_buf, len);
- scsicmd->result |= DID_OK << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE, 0);
break;
}
case SAM_STAT_BUSY:
- scsicmd->result |= DID_BUS_BUSY << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_BUS_BUSY, COMMAND_COMPLETE, 0);
break;
case SAM_STAT_TASK_ABORTED:
- scsicmd->result |= DID_ABORT << 16 | ABORT << 8;
+ set_scsi_result(scsicmd, 0, DID_ABORT, ABORT, 0);
break;
case SAM_STAT_RESERVATION_CONFLICT:
case SAM_STAT_TASK_SET_FULL:
default:
- scsicmd->result |= DID_ERROR << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_ERROR, COMMAND_COMPLETE, 0);
break;
}
}
@@ -3727,27 +3738,29 @@ static void hba_resp_task_failure(struct aac_dev *dev,
dev->hba_map[bus][cid].devtype = AAC_DEVTYPE_ARC_RAW;
dev->hba_map[bus][cid].rmw_nexus = 0xffffffff;
}
- scsicmd->result = DID_NO_CONNECT << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_NO_CONNECT, COMMAND_COMPLETE,
+ 0);
break;
}
case HBA_RESP_STAT_IO_ERROR:
case HBA_RESP_STAT_NO_PATH_TO_DEVICE:
- scsicmd->result = DID_OK << 16 |
- COMMAND_COMPLETE << 8 | SAM_STAT_BUSY;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_BUSY);
break;
case HBA_RESP_STAT_IO_ABORTED:
- scsicmd->result = DID_ABORT << 16 | ABORT << 8;
+ set_scsi_result(scsicmd, 0, DID_ABORT, ABORT, 0);
break;
case HBA_RESP_STAT_INVALID_DEVICE:
- scsicmd->result = DID_NO_CONNECT << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_NO_CONNECT, COMMAND_COMPLETE,
+ 0);
break;
case HBA_RESP_STAT_UNDERRUN:
/* UNDERRUN is OK */
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE, 0);
break;
case HBA_RESP_STAT_OVERRUN:
default:
- scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_ERROR, COMMAND_COMPLETE, 0);
break;
}
}
@@ -3782,7 +3795,7 @@ void aac_hba_callback(void *context, struct fib *fibptr)
if (fibptr->flags & FIB_CONTEXT_FLAG_FASTRESP) {
/* fast response */
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE, 0);
goto out;
}
@@ -3794,17 +3807,18 @@ void aac_hba_callback(void *context, struct fib *fibptr)
hba_resp_task_failure(dev, scsicmd, err);
break;
case HBA_RESP_SVCRES_TMF_REJECTED:
- scsicmd->result = DID_ERROR << 16 | MESSAGE_REJECT << 8;
+ set_scsi_result(scsicmd, 0, DID_ERROR, MESSAGE_REJECT, 0);
break;
case HBA_RESP_SVCRES_TMF_LUN_INVALID:
- scsicmd->result = DID_NO_CONNECT << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_NO_CONNECT, COMMAND_COMPLETE,
+ 0);
break;
case HBA_RESP_SVCRES_TMF_COMPLETE:
case HBA_RESP_SVCRES_TMF_SUCCEEDED:
- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_OK, COMMAND_COMPLETE, 0);
break;
default:
- scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(scsicmd, 0, DID_ERROR, COMMAND_COMPLETE, 0);
break;
}
@@ -1625,9 +1625,8 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced, u8 reset_type)
while ((command = command_list)) {
command_list = (struct scsi_cmnd *)command->SCp.buffer;
command->SCp.buffer = NULL;
- command->result = DID_OK << 16
- | COMMAND_COMPLETE << 8
- | SAM_STAT_TASK_SET_FULL;
+ set_scsi_result(command, 0, DID_OK, COMMAND_COMPLETE,
+ SAM_STAT_TASK_SET_FULL);
command->SCp.phase = AAC_OWNER_ERROR_HANDLER;
command->scsi_done(command);
}
@@ -6039,8 +6039,8 @@ static void adv_isr_callback(ADV_DVC_VAR *adv_dvc_varp, ADV_SCSI_REQ_Q *scsiqp)
* 0x2. Host drivers are supposed to return
* the status byte as it is defined by SCSI.
*/
- scp->result = DRIVER_BYTE(DRIVER_SENSE) |
- STATUS_BYTE(scsiqp->scsi_status);
+ set_scsi_result(scp, DRIVER_SENSE, 0, 0,
+ scsiqp->scsi_status);
} else {
scp->result = STATUS_BYTE(scsiqp->scsi_status);
}
@@ -6056,14 +6056,12 @@ static void adv_isr_callback(ADV_DVC_VAR *adv_dvc_varp, ADV_SCSI_REQ_Q *scsiqp)
case QD_ABORTED_BY_HOST:
ASC_DBG(1, "QD_ABORTED_BY_HOST\n");
- scp->result =
- HOST_BYTE(DID_ABORT) | STATUS_BYTE(scsiqp->scsi_status);
+ set_scsi_result(scp, 0, DID_ABORT, 0, scsiqp->scsi_status);
break;
default:
ASC_DBG(1, "done_status 0x%x\n", scsiqp->done_status);
- scp->result =
- HOST_BYTE(DID_ERROR) | STATUS_BYTE(scsiqp->scsi_status);
+ set_scsi_result(scp, 0, DID_ERROR, 0, scsiqp->scsi_status);
break;
}
@@ -6807,8 +6805,8 @@ static void asc_isr_callback(ASC_DVC_VAR *asc_dvc_varp, ASC_QDONE_INFO *qdonep)
* 0x2. Host drivers are supposed to return
* the status byte as it is defined by SCSI.
*/
- scp->result = DRIVER_BYTE(DRIVER_SENSE) |
- STATUS_BYTE(qdonep->d3.scsi_stat);
+ set_scsi_result(scp, 0, DRIVER_SENSE, 0,
+ qdonep->d3.scsi_stat);
} else {
scp->result = STATUS_BYTE(qdonep->d3.scsi_stat);
}
@@ -6824,18 +6822,14 @@ static void asc_isr_callback(ASC_DVC_VAR *asc_dvc_varp, ASC_QDONE_INFO *qdonep)
case QD_ABORTED_BY_HOST:
ASC_DBG(1, "QD_ABORTED_BY_HOST\n");
- scp->result =
- HOST_BYTE(DID_ABORT) | MSG_BYTE(qdonep->d3.
- scsi_msg) |
- STATUS_BYTE(qdonep->d3.scsi_stat);
+ set_scsi_result(scp, 0, DID_ABORT, qdonep->d3.scsi_msg,
+ qdonep->d3.scsi_stat);
break;
default:
ASC_DBG(1, "done_stat 0x%x\n", qdonep->d3.done_stat);
- scp->result =
- HOST_BYTE(DID_ERROR) | MSG_BYTE(qdonep->d3.
- scsi_msg) |
- STATUS_BYTE(qdonep->d3.scsi_stat);
+ set_scsi_result(scp, 0, DID_ERROR, qdonep->d3.scsi_msg,
+ qdonep->d3.scsi_stat);
break;
}
@@ -1202,7 +1202,7 @@ static void arcmsr_report_sense_info(struct CommandControlBlock *ccb)
struct scsi_cmnd *pcmd = ccb->pcmd;
struct SENSE_DATA *sensebuffer = (struct SENSE_DATA *)pcmd->sense_buffer;
- pcmd->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
+ set_scsi_result(pcmd, 0, DID_OK, 0, (CHECK_CONDITION << 1));
if (sensebuffer) {
int sense_data_length =
sizeof(struct SENSE_DATA) < SCSI_SENSE_BUFFERSIZE
@@ -3019,7 +3019,8 @@ static int arcmsr_queue_command_lck(struct scsi_cmnd *cmd,
if (!ccb)
return SCSI_MLQUEUE_HOST_BUSY;
if (arcmsr_build_ccb( acb, ccb, cmd ) == FAILED) {
- cmd->result = (DID_ERROR << 16) | (RESERVATION_CONFLICT << 1);
+ set_scsi_result(cmd, 0, DID_ERROR, 0,
+ (RESERVATION_CONFLICT << 1));
cmd->scsi_done(cmd);
return 0;
}
@@ -803,7 +803,8 @@ 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_scsi_result(SCpnt, 0, result, host->scsi.SCp.Message,
+ host->scsi.SCp.Status);
/*
* In theory, this should not happen. In practice, it seems to.
@@ -2037,8 +2037,8 @@ fas216_std_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, unsigned int result)
{
info->stats.fins += 1;
- SCpnt->result = result << 16 | info->scsi.SCp.Message << 8 |
- info->scsi.SCp.Status;
+ set_scsi_result(SCpnt, 0, result, info->scsi.SCp.Message,
+ info->scsi.SCp.Status);
fas216_log_command(info, LOG_CONNECT, SCpnt,
"command complete, result=0x%08x", SCpnt->result);
@@ -1131,7 +1131,7 @@ be_complete_io(struct beiscsi_conn *beiscsi_conn,
return;
}
- task->sc->result = (DID_OK << 16) | status;
+ set_scsi_result(task->sc, 0, DID_OK, 0, status);
if (rsp != ISCSI_STATUS_CMD_COMPLETED) {
task->sc->result = DID_ERROR << 16;
goto unmap;
@@ -70,21 +70,21 @@ bfa_cb_ioim_done(void *drv, struct bfad_ioim_s *dio,
host_status = DID_ERROR;
}
}
- cmnd->result = ScsiResult(host_status, scsi_status);
+ set_scsi_result(cmnd, 0, host_status, 0, scsi_status);
break;
case BFI_IOIM_STS_TIMEDOUT:
host_status = DID_TIME_OUT;
- cmnd->result = ScsiResult(host_status, 0);
+ set_scsi_result(cmnd, 0, host_status, 0, 0);
break;
case BFI_IOIM_STS_PATHTOV:
host_status = DID_TRANSPORT_DISRUPTED;
- cmnd->result = ScsiResult(host_status, 0);
+ set_scsi_result(cmnd, 0, host_status, 0, 0);
break;
default:
host_status = DID_ERROR;
- cmnd->result = ScsiResult(host_status, 0);
+ set_scsi_result(cmnd, 0, host_status, 0, 0);
}
/* Unmap DMA, if host is NULL, it means a scsi passthru cmd */
@@ -117,7 +117,7 @@ bfa_cb_ioim_good_comp(void *drv, struct bfad_ioim_s *dio)
struct bfad_itnim_data_s *itnim_data;
struct bfad_itnim_s *itnim;
- cmnd->result = ScsiResult(DID_OK, SCSI_STATUS_GOOD);
+ set_scsi_result(cmnd, 0, DID_OK, 0, SCSI_STATUS_GOOD);
/* Unmap DMA, if host is NULL, it means a scsi passthru cmd */
if (cmnd->device->host != NULL)
@@ -144,7 +144,7 @@ bfa_cb_ioim_abort(void *drv, struct bfad_ioim_s *dio)
struct scsi_cmnd *cmnd = (struct scsi_cmnd *)dio;
struct bfad_s *bfad = drv;
- cmnd->result = ScsiResult(DID_ERROR, 0);
+ set_scsi_result(cmnd, 0, DID_ERROR, 0, 0);
/* Unmap DMA, if host is NULL, it means a scsi passthru cmd */
if (cmnd->device->host != NULL)
@@ -1253,14 +1253,14 @@ bfad_im_queuecommand_lck(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd
printk(KERN_WARNING
"bfad%d, queuecommand %p %x failed, BFA stopped\n",
bfad->inst_no, cmnd, cmnd->cmnd[0]);
- cmnd->result = ScsiResult(DID_NO_CONNECT, 0);
+ set_scsi_result(cmnd, 0, DID_NO_CONNECT, 0, 0);
goto out_fail_cmd;
}
itnim = itnim_data->itnim;
if (!itnim) {
- cmnd->result = ScsiResult(DID_IMM_RETRY, 0);
+ set_scsi_result(cmnd, 0, DID_IMM_RETRY, 0, 0);
goto out_fail_cmd;
}
@@ -44,7 +44,6 @@ u32 bfad_im_supported_speeds(struct bfa_s *bfa);
#define MAX_FCP_LUN 16384
#define BFAD_TARGET_RESET_TMO 60
#define BFAD_LUN_RESET_TMO 60
-#define ScsiResult(host_code, scsi_code) (((host_code) << 16) | scsi_code)
#define BFA_QUEUE_FULL_RAMP_UP_TIME 120
/*
@@ -1548,7 +1548,8 @@ void bnx2fc_process_tm_compl(struct bnx2fc_cmd *io_req,
sc_cmd->result = DID_OK << 16;
} else {
/* Transport status is good, SCSI status not good */
- sc_cmd->result = (DID_OK << 16) | io_req->cdb_status;
+ set_scsi_result(sc_cmd, 0, DID_OK, 0,
+ io_req->cdb_status);
}
if (io_req->fcp_resid)
scsi_set_resid(sc_cmd, io_req->fcp_resid);
@@ -1946,7 +1947,8 @@ void bnx2fc_process_scsi_cmd_compl(struct bnx2fc_cmd *io_req,
BNX2FC_IO_DBG(io_req, "scsi_cmpl: cdb_status = %d"
" fcp_resid = 0x%x\n",
io_req->cdb_status, io_req->fcp_resid);
- sc_cmd->result = (DID_OK << 16) | io_req->cdb_status;
+ set_scsi_result(sc_cmd, 0, DID_OK, 0,
+ io_req->cdb_status);
if (io_req->cdb_status == SAM_STAT_TASK_SET_FULL ||
io_req->cdb_status == SAM_STAT_BUSY) {
@@ -1716,7 +1716,7 @@ csio_scsi_err_handler(struct csio_hw *hw, struct csio_ioreq *req)
if (req->nsge > 0)
scsi_dma_unmap(cmnd);
- cmnd->result = (((host_status) << 16) | scsi_status);
+ set_scsi_result(cmnd, 0, host_status, 0, scsi_status);
cmnd->scsi_done(cmnd);
/* Wake up waiting threads */
@@ -1744,7 +1744,7 @@ csio_scsi_cbfn(struct csio_hw *hw, struct csio_ioreq *req)
host_status = csio_scsi_copy_to_sgl(hw, req);
}
- cmnd->result = (((host_status) << 16) | scsi_status);
+ set_scsi_result(cmnd, 0, host_status, 0, scsi_status);
cmnd->scsi_done(cmnd);
csio_scsi_cmnd(req) = NULL;
CSIO_INC_STATS(csio_hw_to_scsim(hw), n_tot_success);
@@ -85,7 +85,8 @@ static void process_cmd_err(struct afu_cmd *cmd, struct scsi_cmnd *scp)
SISL_SENSE_DATA_LEN);
scp->result = ioasa->rc.scsi_rc;
} else
- scp->result = ioasa->rc.scsi_rc | (DID_ERROR << 16);
+ set_scsi_result(scp, 0, DID_ERROR, 0,
+ ioasa->rc.scsi_rc);
}
/*
@@ -3382,14 +3382,12 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
if (srb->total_xfer_length
&& srb->total_xfer_length >= cmd->underflow)
- cmd->result =
- MK_RES_LNX(DRIVER_SENSE, DID_OK,
- srb->end_message, CHECK_CONDITION);
+ set_scsi_result(cmd, DRIVER_SENSE, DID_OK,
+ srb->end_message, CHECK_CONDITION);
/*SET_RES_DID(cmd->result,DID_OK) */
else
- cmd->result =
- MK_RES_LNX(DRIVER_SENSE, DID_OK,
- srb->end_message, CHECK_CONDITION);
+ set_scsi_result(cmd, DRIVER_SENSE, DID_OK,
+ srb->end_message, CHECK_CONDITION);
goto ckc_e;
}
@@ -3421,10 +3419,8 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
cmd->result = DID_NO_CONNECT << 16;
} else {
srb->adapter_status = 0;
- SET_RES_DID(cmd->result, DID_ERROR);
- SET_RES_MSG(cmd->result, srb->end_message);
- SET_RES_TARGET(cmd->result, status);
-
+ set_scsi_result(cmd, 0, DID_ERROR, srb->end_message,
+ status);
}
} else {
/*
@@ -3433,11 +3429,10 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
status = srb->adapter_status;
if (status & H_OVER_UNDER_RUN) {
srb->target_status = 0;
- SET_RES_DID(cmd->result, DID_OK);
- SET_RES_MSG(cmd->result, srb->end_message);
+ set_scsi_result(cmd, 0, DID_OK, srb->end_message, 0);
} else if (srb->status & PARITY_ERROR) {
- SET_RES_DID(cmd->result, DID_PARITY);
- SET_RES_MSG(cmd->result, srb->end_message);
+ set_scsi_result(cmd, 0, DID_PARITY,
+ srb->end_message, 0);
} else { /* No error */
srb->adapter_status = 0;
@@ -2261,7 +2261,7 @@ static s32 adpt_scsi_to_i2o(adpt_hba* pHba, struct scsi_cmnd* cmd, struct adpt_d
default:
printk(KERN_WARNING"%s: scsi opcode 0x%x not supported.\n",
pHba->name, cmd->cmnd[0]);
- cmd->result = (DID_OK <<16) | (INITIATOR_ERROR << 8);
+ set_scsi_result(cmd, 0, DID_OK, INITIATOR_ERROR, 0);
cmd->scsi_done(cmd);
return 0;
}
@@ -2689,7 +2689,7 @@ static void adpt_fail_posted_scbs(adpt_hba* pHba)
if(cmd->serial_number == 0){
continue;
}
- cmd->result = (DID_OK << 16) | (QUEUE_FULL <<1);
+ set_scsi_result(cmd, 0, DID_OK, 0, (QUEUE_FULL << 1));
cmd->scsi_done(cmd);
}
spin_unlock_irqrestore(&d->list_lock, flags);
@@ -1522,9 +1522,10 @@ void esas2r_complete_request_cb(struct esas2r_adapter *a,
rq->func_rsp.scsi_rsp.scsi_stat,
rq->cmd);
- rq->cmd->result =
- ((esas2r_req_status_to_error(rq->req_stat) << 16)
- | (rq->func_rsp.scsi_rsp.scsi_stat & STATUS_MASK));
+ set_scsi_result(rq->cmd, 0,
+ esas2r_req_status_to_error(rq->req_stat) << 16,
+ 0,
+ (rq->func_rsp.scsi_rsp.scsi_stat & STATUS_MASK));
if (rq->req_stat == RS_UNDERRUN)
scsi_set_resid(rq->cmd,
@@ -910,11 +910,8 @@ static void esp_cmd_is_done(struct esp *esp, struct esp_cmd_entry *ent,
* saw originally. Also, report that we are providing
* the sense data.
*/
- cmd->result = ((DRIVER_SENSE << 24) |
- (DID_OK << 16) |
- (COMMAND_COMPLETE << 8) |
- (SAM_STAT_CHECK_CONDITION << 0));
-
+ set_scsi_result(cmd, DRIVER_SENSE, DID_OK,
+ COMMAND_COMPLETE, SAM_STAT_CHECK_CONDITION);
ent->flags &= ~ESP_CMD_FLAG_AUTOSENSE;
if (esp_debug & ESP_DEBUG_AUTOSENSE) {
int i;
@@ -922,7 +922,7 @@ static void fnic_fcpio_icmnd_cmpl_handler(struct fnic *fnic,
switch (hdr_status) {
case FCPIO_SUCCESS:
- sc->result = (DID_OK << 16) | icmnd_cmpl->scsi_status;
+ set_scsi_result(sc, 0, DID_OK, 0, icmnd_cmpl->scsi_status);
xfer_len = scsi_bufflen(sc);
scsi_set_resid(sc, icmnd_cmpl->residual);
@@ -938,50 +938,52 @@ static void fnic_fcpio_icmnd_cmpl_handler(struct fnic *fnic,
case FCPIO_TIMEOUT: /* request was timed out */
atomic64_inc(&fnic_stats->misc_stats.fcpio_timeout);
- sc->result = (DID_TIME_OUT << 16) | icmnd_cmpl->scsi_status;
+ set_scsi_result(sc, 0, DID_TIME_OUT, 0,
+ icmnd_cmpl->scsi_status);
break;
case FCPIO_ABORTED: /* request was aborted */
atomic64_inc(&fnic_stats->misc_stats.fcpio_aborted);
- sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status;
+ set_scsi_result(sc, 0, DID_ERROR, 0, icmnd_cmpl->scsi_status);
break;
case FCPIO_DATA_CNT_MISMATCH: /* recv/sent more/less data than exp. */
atomic64_inc(&fnic_stats->misc_stats.data_count_mismatch);
scsi_set_resid(sc, icmnd_cmpl->residual);
- sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status;
+ set_scsi_result(sc, 0, DID_ERROR, 0, icmnd_cmpl->scsi_status);
break;
case FCPIO_OUT_OF_RESOURCE: /* out of resources to complete request */
atomic64_inc(&fnic_stats->fw_stats.fw_out_of_resources);
- sc->result = (DID_REQUEUE << 16) | icmnd_cmpl->scsi_status;
+ set_scsi_result(sc, 0, DID_REQUEUE, 0,
+ icmnd_cmpl->scsi_status);
break;
case FCPIO_IO_NOT_FOUND: /* requested I/O was not found */
atomic64_inc(&fnic_stats->io_stats.io_not_found);
- sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status;
+ set_scsi_result(sc, 0, DID_ERROR, 0, icmnd_cmpl->scsi_status);
break;
case FCPIO_SGL_INVALID: /* request was aborted due to sgl error */
atomic64_inc(&fnic_stats->misc_stats.sgl_invalid);
- sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status;
+ set_scsi_result(sc, 0, DID_ERROR, 0, icmnd_cmpl->scsi_status);
break;
case FCPIO_FW_ERR: /* request was terminated due fw error */
atomic64_inc(&fnic_stats->fw_stats.io_fw_errs);
- sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status;
+ set_scsi_result(sc, 0, DID_ERROR, 0, icmnd_cmpl->scsi_status);
break;
case FCPIO_MSS_INVALID: /* request was aborted due to mss error */
atomic64_inc(&fnic_stats->misc_stats.mss_invalid);
- sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status;
+ set_scsi_result(sc, 0, DID_ERROR, 0, icmnd_cmpl->scsi_status);
break;
case FCPIO_INVALID_HEADER: /* header contains invalid data */
case FCPIO_INVALID_PARAM: /* some parameter in request invalid */
case FCPIO_REQ_NOT_SUPPORTED:/* request type is not supported */
default:
- sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status;
+ set_scsi_result(sc, 0, DID_ERROR, 0, icmnd_cmpl->scsi_status);
break;
}
@@ -2127,7 +2127,7 @@ static void gdth_next(gdth_ha_str *ha)
memset((char*)nscp->sense_buffer,0,16);
nscp->sense_buffer[0] = 0x70;
nscp->sense_buffer[2] = NOT_READY;
- nscp->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
+ set_scsi_result(nscp, 0, DID_OK, 0, (CHECK_CONDITION << 1));
if (!nscp_cmndinfo->wait_for_completion)
nscp_cmndinfo->wait_for_completion++;
else
@@ -2172,7 +2172,8 @@ static void gdth_next(gdth_ha_str *ha)
memset((char*)nscp->sense_buffer,0,16);
nscp->sense_buffer[0] = 0x70;
nscp->sense_buffer[2] = UNIT_ATTENTION;
- nscp->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
+ set_scsi_result(nscp, 0, DID_OK, 0,
+ (CHECK_CONDITION << 1));
if (!nscp_cmndinfo->wait_for_completion)
nscp_cmndinfo->wait_for_completion++;
else
@@ -2224,7 +2225,8 @@ static void gdth_next(gdth_ha_str *ha)
memset((char*)nscp->sense_buffer,0,16);
nscp->sense_buffer[0] = 0x70;
nscp->sense_buffer[2] = UNIT_ATTENTION;
- nscp->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
+ set_scsi_result(nscp, 0, DID_OK, 0,
+ (CHECK_CONDITION << 1));
if (!nscp_cmndinfo->wait_for_completion)
nscp_cmndinfo->wait_for_completion++;
else
@@ -3381,7 +3383,7 @@ static int gdth_sync_event(gdth_ha_str *ha, int service, u8 index,
memset((char*)scp->sense_buffer,0,16);
scp->sense_buffer[0] = 0x70;
scp->sense_buffer[2] = NOT_READY;
- scp->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
+ set_scsi_result(scp, 0, DID_OK, 0, (CHECK_CONDITION << 1));
} else if (service == CACHESERVICE) {
if (ha->status == S_CACHE_UNKNOWN &&
(ha->hdr[t].cluster_type &
@@ -3391,11 +3393,12 @@ static int gdth_sync_event(gdth_ha_str *ha, int service, u8 index,
}
memset((char*)scp->sense_buffer,0,16);
if (ha->status == (u16)S_CACHE_RESERV) {
- scp->result = (DID_OK << 16) | (RESERVATION_CONFLICT << 1);
+ set_scsi_result(scp, 0, DID_OK, 0,
+ (RESERVATION_CONFLICT << 1));
} else {
scp->sense_buffer[0] = 0x70;
scp->sense_buffer[2] = NOT_READY;
- scp->result = (DID_OK << 16) | (CHECK_CONDITION << 1);
+ set_scsi_result(scp, 0, DID_OK, 0, (CHECK_CONDITION << 1));
}
if (!cmndinfo->internal_command) {
ha->dvr.size = sizeof(ha->dvr.eu.sync);
@@ -3414,7 +3417,7 @@ static int gdth_sync_event(gdth_ha_str *ha, int service, u8 index,
if (ha->status != S_RAW_SCSI || ha->info >= 0x100) {
scp->result = DID_BAD_TARGET << 16;
} else {
- scp->result = (DID_OK << 16) | ha->info;
+ set_scsi_result(scp, 0, DID_OK, 0, ha->info);
}
}
}
@@ -769,7 +769,7 @@ static void hptiop_finish_scsi_req(struct hptiop_hba *hba, u32 tag,
break;
default:
- scp->result = DRIVER_INVALID << 24 | DID_ABORT << 16;
+ set_scsi_result(scp, DRIVER_INVALID, DID_ABORT, 0, 0);
break;
}
@@ -892,7 +892,7 @@ static int imm_engine(imm_struct *dev, struct scsi_cmnd *cmd)
/* Check for optional message byte */
if (imm_wait(dev) == (unsigned char) 0xb8)
imm_in(dev, &h, 1);
- cmd->result = (DID_OK << 16) + (l & STATUS_MASK);
+ set_scsi_result(cmd, 0, DID_OK, 0, l & STATUS_MASK);
}
if ((dev->mode == IMM_NIBBLE) || (dev->mode == IMM_PS2)) {
w_ctr(ppb, 0x4);
@@ -2802,7 +2802,7 @@ static void i91uSCBPost(u8 * host_mem, u8 * cblk_mem)
break;
}
- cmnd->result = cblk->tastat | (cblk->hastat << 16);
+ set_scsi_result(cmnd, 0, cblk->hastat, 0, cblk->tastat);
i91u_unmap_scb(host->pci_dev, cmnd);
cmnd->scsi_done(cmnd); /* Notify system DONE */
initio_release_scb(host, cblk); /* Release SCB for current channel */
@@ -3370,7 +3370,7 @@ ips_map_status(ips_ha_t * ha, ips_scb_t * scb, ips_stat_t * sp)
} /* end switch */
} /* end switch */
- scb->scsi_cmd->result = device_error | (errcode << 16);
+ set_scsi_result(scb->scsi_cmd, 0, errcode, 0, device_error);
return (1);
}
@@ -3706,7 +3706,8 @@ ips_send_cmd(ips_ha_t * ha, ips_scb_t * scb)
sp[13] = 0x00; /* ASCQ */
device_error = 2; /* Indicate Check Condition */
- scb->scsi_cmd->result = device_error | (DID_OK << 16);
+ set_scsi_result(scb->scsi_cmd, 0, DID_OK, 0,
+ device_error);
break;
} /* end switch */
}
@@ -2010,7 +2010,7 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
* transport level I/O was ok but scsi
* has non zero status
*/
- sc_cmd->result = (DID_OK << 16) | fsp->cdb_status;
+ set_scsi_result(sc_cmd, 0, DID_OK, 0, fsp->cdb_status);
}
break;
case FC_ERROR:
@@ -2038,7 +2038,8 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
"due to FC_DATA_UNDRUN (scsi)\n");
CMD_RESID_LEN(sc_cmd) = fsp->scsi_resid;
- sc_cmd->result = (DID_ERROR << 16) | fsp->cdb_status;
+ set_scsi_result(sc_cmd, 0, DID_ERROR, 0,
+ fsp->cdb_status);
}
break;
case FC_DATA_OVRRUN:
@@ -2047,7 +2048,7 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
*/
FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
"due to FC_DATA_OVRRUN\n");
- sc_cmd->result = (DID_ERROR << 16) | fsp->cdb_status;
+ set_scsi_result(sc_cmd, 0, DID_ERROR, 0, fsp->cdb_status);
break;
case FC_CMD_ABORTED:
if (host_byte(sc_cmd->result) == DID_TIME_OUT)
@@ -2083,7 +2084,7 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
case FC_TIMED_OUT:
FC_FCP_DBG(fsp, "Returning DID_BUS_BUSY to scsi-ml "
"due to FC_TIMED_OUT\n");
- sc_cmd->result = (DID_BUS_BUSY << 16) | fsp->io_status;
+ set_scsi_result(sc_cmd, 0, DID_BUS_BUSY, 0, fsp->io_status);
break;
default:
FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
@@ -841,7 +841,7 @@ static void iscsi_scsi_cmd_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
iscsi_update_cmdsn(session, (struct iscsi_nopin*)rhdr);
conn->exp_statsn = be32_to_cpu(rhdr->statsn) + 1;
- sc->result = (DID_OK << 16) | rhdr->cmd_status;
+ set_scsi_result(sc, 0, DID_OK, 0, rhdr->cmd_status);
if (task->protected) {
sector_t sector;
@@ -856,8 +856,9 @@ static void iscsi_scsi_cmd_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
ascq = session->tt->check_protection(task, §or);
if (ascq) {
- sc->result = DRIVER_SENSE << 24 |
- SAM_STAT_CHECK_CONDITION;
+ sc->result = 0;
+ set_scsi_result(sc, DRIVER_SENSE, 0, 0,
+ SAM_STAT_CHECK_CONDITION);
scsi_build_sense_buffer(1, sc->sense_buffer,
ILLEGAL_REQUEST, 0x10, ascq);
scsi_set_sense_information(sc->sense_buffer,
@@ -904,7 +905,8 @@ static void iscsi_scsi_cmd_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
res_count <= scsi_in(sc)->length))
scsi_in(sc)->resid = res_count;
else
- sc->result = (DID_BAD_TARGET << 16) | rhdr->cmd_status;
+ set_scsi_result(sc, 0, DID_BAD_TARGET, 0,
+ rhdr->cmd_status);
}
if (rhdr->flags & (ISCSI_FLAG_CMD_UNDERFLOW |
@@ -917,7 +919,8 @@ static void iscsi_scsi_cmd_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
/* write side for bidi or uni-io set_resid */
scsi_set_resid(sc, res_count);
else
- sc->result = (DID_BAD_TARGET << 16) | rhdr->cmd_status;
+ set_scsi_result(sc, 0, DID_BAD_TARGET, 0,
+ rhdr->cmd_status);
}
out:
ISCSI_DBG_SESSION(session, "cmd rsp done [sc %p res %d itt 0x%x]\n",
@@ -943,7 +946,7 @@ iscsi_data_in_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
return;
iscsi_update_cmdsn(conn->session, (struct iscsi_nopin *)hdr);
- sc->result = (DID_OK << 16) | rhdr->cmd_status;
+ set_scsi_result(sc, 0, DID_OK, 0, rhdr->cmd_status);
conn->exp_statsn = be32_to_cpu(rhdr->statsn) + 1;
if (rhdr->flags & (ISCSI_FLAG_DATA_UNDERFLOW |
ISCSI_FLAG_DATA_OVERFLOW)) {
@@ -954,7 +957,8 @@ iscsi_data_in_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
res_count <= scsi_in(sc)->length))
scsi_in(sc)->resid = res_count;
else
- sc->result = (DID_BAD_TARGET << 16) | rhdr->cmd_status;
+ set_scsi_result(sc, 0, DID_BAD_TARGET, 0,
+ rhdr->cmd_status);
}
ISCSI_DBG_SESSION(conn->session, "data in with status done "
@@ -111,7 +111,7 @@ static void sas_end_task(struct scsi_cmnd *sc, struct sas_task *task)
}
}
- sc->result = (hs << 16) | stat;
+ set_scsi_result(sc, 0, hs, 0, stat);
ASSIGN_SAS_TASK(sc, NULL);
sas_free_task(task);
}
@@ -469,7 +469,6 @@ int lpfc_parse_vpd(struct lpfc_hba *, uint8_t *, int);
void lpfc_start_fdiscs(struct lpfc_hba *phba);
struct lpfc_vport *lpfc_find_vport_by_vpid(struct lpfc_hba *, uint16_t);
struct lpfc_sglq *__lpfc_get_active_sglq(struct lpfc_hba *, uint16_t);
-#define ScsiResult(host_code, scsi_code) (((host_code) << 16) | scsi_code)
#define HBA_EVENT_RSCN 5
#define HBA_EVENT_LINK_UP 2
#define HBA_EVENT_LINK_DOWN 3
@@ -3017,8 +3017,9 @@ lpfc_calc_bg_err(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd)
if (err_type == BGS_GUARD_ERR_MASK) {
scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST,
0x10, 0x1);
- cmd->result = DRIVER_SENSE << 24
- | ScsiResult(DID_ABORT, SAM_STAT_CHECK_CONDITION);
+ cmd->result = 0;
+ set_scsi_result(cmd, DRIVER_SENSE, DID_ABORT, 0,
+ SAM_STAT_CHECK_CONDITION);
phba->bg_guard_err_cnt++;
lpfc_printf_log(phba, KERN_WARNING, LOG_FCP | LOG_BG,
"9069 BLKGRD: LBA %lx grd_tag error %x != %x\n",
@@ -3028,8 +3029,9 @@ lpfc_calc_bg_err(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd)
} else if (err_type == BGS_REFTAG_ERR_MASK) {
scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST,
0x10, 0x3);
- cmd->result = DRIVER_SENSE << 24
- | ScsiResult(DID_ABORT, SAM_STAT_CHECK_CONDITION);
+ cmd->result = 0;
+ set_scsi_result(cmd, DRIVER_SENSE, DID_ABORT, 0,
+ SAM_STAT_CHECK_CONDITION);
phba->bg_reftag_err_cnt++;
lpfc_printf_log(phba, KERN_WARNING, LOG_FCP | LOG_BG,
@@ -3040,8 +3042,9 @@ lpfc_calc_bg_err(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd)
} else if (err_type == BGS_APPTAG_ERR_MASK) {
scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST,
0x10, 0x2);
- cmd->result = DRIVER_SENSE << 24
- | ScsiResult(DID_ABORT, SAM_STAT_CHECK_CONDITION);
+ cmd->result = 0;
+ set_scsi_result(cmd, DRIVER_SENSE, DID_ABORT, 0,
+ SAM_STAT_CHECK_CONDITION);
phba->bg_apptag_err_cnt++;
lpfc_printf_log(phba, KERN_WARNING, LOG_FCP | LOG_BG,
@@ -3096,7 +3099,7 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd,
spin_unlock(&_dump_buf_lock);
if (lpfc_bgs_get_invalid_prof(bgstat)) {
- cmd->result = ScsiResult(DID_ERROR, 0);
+ set_scsi_result(cmd, 0, DID_ERROR, 0, 0);
lpfc_printf_log(phba, KERN_WARNING, LOG_FCP | LOG_BG,
"9072 BLKGRD: Invalid BG Profile in cmd"
" 0x%x lba 0x%llx blk cnt 0x%x "
@@ -3108,7 +3111,7 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd,
}
if (lpfc_bgs_get_uninit_dif_block(bgstat)) {
- cmd->result = ScsiResult(DID_ERROR, 0);
+ set_scsi_result(cmd, 0, DID_ERROR, 0, 0);
lpfc_printf_log(phba, KERN_WARNING, LOG_FCP | LOG_BG,
"9073 BLKGRD: Invalid BG PDIF Block in cmd"
" 0x%x lba 0x%llx blk cnt 0x%x "
@@ -3124,8 +3127,9 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd,
scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST,
0x10, 0x1);
- cmd->result = DRIVER_SENSE << 24
- | ScsiResult(DID_ABORT, SAM_STAT_CHECK_CONDITION);
+ cmd->result = 0;
+ set_scsi_result(cmd, DRIVER_SENSE, DID_ABORT, 0,
+ SAM_STAT_CHECK_CONDITION);
phba->bg_guard_err_cnt++;
lpfc_printf_log(phba, KERN_WARNING, LOG_FCP | LOG_BG,
"9055 BLKGRD: Guard Tag error in cmd"
@@ -3140,9 +3144,9 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd,
scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST,
0x10, 0x3);
- cmd->result = DRIVER_SENSE << 24
- | ScsiResult(DID_ABORT, SAM_STAT_CHECK_CONDITION);
-
+ cmd->result = 0;
+ set_scsi_result(cmd, DRIVER_SENSE, DID_ABORT, 0,
+ SAM_STAT_CHECK_CONDITION);
phba->bg_reftag_err_cnt++;
lpfc_printf_log(phba, KERN_WARNING, LOG_FCP | LOG_BG,
"9056 BLKGRD: Ref Tag error in cmd"
@@ -3157,8 +3161,9 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd,
scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST,
0x10, 0x2);
- cmd->result = DRIVER_SENSE << 24
- | ScsiResult(DID_ABORT, SAM_STAT_CHECK_CONDITION);
+ cmd->result = 0;
+ set_scsi_result(cmd, DRIVER_SENSE, DID_ABORT, 0,
+ SAM_STAT_CHECK_CONDITION);
phba->bg_apptag_err_cnt++;
lpfc_printf_log(phba, KERN_WARNING, LOG_FCP | LOG_BG,
@@ -3866,7 +3871,7 @@ lpfc_handle_fcp_err(struct lpfc_vport *vport, struct lpfc_scsi_buf *lpfc_cmd,
}
out:
- cmnd->result = ScsiResult(host_status, scsi_status);
+ set_scsi_result(cmnd, 0, host_status, 0, scsi_status);
lpfc_send_scsi_error_event(vport->phba, vport, lpfc_cmd, rsp_iocb);
}
@@ -4022,7 +4027,7 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
break;
case IOSTAT_NPORT_BSY:
case IOSTAT_FABRIC_BSY:
- cmd->result = ScsiResult(DID_TRANSPORT_DISRUPTED, 0);
+ set_scsi_result(cmd, 0, DID_TRANSPORT_DISRUPTED, 0, 0);
fast_path_evt = lpfc_alloc_fast_evt(phba);
if (!fast_path_evt)
break;
@@ -4056,14 +4061,14 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
lpfc_cmd->result == IOERR_ELXSEC_CRYPTO_ERROR ||
lpfc_cmd->result ==
IOERR_ELXSEC_CRYPTO_COMPARE_ERROR) {
- cmd->result = ScsiResult(DID_NO_CONNECT, 0);
+ set_scsi_result(cmd, 0, DID_NO_CONNECT, 0, 0);
break;
}
if (lpfc_cmd->result == IOERR_INVALID_RPI ||
lpfc_cmd->result == IOERR_NO_RESOURCES ||
lpfc_cmd->result == IOERR_ABORT_REQUESTED ||
lpfc_cmd->result == IOERR_SLER_CMD_RCV_FAILURE) {
- cmd->result = ScsiResult(DID_REQUEUE, 0);
+ set_scsi_result(cmd, 0, DID_REQUEUE, 0, 0);
break;
}
if ((lpfc_cmd->result == IOERR_RX_DMA_FAILED ||
@@ -4097,16 +4102,16 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
}
/* else: fall through */
default:
- cmd->result = ScsiResult(DID_ERROR, 0);
+ set_scsi_result(cmd, 0, DID_ERROR, 0, 0);
break;
}
if (!pnode || !NLP_CHK_NODE_ACT(pnode)
|| (pnode->nlp_state != NLP_STE_MAPPED_NODE))
- cmd->result = ScsiResult(DID_TRANSPORT_DISRUPTED,
- SAM_STAT_BUSY);
+ set_scsi_result(cmd, 0, DID_TRANSPORT_DISRUPTED, 0,
+ SAM_STAT_BUSY);
} else
- cmd->result = ScsiResult(DID_OK, 0);
+ set_scsi_result(cmd, 0, DID_OK, 0, 0);
if (cmd->result || lpfc_cmd->fcp_rsp->rspSnsLen) {
uint32_t *lp = (uint32_t *)cmd->sense_buffer;
@@ -1586,9 +1586,8 @@ mega_cmd_done(adapter_t *adapter, u8 completed[], int nstatus, int status)
memcpy(cmd->sense_buffer, pthru->reqsensearea,
14);
- cmd->result = (DRIVER_SENSE << 24) |
- (DID_OK << 16) |
- (CHECK_CONDITION << 1);
+ set_scsi_result(cmd, DRIVER_SENSE, DID_OK, 0,
+ CHECK_CONDITION << 1);
}
else {
if (mbox->m_out.cmd == MEGA_MBOXCMD_EXTPTHRU) {
@@ -1596,9 +1595,8 @@ mega_cmd_done(adapter_t *adapter, u8 completed[], int nstatus, int status)
memcpy(cmd->sense_buffer,
epthru->reqsensearea, 14);
- cmd->result = (DRIVER_SENSE << 24) |
- (DID_OK << 16) |
- (CHECK_CONDITION << 1);
+ set_scsi_result(cmd, DRIVER_SENSE, DID_OK, 0,
+ CHECK_CONDITION << 1);
} else {
cmd->sense_buffer[0] = 0x70;
cmd->sense_buffer[2] = ABORTED_COMMAND;
@@ -2347,8 +2347,8 @@ megaraid_mbox_dpc(unsigned long devp)
memcpy(scp->sense_buffer, pthru->reqsensearea,
14);
- scp->result = DRIVER_SENSE << 24 |
- DID_OK << 16 | CHECK_CONDITION << 1;
+ set_scsi_result(scp, DRIVER_SENSE, DID_OK, 0,
+ CHECK_CONDITION << 1);
}
else {
if (mbox->cmd == MBOXCMD_EXTPTHRU) {
@@ -2356,9 +2356,9 @@ megaraid_mbox_dpc(unsigned long devp)
memcpy(scp->sense_buffer,
epthru->reqsensearea, 14);
- scp->result = DRIVER_SENSE << 24 |
- DID_OK << 16 |
- CHECK_CONDITION << 1;
+ set_scsi_result(scp, DRIVER_SENSE,
+ DID_OK, 0,
+ CHECK_CONDITION << 1);
} else {
scp->sense_buffer[0] = 0x70;
scp->sense_buffer[2] = ABORTED_COMMAND;
@@ -2369,7 +2369,7 @@ megaraid_mbox_dpc(unsigned long devp)
case 0x08:
- scp->result = DID_BUS_BUSY << 16 | status;
+ set_scsi_result(scp, 0, DID_BUS_BUSY, 0, status);
break;
default:
@@ -2379,8 +2379,8 @@ megaraid_mbox_dpc(unsigned long devp)
* failed
*/
if (scp->cmnd[0] == TEST_UNIT_READY) {
- scp->result = DID_ERROR << 16 |
- RESERVATION_CONFLICT << 1;
+ set_scsi_result(scp, 0, DID_ERROR, 0,
+ RESERVATION_CONFLICT << 1);
}
else
/*
@@ -2390,11 +2390,12 @@ megaraid_mbox_dpc(unsigned long devp)
if (status == 1 && (scp->cmnd[0] == RESERVE ||
scp->cmnd[0] == RELEASE)) {
- scp->result = DID_ERROR << 16 |
- RESERVATION_CONFLICT << 1;
+ set_scsi_result(scp, 0, DID_ERROR, 0,
+ RESERVATION_CONFLICT << 1);
}
else {
- scp->result = DID_BAD_TARGET << 16 | status;
+ set_scsi_result(scp, 0, DID_BAD_TARGET, 0,
+ status);
}
}
@@ -3294,13 +3294,14 @@ megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd,
case MFI_STAT_SCSI_IO_FAILED:
case MFI_STAT_LD_INIT_IN_PROGRESS:
- cmd->scmd->result =
- (DID_ERROR << 16) | hdr->scsi_status;
+ set_scsi_result(cmd->scmd, 0, DID_ERROR, 0,
+ hdr->scsi_status);
break;
case MFI_STAT_SCSI_DONE_WITH_ERROR:
- cmd->scmd->result = (DID_OK << 16) | hdr->scsi_status;
+ set_scsi_result(cmd->scmd, 0, DID_OK, 0,
+ hdr->scsi_status);
if (hdr->scsi_status == SAM_STAT_CHECK_CONDITION) {
memset(cmd->scmd->sense_buffer, 0,
@@ -1784,12 +1784,12 @@ map_cmd_status(struct fusion_context *fusion,
case MFI_STAT_SCSI_IO_FAILED:
case MFI_STAT_LD_INIT_IN_PROGRESS:
- scmd->result = (DID_ERROR << 16) | ext_status;
+ set_scsi_result(scmd, 0, DID_ERROR, 0, ext_status);
break;
case MFI_STAT_SCSI_DONE_WITH_ERROR:
- scmd->result = (DID_OK << 16) | ext_status;
+ set_scsi_result(scmd, 0, DID_OK, 0, ext_status);
if (ext_status == SAM_STAT_CHECK_CONDITION) {
memset(scmd->sense_buffer, 0,
SCSI_SENSE_BUFFERSIZE);
@@ -594,7 +594,7 @@ static void mesh_done(struct mesh_state *ms, int start_next)
ms->current_req = NULL;
tp->current_req = NULL;
if (cmd) {
- cmd->result = (ms->stat << 16) + cmd->SCp.Status;
+ set_scsi_result(cmd, 0, ms->stat, 0, cmd->SCp.Status);
if (ms->stat == DID_OK)
cmd->result += (cmd->SCp.Message << 8);
if (DEBUG_TARGET(cmd)) {
@@ -4557,8 +4557,8 @@ _scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
}
scsi_build_sense_buffer(0, scmd->sense_buffer, ILLEGAL_REQUEST, 0x10,
ascq);
- scmd->result = DRIVER_SENSE << 24 | (DID_ABORT << 16) |
- SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(scmd, DRIVER_SENSE, DID_ABORT, 0,
+ SAM_STAT_CHECK_CONDITION);
}
/**
@@ -5323,11 +5323,11 @@ _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
if ((xfer_cnt == 0) || (scmd->underflow > xfer_cnt))
scmd->result = DID_SOFT_ERROR << 16;
else
- scmd->result = (DID_OK << 16) | scsi_status;
+ set_scsi_result(scmd, 0, DID_OK, 0, scsi_status);
break;
case MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN:
- scmd->result = (DID_OK << 16) | scsi_status;
+ set_scsi_result(scmd, 0, DID_OK, 0, scsi_status);
if ((scsi_state & MPI2_SCSI_STATE_AUTOSENSE_VALID))
break;
@@ -5345,8 +5345,8 @@ _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
else if (!xfer_cnt && scmd->cmnd[0] == REPORT_LUNS) {
mpi_reply->SCSIState = MPI2_SCSI_STATE_AUTOSENSE_VALID;
mpi_reply->SCSIStatus = SAM_STAT_CHECK_CONDITION;
- scmd->result = (DRIVER_SENSE << 24) |
- SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(scmd, DRIVER_SENSE, 0, 0,
+ SAM_STAT_CHECK_CONDITION);
scmd->sense_buffer[0] = 0x70;
scmd->sense_buffer[2] = ILLEGAL_REQUEST;
scmd->sense_buffer[12] = 0x20;
@@ -5358,7 +5358,7 @@ _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
scsi_set_resid(scmd, 0);
case MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR:
case MPI2_IOCSTATUS_SUCCESS:
- scmd->result = (DID_OK << 16) | scsi_status;
+ set_scsi_result(scmd, 0, DID_OK, 0, scsi_status);
if (response_code ==
MPI2_SCSITASKMGMT_RSP_INVALID_FRAME ||
(scsi_state & (MPI2_SCSI_STATE_AUTOSENSE_FAILED |
@@ -2081,8 +2081,8 @@ static unsigned char mvumi_build_frame(struct mvumi_hba *mhba,
return 0;
error:
- scmd->result = (DID_OK << 16) | (DRIVER_SENSE << 24) |
- SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(scmd, DRIVER_SENSE, DID_OK, 0,
+ SAM_STAT_CHECK_CONDITION);
scsi_build_sense_buffer(0, scmd->sense_buffer, ILLEGAL_REQUEST, 0x24,
0);
return -1;
@@ -2145,7 +2145,7 @@ static enum blk_eh_timer_return mvumi_timed_out(struct scsi_cmnd *scmd)
else
atomic_dec(&mhba->fw_outstanding);
- scmd->result = (DRIVER_INVALID << 24) | (DID_ABORT << 16);
+ set_scsi_result(scmd, DRIVER_INVALID, DID_ABORT, 0, 0);
scmd->SCp.ptr = NULL;
if (scsi_bufflen(scmd)) {
pci_unmap_sg(mhba->pdev, scsi_sglist(scmd),
@@ -1010,8 +1010,6 @@ typedef u32 tagmap_t;
** Other definitions
*/
-#define ScsiResult(host_code, scsi_code) (((host_code) << 16) + ((scsi_code) & 0x7f))
-
#define initverbose (driver_setup.verbose)
#define bootverbose (np->verbose)
@@ -4611,7 +4609,7 @@ static int ncr_reset_bus (struct ncb *np, struct scsi_cmnd *cmd, int sync_reset)
* in order to keep it alive.
*/
if (!found && sync_reset && !retrieve_from_waiting_list(0, np, cmd)) {
- cmd->result = ScsiResult(DID_RESET, 0);
+ set_scsi_result(cmd, 0, DID_RESET, 0, 0);
ncr_queue_done_cmd(np, cmd);
}
@@ -4922,7 +4920,7 @@ void ncr_complete (struct ncb *np, struct ccb *cp)
* CONDITION MET status is returned on
* `Pre-Fetch' or `Search data' success.
*/
- cmd->result = ScsiResult(DID_OK, cp->scsi_status);
+ set_scsi_result(cmd, 0, DID_OK, 0, cp->scsi_status);
/*
** @RESID@
@@ -4957,7 +4955,7 @@ void ncr_complete (struct ncb *np, struct ccb *cp)
/*
** Check condition code
*/
- cmd->result = ScsiResult(DID_OK, S_CHECK_COND);
+ set_scsi_result(cmd, 0, DID_OK, 0, S_CHECK_COND);
/*
** Copy back sense data to caller's buffer.
@@ -4978,7 +4976,7 @@ void ncr_complete (struct ncb *np, struct ccb *cp)
/*
** Reservation Conflict condition code
*/
- cmd->result = ScsiResult(DID_OK, S_CONFLICT);
+ set_scsi_result(cmd, 0, DID_OK, 0, S_CONFLICT);
} else if ((cp->host_status == HS_COMPLETE)
&& (cp->scsi_status == S_BUSY ||
@@ -4987,7 +4985,7 @@ void ncr_complete (struct ncb *np, struct ccb *cp)
/*
** Target is busy.
*/
- cmd->result = ScsiResult(DID_OK, cp->scsi_status);
+ set_scsi_result(cmd, 0, DID_OK, 0, cp->scsi_status);
} else if ((cp->host_status == HS_SEL_TIMEOUT)
|| (cp->host_status == HS_TIMEOUT)) {
@@ -4995,21 +4993,21 @@ void ncr_complete (struct ncb *np, struct ccb *cp)
/*
** No response
*/
- cmd->result = ScsiResult(DID_TIME_OUT, cp->scsi_status);
+ set_scsi_result(cmd, 0, DID_TIME_OUT, 0, cp->scsi_status);
} else if (cp->host_status == HS_RESET) {
/*
** SCSI bus reset
*/
- cmd->result = ScsiResult(DID_RESET, cp->scsi_status);
+ set_scsi_result(cmd, 0, DID_RESET, 0, cp->scsi_status);
} else if (cp->host_status == HS_ABORTED) {
/*
** Transfer aborted
*/
- cmd->result = ScsiResult(DID_ABORT, cp->scsi_status);
+ set_scsi_result(cmd, 0, DID_ABORT, 0, cp->scsi_status);
} else {
@@ -5019,7 +5017,7 @@ void ncr_complete (struct ncb *np, struct ccb *cp)
PRINT_ADDR(cmd, "COMMAND FAILED (%x %x) @%p.\n",
cp->host_status, cp->scsi_status, cp);
- cmd->result = ScsiResult(DID_ERROR, cp->scsi_status);
+ set_scsi_result(cmd, 0, DID_ERROR, 0, cp->scsi_status);
}
/*
@@ -8043,7 +8041,7 @@ printk("ncr53c8xx_queue_command\n");
spin_lock_irqsave(&np->smp_lock, flags);
if ((sts = ncr_queue_command(np, cmd)) != DID_OK) {
- cmd->result = ScsiResult(sts, 0);
+ set_scsi_result(cmd, 0, sts, 0, 0);
#ifdef DEBUG_NCR53C8XX
printk("ncr53c8xx : command not queued - result=%d\n", sts);
#endif
@@ -8234,7 +8232,7 @@ static void process_waiting_list(struct ncb *np, int sts)
#ifdef DEBUG_WAITING_LIST
printk("%s: cmd %lx done forced sts=%d\n", ncr_name(np), (u_long) wcmd, sts);
#endif
- wcmd->result = ScsiResult(sts, 0);
+ set_scsi_result(wcmd, 0, sts, 0, 0);
ncr_queue_done_cmd(np, wcmd);
}
}
@@ -1680,9 +1680,8 @@ static int nsp32_busfree_occur(struct scsi_cmnd *SCpnt, unsigned short execph)
nsp32_dbg(NSP32_DEBUG_BUSFREE,
"normal end stat=0x%x resid=0x%x\n",
SCpnt->SCp.Status, scsi_get_resid(SCpnt));
- SCpnt->result = (DID_OK << 16) |
- (SCpnt->SCp.Message << 8) |
- (SCpnt->SCp.Status << 0);
+ set_scsi_result(SCpnt, 0, DID_OK, SCpnt->SCp.Message,
+ SCpnt->SCp.Status);
nsp32_scsi_done(SCpnt);
/* All operation is done */
return TRUE;
@@ -1035,9 +1035,9 @@ static irqreturn_t nspintr(int irq, void *dev_id)
if(data->CurrentSC != NULL) {
tmpSC = data->CurrentSC;
- tmpSC->result = (DID_RESET << 16) |
- ((tmpSC->SCp.Message & 0xff) << 8) |
- ((tmpSC->SCp.Status & 0xff) << 0);
+ set_scsi_result(tmpSC, 0, DID_RESET,
+ tmpSC->SCp.Message & 0xff,
+ tmpSC->SCp.Status & 0xff);
nsp_scsi_done(tmpSC);
}
return IRQ_HANDLED;
@@ -1135,9 +1135,9 @@ static irqreturn_t nspintr(int irq, void *dev_id)
//*sync_neg = SYNC_NOT_YET;
if ((tmpSC->SCp.Message == MSG_COMMAND_COMPLETE)) { /* all command complete and return status */
- tmpSC->result = (DID_OK << 16) |
- ((tmpSC->SCp.Message & 0xff) << 8) |
- ((tmpSC->SCp.Status & 0xff) << 0);
+ set_scsi_result(tmpSC, 0, DID_OK,
+ tmpSC->SCp.Message & 0xff,
+ tmpSC->SCp.Status & 0xff);
nsp_dbg(NSP_DEBUG_INTR, "command complete result=0x%x", tmpSC->result);
nsp_scsi_done(tmpSC);
@@ -409,8 +409,8 @@ SYM53C500_intr(int irq, void *dev_id)
if (curSC->SCp.phase != message_in) { /* Unexpected disconnect */
curSC->result = DID_NO_CONNECT << 16;
} else { /* Command complete, return status and message */
- curSC->result = (curSC->SCp.Status & 0xff)
- | ((curSC->SCp.Message & 0xff) << 8) | (DID_OK << 16);
+ set_scsi_result(curSC, 0, DID_OK, 0,
+ (curSC->SCp.Status & 0xff) | ((curSC->SCp.Message & 0xff) << 8));
}
goto idle_out;
}
@@ -774,8 +774,7 @@ static int ppa_engine(ppa_struct *dev, struct scsi_cmnd *cmd)
/* Check for optional message byte */
if (ppa_wait(dev) == (unsigned char) 0xf0)
ppa_in(dev, &h, 1);
- cmd->result =
- (DID_OK << 16) + (h << 8) + (l & STATUS_MASK);
+ set_scsi_result(cmd, 0, DID_OK, h, l & STATUS_MASK);
}
return 0; /* Finished */
break;
@@ -322,7 +322,8 @@ static irqreturn_t ps3rom_interrupt(int irq, void *data)
/* SCSI spec says request sense should never get error */
dev_err(&dev->sbd.core, "%s:%u: end error without autosense\n",
__func__, __LINE__);
- cmd->result = DID_ERROR << 16 | SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(cmd, 0, DID_ERROR, 0,
+ SAM_STAT_CHECK_CONDITION);
goto done;
}
@@ -1138,16 +1138,19 @@ void qedf_scsi_completion(struct qedf_ctx *qedf, struct fcoe_cqe *cqe,
cqe->cqe_info.rsp_info.fw_residual);
if (io_req->cdb_status == 0)
- sc_cmd->result = (DID_ERROR << 16) | io_req->cdb_status;
+ set_scsi_result(sc_cmd, 0, DID_ERROR, 0,
+ io_req->cdb_status);
else
- sc_cmd->result = (DID_OK << 16) | io_req->cdb_status;
+ set_scsi_result(sc_cmd, 0, DID_OK, 0,
+ io_req->cdb_status);
/* Abort the command since we did not get all the data */
init_completion(&io_req->abts_done);
rval = qedf_initiate_abts(io_req, true);
if (rval) {
QEDF_ERR(&(qedf->dbg_ctx), "Failed to queue ABTS.\n");
- sc_cmd->result = (DID_ERROR << 16) | io_req->cdb_status;
+ set_scsi_result(sc_cmd, 0, DID_ERROR, 0,
+ io_req->cdb_status);
}
/*
@@ -1175,7 +1178,8 @@ void qedf_scsi_completion(struct qedf_ctx *qedf, struct fcoe_cqe *cqe,
sc_cmd->cmnd[4], sc_cmd->cmnd[5],
io_req->cdb_status, io_req->fcp_resid,
refcount);
- sc_cmd->result = (DID_OK << 16) | io_req->cdb_status;
+ set_scsi_result(sc_cmd, 0, DID_OK, 0,
+ io_req->cdb_status);
if (io_req->cdb_status == SAM_STAT_TASK_SET_FULL ||
io_req->cdb_status == SAM_STAT_BUSY) {
@@ -181,7 +181,7 @@ static void qla4xxx_status_entry(struct scsi_qla_host *ha,
}
}
- cmd->result = DID_OK << 16 | scsi_status;
+ set_scsi_result(cmd, 0, DID_OK, 0, scsi_status);
if (scsi_status != SCSI_CHECK_CONDITION)
break;
@@ -299,11 +299,11 @@ static void qla4xxx_status_entry(struct scsi_qla_host *ha,
residual,
scsi_bufflen(cmd)));
- cmd->result = DID_ERROR << 16 | scsi_status;
+ set_scsi_result(cmd, 0, DID_ERROR, 0, scsi_status);
goto check_scsi_status;
}
- cmd->result = DID_OK << 16 | scsi_status;
+ set_scsi_result(cmd, 0, DID_OK, 0, scsi_status);
check_scsi_status:
if (scsi_status == SAM_STAT_CHECK_CONDITION)
@@ -332,7 +332,7 @@ static void qla4xxx_status_entry(struct scsi_qla_host *ha,
/*
* SCSI Mid-Layer handles device queue full
*/
- cmd->result = DID_OK << 16 | sts_entry->scsiStatus;
+ set_scsi_result(cmd, 0, DID_OK, 0, sts_entry->scsiStatus);
DEBUG2(printk("scsi%ld:%d:%llu: %s: QUEUE FULL detected "
"compl=%02x, scsi=%02x, state=%02x, iFlags=%02x,"
" iResp=%02x\n", ha->host_no, cmd->device->id,
@@ -476,7 +476,7 @@ snic_process_io_failed_state(struct snic *snic,
snic_io_status_to_str(cmpl_stat), CMD_FLAGS(sc));
/* Set sc->result */
- sc->result = (res << 16) | icmnd_cmpl->scsi_status;
+ set_scsi_result(sc, 0, res, 0, icmnd_cmpl->scsi_status);
} /* end of snic_process_io_failed_state */
/*
@@ -509,7 +509,7 @@ snic_process_icmnd_cmpl_status(struct snic *snic,
CMD_STATE(sc) = SNIC_IOREQ_COMPLETE;
if (likely(cmpl_stat == SNIC_STAT_IO_SUCCESS)) {
- sc->result = (DID_OK << 16) | scsi_stat;
+ set_scsi_result(sc, 0, DID_OK, 0, scsi_stat);
xfer_len = scsi_bufflen(sc);
@@ -403,7 +403,7 @@ static struct status_msg *stex_get_status(struct st_hba *hba)
static void stex_invalid_field(struct scsi_cmnd *cmd,
void (*done)(struct scsi_cmnd *))
{
- cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(cmd, DRIVER_SENSE, 0, 0, SAM_STAT_CHECK_CONDITION);
/* "Invalid field in cdb" */
scsi_build_sense_buffer(0, cmd->sense_buffer, ILLEGAL_REQUEST, 0x24,
@@ -630,7 +630,7 @@ stex_queuecommand_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
if (page == 0x8 || page == 0x3f) {
scsi_sg_copy_from_buffer(cmd, ms10_caching_page,
sizeof(ms10_caching_page));
- cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(cmd, 0, DID_OK, COMMAND_COMPLETE, 0);
done(cmd);
} else
stex_invalid_field(cmd, done);
@@ -649,7 +649,7 @@ stex_queuecommand_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
break;
case TEST_UNIT_READY:
if (id == host->max_id - 1) {
- cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(cmd, 0, DID_OK, COMMAND_COMPLETE, 0);
done(cmd);
return 0;
}
@@ -666,7 +666,7 @@ stex_queuecommand_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
(cmd->cmnd[1] & INQUIRY_EVPD) == 0) {
scsi_sg_copy_from_buffer(cmd, (void *)console_inq_page,
sizeof(console_inq_page));
- cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
+ set_scsi_result(cmd, 0, DID_OK, COMMAND_COMPLETE, 0);
done(cmd);
} else
stex_invalid_field(cmd, done);
@@ -684,9 +684,12 @@ stex_queuecommand_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
ver.console_id = host->max_id - 1;
ver.host_no = hba->host->host_no;
cp_len = scsi_sg_copy_from_buffer(cmd, &ver, cp_len);
- cmd->result = sizeof(ver) == cp_len ?
- DID_OK << 16 | COMMAND_COMPLETE << 8 :
- DID_ERROR << 16 | COMMAND_COMPLETE << 8;
+ if (cp_len == sizeof(ver))
+ set_scsi_result(cmd, 0, DID_OK,
+ COMMAND_COMPLETE, 0);
+ else
+ set_scsi_result(cmd, 0, DID_ERROR,
+ COMMAND_COMPLETE, 0);
done(cmd);
return 0;
}
@@ -252,7 +252,7 @@ void sym_set_cam_result_error(struct sym_hcb *np, struct sym_ccb *cp, int resid)
cam_status = sym_xerr_cam_status(DID_ERROR, cp->xerr_status);
}
scsi_set_resid(cmd, resid);
- cmd->result = (drv_status << 24) + (cam_status << 16) + scsi_status;
+ set_scsi_result(cmd, drv_status, cam_status, 0, scsi_status);
}
static int sym_scatter(struct sym_hcb *np, struct sym_ccb *cp, struct scsi_cmnd *cmd)
@@ -256,7 +256,7 @@ sym_get_cam_status(struct scsi_cmnd *cmd)
static inline void sym_set_cam_result_ok(struct sym_ccb *cp, struct scsi_cmnd *cmd, int resid)
{
scsi_set_resid(cmd, resid);
- cmd->result = (((DID_OK) << 16) + ((cp->ssss_status) & 0x7f));
+ set_scsi_result(cmd, 0, DID_OK, 0, cp->ssss_status & 0x7f);
}
void sym_set_cam_result_error(struct sym_hcb *np, struct sym_ccb *cp, int resid);
@@ -561,7 +561,7 @@ static void pvscsi_complete_request(struct pvscsi_adapter *adapter,
(btstat == BTSTAT_SUCCESS ||
btstat == BTSTAT_LINKED_COMMAND_COMPLETED ||
btstat == BTSTAT_LINKED_COMMAND_COMPLETED_WITH_FLAG)) {
- cmd->result = (DID_OK << 16) | sdstat;
+ set_scsi_result(cmd, 0, DID_OK, 0, sdstat);
if (sdstat == SAM_STAT_CHECK_CONDITION && cmd->sense_buffer)
cmd->result |= (DRIVER_SENSE << 24);
} else
@@ -1186,9 +1186,8 @@ wd33c93_intr(struct Scsi_Host *instance)
cmd->SCp.Status = lun;
if (cmd->cmnd[0] == REQUEST_SENSE
&& cmd->SCp.Status != GOOD)
- cmd->result =
- (cmd->
- result & 0x00ffff) | (DID_ERROR << 16);
+ set_scsi_result(cmd, 0, DID_ERROR, 0,
+ (cmd->result & 0x00ffff));
else
cmd->result =
cmd->SCp.Status | (cmd->SCp.Message << 8);
@@ -1272,10 +1271,11 @@ wd33c93_intr(struct Scsi_Host *instance)
hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
hostdata->state = S_UNCONNECTED;
if (cmd->cmnd[0] == REQUEST_SENSE && cmd->SCp.Status != GOOD)
- cmd->result =
- (cmd->result & 0x00ffff) | (DID_ERROR << 16);
+ set_scsi_result(cmd, 0, DID_ERROR, 0,
+ (cmd->result & 0x00ffff));
else
- cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8);
+ set_scsi_result(cmd,0, 0, cmd->SCp.Message,
+ cmd->SCp.Status);
cmd->scsi_done(cmd);
/* We are no longer connected to a target - check to see if
@@ -1306,9 +1306,8 @@ wd33c93_intr(struct Scsi_Host *instance)
DB(DB_INTR, printk(":%d", cmd->SCp.Status))
if (cmd->cmnd[0] == REQUEST_SENSE
&& cmd->SCp.Status != GOOD)
- cmd->result =
- (cmd->
- result & 0x00ffff) | (DID_ERROR << 16);
+ set_scsi_result(cmd, 0, DID_ERROR, 0,
+ (cmd->result & 0x00ffff));
else
cmd->result =
cmd->SCp.Status | (cmd->SCp.Message << 8);
@@ -220,11 +220,12 @@ static void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct us_data *us)
desc[12] = regs[6]; /* device */
desc[13] = regs[7]; /* command */
- srb->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(srb, DRIVER_SENSE, 0, 0,
+ SAM_STAT_CHECK_CONDITION);
}
goto end;
invalid_fld:
- srb->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
+ set_scsi_result(srb, DRIVER_SENSE, 0, 0, SAM_STAT_CHECK_CONDITION);
memcpy(srb->sense_buffer,
usb_stor_sense_invalidCDB,
@@ -355,6 +355,14 @@ static inline void set_driver_byte(struct scsi_cmnd *cmd,
cmd->result = (cmd->result & 0x00ffffff) | (status << 24);
}
+static inline void set_scsi_result(struct scsi_cmnd *cmd,
+ enum scsi_driver_byte db,
+ enum scsi_host_byte hb,
+ enum scsi_msg_byte mb, char status)
+{
+ cmd->result = db << 24 | hb << 16 | mb << 8 | status;
+}
+
static inline unsigned scsi_transfer_length(struct scsi_cmnd *scmd)
{
unsigned int xfer_len = scsi_out(scmd)->length;
Introduce set_scsi_result() for setting the bytes of the scsi_cmnd's result filed and flip over all users that set at least two bytes to using it. The conversion has been done using the following coccinelle spatch: <SmPL> @@ struct scsi_cmnd *c; expression E1, E2, E3, E4; @@ ( - c->result = E1 << 24 | E2 << 16 | E3 << 8 | E4; + set_scsi_result(c, E1, E2, E3, E4); | - c->result = E1 << 24 | E2 << 16 | E3 << 8; + set_scsi_result(c, E1, E2, E3, 0); | - c->result = E2 << 16 | E3 << 8 | E4; + set_scsi_result(c, 0, E2, E3, E4); | - c->result = E2 << 16 | E3 << 8; + set_scsi_result(c, 0, E2, E3, 0); | - c->result = (E2 << 16) | E4; + set_scsi_result(c, 0, E2, 0, E4); | - c->result = (E2 << 16) | (E4); + set_scsi_result(c, 0, E2, 0, E4); ) @@ struct scsi_cmnd *c; expression E1, E2; identifier ScsiResult; @@ -c->result = ScsiResult(E1, E2); +set_scsi_result(c, 0, E1, 0, E2); @@ identifier ScsiResult, host_code,scsi_code; @@ ( -#define ScsiResult(host_code, scsi_code) (((host_code) << 16) | scsi_code) | -#define ScsiResult(host_code, scsi_code) (((host_code) << 16) + ((scsi_code) & 0x7f)) ) </SmPL> Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de> --- drivers/ata/libata-scsi.c | 8 +- drivers/infiniband/ulp/srp/ib_srp.c | 7 +- drivers/message/fusion/mptscsih.c | 6 +- drivers/scsi/3w-9xxx.c | 3 +- drivers/scsi/3w-xxxx.c | 9 +- drivers/scsi/NCR5380.c | 6 +- drivers/scsi/a100u2w.c | 2 +- drivers/scsi/aacraid/aachba.c | 200 +++++++++++++++------------- drivers/scsi/aacraid/commsup.c | 5 +- drivers/scsi/advansys.c | 26 ++-- drivers/scsi/arcmsr/arcmsr_hba.c | 5 +- drivers/scsi/arm/acornscsi.c | 3 +- drivers/scsi/arm/fas216.c | 4 +- drivers/scsi/be2iscsi/be_main.c | 2 +- drivers/scsi/bfa/bfad_im.c | 16 +-- drivers/scsi/bfa/bfad_im.h | 1 - drivers/scsi/bnx2fc/bnx2fc_io.c | 6 +- drivers/scsi/csiostor/csio_scsi.c | 4 +- drivers/scsi/cxlflash/main.c | 3 +- drivers/scsi/dc395x.c | 23 ++-- drivers/scsi/dpt_i2o.c | 4 +- drivers/scsi/esas2r/esas2r_main.c | 7 +- drivers/scsi/esp_scsi.c | 7 +- drivers/scsi/fnic/fnic_scsi.c | 22 +-- drivers/scsi/gdth.c | 17 ++- drivers/scsi/hptiop.c | 2 +- drivers/scsi/imm.c | 2 +- drivers/scsi/initio.c | 2 +- drivers/scsi/ips.c | 5 +- drivers/scsi/libfc/fc_fcp.c | 9 +- drivers/scsi/libiscsi.c | 18 ++- drivers/scsi/libsas/sas_scsi_host.c | 2 +- drivers/scsi/lpfc/lpfc_crtn.h | 1 - drivers/scsi/lpfc/lpfc_scsi.c | 51 +++---- drivers/scsi/megaraid.c | 10 +- drivers/scsi/megaraid/megaraid_mbox.c | 23 ++-- drivers/scsi/megaraid/megaraid_sas_base.c | 7 +- drivers/scsi/megaraid/megaraid_sas_fusion.c | 4 +- drivers/scsi/mesh.c | 2 +- drivers/scsi/mpt3sas/mpt3sas_scsih.c | 14 +- drivers/scsi/mvumi.c | 6 +- drivers/scsi/ncr53c8xx.c | 24 ++-- drivers/scsi/nsp32.c | 5 +- drivers/scsi/pcmcia/nsp_cs.c | 12 +- drivers/scsi/pcmcia/sym53c500_cs.c | 4 +- drivers/scsi/ppa.c | 3 +- drivers/scsi/ps3rom.c | 3 +- drivers/scsi/qedf/qedf_io.c | 12 +- drivers/scsi/qla4xxx/ql4_isr.c | 8 +- drivers/scsi/snic/snic_scsi.c | 4 +- drivers/scsi/stex.c | 17 ++- drivers/scsi/sym53c8xx_2/sym_glue.c | 2 +- drivers/scsi/sym53c8xx_2/sym_glue.h | 2 +- drivers/scsi/vmw_pvscsi.c | 2 +- drivers/scsi/wd33c93.c | 17 ++- drivers/usb/storage/cypress_atacb.c | 5 +- include/scsi/scsi_cmnd.h | 8 ++ 57 files changed, 360 insertions(+), 322 deletions(-)