Lines Matching refs:scmd

60 static int scsi_eh_try_stu(struct scsi_cmnd *scmd);
149 struct scsi_cmnd *scmd = in scmd_eh_abort_handler() local
151 struct scsi_device *sdev = scmd->device; in scmd_eh_abort_handler()
158 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler()
164 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler()
166 rtn = scsi_try_to_abort_cmd(shost->hostt, scmd); in scmd_eh_abort_handler()
169 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler()
175 set_host_byte(scmd, DID_TIME_OUT); in scmd_eh_abort_handler()
178 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler()
185 list_del_init(&scmd->eh_entry); in scmd_eh_abort_handler()
198 if (!scsi_noretry_cmd(scmd) && in scmd_eh_abort_handler()
199 scsi_cmd_retry_allowed(scmd) && in scmd_eh_abort_handler()
200 scsi_eh_should_retry_cmd(scmd)) { in scmd_eh_abort_handler()
202 scmd_printk(KERN_WARNING, scmd, in scmd_eh_abort_handler()
204 scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY); in scmd_eh_abort_handler()
207 scmd_printk(KERN_WARNING, scmd, in scmd_eh_abort_handler()
209 scsi_finish_command(scmd); in scmd_eh_abort_handler()
215 list_del_init(&scmd->eh_entry); in scmd_eh_abort_handler()
218 scsi_eh_scmd_add(scmd); in scmd_eh_abort_handler()
228 scsi_abort_command(struct scsi_cmnd *scmd) in scsi_abort_command() argument
230 struct scsi_device *sdev = scmd->device; in scsi_abort_command()
239 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) { in scsi_abort_command()
244 scmd_printk(KERN_INFO, scmd, in scsi_abort_command()
246 BUG_ON(delayed_work_pending(&scmd->abort_work)); in scsi_abort_command()
253 BUG_ON(!list_empty(&scmd->eh_entry)); in scsi_abort_command()
254 list_add_tail(&scmd->eh_entry, &shost->eh_abort_list); in scsi_abort_command()
257 scmd->eh_eflags |= SCSI_EH_ABORT_SCHEDULED; in scsi_abort_command()
259 scmd_printk(KERN_INFO, scmd, "abort scheduled\n")); in scsi_abort_command()
260 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100); in scsi_abort_command()
272 static void scsi_eh_reset(struct scsi_cmnd *scmd) in scsi_eh_reset() argument
274 if (!blk_rq_is_passthrough(scsi_cmd_to_rq(scmd))) { in scsi_eh_reset()
275 struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd); in scsi_eh_reset()
277 sdrv->eh_reset(scmd); in scsi_eh_reset()
283 struct scsi_cmnd *scmd = container_of(head, typeof(*scmd), rcu); in scsi_eh_inc_host_failed() local
284 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_inc_host_failed()
307 void scsi_eh_scmd_add(struct scsi_cmnd *scmd) in scsi_eh_scmd_add() argument
309 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_scmd_add()
314 WARN_ON_ONCE(!test_bit(SCMD_STATE_INFLIGHT, &scmd->state)); in scsi_eh_scmd_add()
324 scsi_eh_reset(scmd); in scsi_eh_scmd_add()
325 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q); in scsi_eh_scmd_add()
331 call_rcu_hurry(&scmd->rcu, scsi_eh_inc_host_failed); in scsi_eh_scmd_add()
346 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req); in scsi_timeout() local
347 struct Scsi_Host *host = scmd->device->host; in scsi_timeout()
349 trace_scsi_dispatch_cmd_timeout(scmd); in scsi_timeout()
350 scsi_log_completion(scmd, TIMEOUT_ERROR); in scsi_timeout()
352 atomic_inc(&scmd->device->iotmo_cnt); in scsi_timeout()
357 switch (host->hostt->eh_timed_out(scmd)) { in scsi_timeout()
371 if (test_and_set_bit(SCMD_STATE_COMPLETE, &scmd->state)) in scsi_timeout()
373 atomic_inc(&scmd->device->iodone_cnt); in scsi_timeout()
374 if (scsi_abort_command(scmd) != SUCCESS) { in scsi_timeout()
375 set_host_byte(scmd, DID_TIME_OUT); in scsi_timeout()
376 scsi_eh_scmd_add(scmd); in scsi_timeout()
414 struct scsi_cmnd *scmd; in scsi_eh_prt_fail_stats() local
422 list_for_each_entry(scmd, work_q, eh_entry) { in scsi_eh_prt_fail_stats()
423 if (scmd->device == sdev) { in scsi_eh_prt_fail_stats()
425 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) in scsi_eh_prt_fail_stats()
548 enum scsi_disposition scsi_check_sense(struct scsi_cmnd *scmd) in scsi_check_sense() argument
550 struct request *req = scsi_cmd_to_rq(scmd); in scsi_check_sense()
551 struct scsi_device *sdev = scmd->device; in scsi_check_sense()
554 if (! scsi_command_normalize_sense(scmd, &sshdr)) in scsi_check_sense()
583 if (scmd->cmnd[0] == TEST_UNIT_READY && in scsi_check_sense()
584 scmd->submitter != SUBMITTED_BY_SCSI_ERROR_HANDLER) in scsi_check_sense()
598 if (scmd->sense_buffer[2] & 0xe0) in scsi_check_sense()
607 (scmd->sense_buffer[8] == 0x4) && in scsi_check_sense()
608 (scmd->sense_buffer[11] & 0xe0)) in scsi_check_sense()
632 set_scsi_ml_byte(scmd, SCSIML_STAT_DL_TIMEOUT); in scsi_check_sense()
653 if (scmd->device->expecting_cc_ua) { in scsi_check_sense()
661 scmd->device->expecting_cc_ua = 0; in scsi_check_sense()
670 if (scmd->device->sdev_target->expecting_lun_change && in scsi_check_sense()
684 if (scmd->device->allow_restart && in scsi_check_sense()
697 set_scsi_ml_byte(scmd, SCSIML_STAT_NOSPC); in scsi_check_sense()
705 set_scsi_ml_byte(scmd, SCSIML_STAT_TGT_FAILURE); in scsi_check_sense()
712 set_scsi_ml_byte(scmd, SCSIML_STAT_MED_ERROR); in scsi_check_sense()
718 if (scmd->device->retry_hwerror) in scsi_check_sense()
721 set_scsi_ml_byte(scmd, SCSIML_STAT_TGT_FAILURE); in scsi_check_sense()
731 set_scsi_ml_byte(scmd, SCSIML_STAT_TGT_FAILURE); in scsi_check_sense()
744 set_scsi_ml_byte(scmd, SCSIML_STAT_DL_TIMEOUT); in scsi_check_sense()
822 static enum scsi_disposition scsi_eh_completed_normally(struct scsi_cmnd *scmd) in scsi_eh_completed_normally() argument
828 if (host_byte(scmd->result) == DID_RESET) { in scsi_eh_completed_normally()
835 return scsi_check_sense(scmd); in scsi_eh_completed_normally()
837 if (host_byte(scmd->result) != DID_OK) in scsi_eh_completed_normally()
844 switch (get_status_byte(scmd)) { in scsi_eh_completed_normally()
846 scsi_handle_queue_ramp_up(scmd->device); in scsi_eh_completed_normally()
847 if (scmd->sense_buffer && SCSI_SENSE_VALID(scmd)) in scsi_eh_completed_normally()
854 scsi_check_sense(scmd); in scsi_eh_completed_normally()
859 return scsi_check_sense(scmd); in scsi_eh_completed_normally()
868 if (scmd->cmnd[0] == TEST_UNIT_READY) in scsi_eh_completed_normally()
875 scsi_handle_queue_full(scmd->device); in scsi_eh_completed_normally()
889 void scsi_eh_done(struct scsi_cmnd *scmd) in scsi_eh_done() argument
893 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_eh_done()
894 "%s result: %x\n", __func__, scmd->result)); in scsi_eh_done()
896 eh_action = scmd->device->host->eh_action; in scsi_eh_done()
905 static enum scsi_disposition scsi_try_host_reset(struct scsi_cmnd *scmd) in scsi_try_host_reset() argument
909 struct Scsi_Host *host = scmd->device->host; in scsi_try_host_reset()
918 rtn = hostt->eh_host_reset_handler(scmd); in scsi_try_host_reset()
924 scsi_report_bus_reset(host, scmd_channel(scmd)); in scsi_try_host_reset()
935 static enum scsi_disposition scsi_try_bus_reset(struct scsi_cmnd *scmd) in scsi_try_bus_reset() argument
939 struct Scsi_Host *host = scmd->device->host; in scsi_try_bus_reset()
942 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_try_bus_reset()
948 rtn = hostt->eh_bus_reset_handler(scmd); in scsi_try_bus_reset()
954 scsi_report_bus_reset(host, scmd_channel(scmd)); in scsi_try_bus_reset()
977 static enum scsi_disposition scsi_try_target_reset(struct scsi_cmnd *scmd) in scsi_try_target_reset() argument
981 struct Scsi_Host *host = scmd->device->host; in scsi_try_target_reset()
987 rtn = hostt->eh_target_reset_handler(scmd); in scsi_try_target_reset()
990 __starget_for_each_device(scsi_target(scmd->device), NULL, in scsi_try_target_reset()
1008 static enum scsi_disposition scsi_try_bus_device_reset(struct scsi_cmnd *scmd) in scsi_try_bus_device_reset() argument
1011 const struct scsi_host_template *hostt = scmd->device->host->hostt; in scsi_try_bus_device_reset()
1016 rtn = hostt->eh_device_reset_handler(scmd); in scsi_try_bus_device_reset()
1018 __scsi_report_device_reset(scmd->device, NULL); in scsi_try_bus_device_reset()
1040 scsi_try_to_abort_cmd(const struct scsi_host_template *hostt, struct scsi_cmnd *scmd) in scsi_try_to_abort_cmd() argument
1045 return hostt->eh_abort_handler(scmd); in scsi_try_to_abort_cmd()
1048 static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd) in scsi_abort_eh_cmnd() argument
1050 if (scsi_try_to_abort_cmd(scmd->device->host->hostt, scmd) != SUCCESS) in scsi_abort_eh_cmnd()
1051 if (scsi_try_bus_device_reset(scmd) != SUCCESS) in scsi_abort_eh_cmnd()
1052 if (scsi_try_target_reset(scmd) != SUCCESS) in scsi_abort_eh_cmnd()
1053 if (scsi_try_bus_reset(scmd) != SUCCESS) in scsi_abort_eh_cmnd()
1054 scsi_try_host_reset(scmd); in scsi_abort_eh_cmnd()
1071 void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses, in scsi_eh_prep_cmnd() argument
1074 struct scsi_device *sdev = scmd->device; in scsi_eh_prep_cmnd()
1076 struct request *rq = scsi_cmd_to_rq(scmd); in scsi_eh_prep_cmnd()
1086 ses->cmd_len = scmd->cmd_len; in scsi_eh_prep_cmnd()
1087 ses->data_direction = scmd->sc_data_direction; in scsi_eh_prep_cmnd()
1088 ses->sdb = scmd->sdb; in scsi_eh_prep_cmnd()
1089 ses->result = scmd->result; in scsi_eh_prep_cmnd()
1090 ses->resid_len = scmd->resid_len; in scsi_eh_prep_cmnd()
1091 ses->underflow = scmd->underflow; in scsi_eh_prep_cmnd()
1092 ses->prot_op = scmd->prot_op; in scsi_eh_prep_cmnd()
1093 ses->eh_eflags = scmd->eh_eflags; in scsi_eh_prep_cmnd()
1095 scmd->prot_op = SCSI_PROT_NORMAL; in scsi_eh_prep_cmnd()
1096 scmd->eh_eflags = 0; in scsi_eh_prep_cmnd()
1097 memcpy(ses->cmnd, scmd->cmnd, sizeof(ses->cmnd)); in scsi_eh_prep_cmnd()
1098 memset(scmd->cmnd, 0, sizeof(scmd->cmnd)); in scsi_eh_prep_cmnd()
1099 memset(&scmd->sdb, 0, sizeof(scmd->sdb)); in scsi_eh_prep_cmnd()
1100 scmd->result = 0; in scsi_eh_prep_cmnd()
1101 scmd->resid_len = 0; in scsi_eh_prep_cmnd()
1104 scmd->sdb.length = min_t(unsigned, SCSI_SENSE_BUFFERSIZE, in scsi_eh_prep_cmnd()
1106 sg_init_one(&ses->sense_sgl, scmd->sense_buffer, in scsi_eh_prep_cmnd()
1107 scmd->sdb.length); in scsi_eh_prep_cmnd()
1108 scmd->sdb.table.sgl = &ses->sense_sgl; in scsi_eh_prep_cmnd()
1109 scmd->sc_data_direction = DMA_FROM_DEVICE; in scsi_eh_prep_cmnd()
1110 scmd->sdb.table.nents = scmd->sdb.table.orig_nents = 1; in scsi_eh_prep_cmnd()
1111 scmd->cmnd[0] = REQUEST_SENSE; in scsi_eh_prep_cmnd()
1112 scmd->cmnd[4] = scmd->sdb.length; in scsi_eh_prep_cmnd()
1113 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]); in scsi_eh_prep_cmnd()
1115 scmd->sc_data_direction = DMA_NONE; in scsi_eh_prep_cmnd()
1117 BUG_ON(cmnd_size > sizeof(scmd->cmnd)); in scsi_eh_prep_cmnd()
1118 memcpy(scmd->cmnd, cmnd, cmnd_size); in scsi_eh_prep_cmnd()
1119 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]); in scsi_eh_prep_cmnd()
1123 scmd->underflow = 0; in scsi_eh_prep_cmnd()
1126 scmd->cmnd[1] = (scmd->cmnd[1] & 0x1f) | in scsi_eh_prep_cmnd()
1145 memset(scmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE); in scsi_eh_prep_cmnd()
1156 void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd, struct scsi_eh_save *ses) in scsi_eh_restore_cmnd() argument
1159 struct request *rq = scsi_cmd_to_rq(scmd); in scsi_eh_restore_cmnd()
1165 scmd->cmd_len = ses->cmd_len; in scsi_eh_restore_cmnd()
1166 memcpy(scmd->cmnd, ses->cmnd, sizeof(ses->cmnd)); in scsi_eh_restore_cmnd()
1167 scmd->sc_data_direction = ses->data_direction; in scsi_eh_restore_cmnd()
1168 scmd->sdb = ses->sdb; in scsi_eh_restore_cmnd()
1169 scmd->result = ses->result; in scsi_eh_restore_cmnd()
1170 scmd->resid_len = ses->resid_len; in scsi_eh_restore_cmnd()
1171 scmd->underflow = ses->underflow; in scsi_eh_restore_cmnd()
1172 scmd->prot_op = ses->prot_op; in scsi_eh_restore_cmnd()
1173 scmd->eh_eflags = ses->eh_eflags; in scsi_eh_restore_cmnd()
1196 static enum scsi_disposition scsi_send_eh_cmnd(struct scsi_cmnd *scmd, in scsi_send_eh_cmnd() argument
1199 struct scsi_device *sdev = scmd->device; in scsi_send_eh_cmnd()
1208 scsi_eh_prep_cmnd(scmd, &ses, cmnd, cmnd_size, sense_bytes); in scsi_send_eh_cmnd()
1211 scsi_log_send(scmd); in scsi_send_eh_cmnd()
1212 scmd->submitter = SUBMITTED_BY_SCSI_ERROR_HANDLER; in scsi_send_eh_cmnd()
1213 scmd->flags |= SCMD_LAST; in scsi_send_eh_cmnd()
1232 rtn = shost->hostt->queuecommand(shost, scmd); in scsi_send_eh_cmnd()
1239 scsi_eh_restore_cmnd(scmd, &ses); in scsi_send_eh_cmnd()
1255 scsi_log_completion(scmd, rtn); in scsi_send_eh_cmnd()
1257 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_send_eh_cmnd()
1271 rtn = scsi_eh_completed_normally(scmd); in scsi_send_eh_cmnd()
1272 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_send_eh_cmnd()
1288 scsi_abort_eh_cmnd(scmd); in scsi_send_eh_cmnd()
1292 scsi_eh_restore_cmnd(scmd, &ses); in scsi_send_eh_cmnd()
1306 static enum scsi_disposition scsi_request_sense(struct scsi_cmnd *scmd) in scsi_request_sense() argument
1308 return scsi_send_eh_cmnd(scmd, NULL, 0, scmd->device->eh_timeout, ~0); in scsi_request_sense()
1312 scsi_eh_action(struct scsi_cmnd *scmd, enum scsi_disposition rtn) in scsi_eh_action() argument
1314 if (!blk_rq_is_passthrough(scsi_cmd_to_rq(scmd))) { in scsi_eh_action()
1315 struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd); in scsi_eh_action()
1317 rtn = sdrv->eh_action(scmd, rtn); in scsi_eh_action()
1334 void scsi_eh_finish_cmd(struct scsi_cmnd *scmd, struct list_head *done_q) in scsi_eh_finish_cmd() argument
1336 list_move_tail(&scmd->eh_entry, done_q); in scsi_eh_finish_cmd()
1363 struct scsi_cmnd *scmd, *next; in scsi_eh_get_sense() local
1371 list_for_each_entry_safe(scmd, next, work_q, eh_entry) { in scsi_eh_get_sense()
1372 if ((scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) || in scsi_eh_get_sense()
1373 SCSI_SENSE_VALID(scmd)) in scsi_eh_get_sense()
1376 shost = scmd->device->host; in scsi_eh_get_sense()
1379 scmd_printk(KERN_INFO, scmd, in scsi_eh_get_sense()
1384 if (!scsi_status_is_check_condition(scmd->result)) in scsi_eh_get_sense()
1393 SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd, in scsi_eh_get_sense()
1396 rtn = scsi_request_sense(scmd); in scsi_eh_get_sense()
1400 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_eh_get_sense()
1401 "sense requested, result %x\n", scmd->result)); in scsi_eh_get_sense()
1402 SCSI_LOG_ERROR_RECOVERY(3, scsi_print_sense(scmd)); in scsi_eh_get_sense()
1404 rtn = scsi_decide_disposition(scmd); in scsi_eh_get_sense()
1419 if (scmd->allowed == SCSI_CMD_RETRIES_NO_LIMIT) in scsi_eh_get_sense()
1420 scmd->retries = scmd->allowed = 1; in scsi_eh_get_sense()
1422 scmd->retries = scmd->allowed; in scsi_eh_get_sense()
1426 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_get_sense()
1440 static int scsi_eh_tur(struct scsi_cmnd *scmd) in scsi_eh_tur() argument
1447 rtn = scsi_send_eh_cmnd(scmd, tur_command, 6, in scsi_eh_tur()
1448 scmd->device->eh_timeout, 0); in scsi_eh_tur()
1450 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_eh_tur()
1482 struct scsi_cmnd *scmd, *next; in scsi_eh_test_devices() local
1487 scmd = list_entry(cmd_list->next, struct scsi_cmnd, eh_entry); in scsi_eh_test_devices()
1488 sdev = scmd->device; in scsi_eh_test_devices()
1502 finish_cmds = !scsi_device_online(scmd->device) || in scsi_eh_test_devices()
1503 (try_stu && !scsi_eh_try_stu(scmd) && in scsi_eh_test_devices()
1504 !scsi_eh_tur(scmd)) || in scsi_eh_test_devices()
1505 !scsi_eh_tur(scmd); in scsi_eh_test_devices()
1507 list_for_each_entry_safe(scmd, next, cmd_list, eh_entry) in scsi_eh_test_devices()
1508 if (scmd->device == sdev) { in scsi_eh_test_devices()
1511 scsi_eh_action(scmd, SUCCESS) == SUCCESS)) in scsi_eh_test_devices()
1512 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_test_devices()
1514 list_move_tail(&scmd->eh_entry, work_q); in scsi_eh_test_devices()
1527 static int scsi_eh_try_stu(struct scsi_cmnd *scmd) in scsi_eh_try_stu() argument
1531 if (scmd->device->allow_restart) { in scsi_eh_try_stu()
1536 rtn = scsi_send_eh_cmnd(scmd, stu_command, 6, in scsi_eh_try_stu()
1537 scmd->device->eh_timeout, 0); in scsi_eh_try_stu()
1560 struct scsi_cmnd *scmd, *stu_scmd, *next; in scsi_eh_stu() local
1573 list_for_each_entry(scmd, work_q, eh_entry) in scsi_eh_stu()
1574 if (scmd->device == sdev && SCSI_SENSE_VALID(scmd) && in scsi_eh_stu()
1575 scsi_check_sense(scmd) == FAILED ) { in scsi_eh_stu()
1576 stu_scmd = scmd; in scsi_eh_stu()
1591 list_for_each_entry_safe(scmd, next, in scsi_eh_stu()
1593 if (scmd->device == sdev && in scsi_eh_stu()
1594 scsi_eh_action(scmd, SUCCESS) == SUCCESS) in scsi_eh_stu()
1595 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_stu()
1626 struct scsi_cmnd *scmd, *bdr_scmd, *next; in scsi_eh_bus_device_reset() local
1640 list_for_each_entry(scmd, work_q, eh_entry) in scsi_eh_bus_device_reset()
1641 if (scmd->device == sdev) { in scsi_eh_bus_device_reset()
1642 bdr_scmd = scmd; in scsi_eh_bus_device_reset()
1657 list_for_each_entry_safe(scmd, next, in scsi_eh_bus_device_reset()
1659 if (scmd->device == sdev && in scsi_eh_bus_device_reset()
1660 scsi_eh_action(scmd, rtn) != FAILED) in scsi_eh_bus_device_reset()
1661 scsi_eh_finish_cmd(scmd, in scsi_eh_bus_device_reset()
1694 struct scsi_cmnd *next, *scmd; in scsi_eh_target_reset() local
1709 scmd = list_entry(tmp_list.next, struct scsi_cmnd, eh_entry); in scsi_eh_target_reset()
1710 id = scmd_id(scmd); in scsi_eh_target_reset()
1716 rtn = scsi_try_target_reset(scmd); in scsi_eh_target_reset()
1723 list_for_each_entry_safe(scmd, next, &tmp_list, eh_entry) { in scsi_eh_target_reset()
1724 if (scmd_id(scmd) != id) in scsi_eh_target_reset()
1728 list_move_tail(&scmd->eh_entry, &check_list); in scsi_eh_target_reset()
1730 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_target_reset()
1733 list_move(&scmd->eh_entry, work_q); in scsi_eh_target_reset()
1750 struct scsi_cmnd *scmd, *chan_scmd, *next; in scsi_eh_bus_reset() local
1773 list_for_each_entry(scmd, work_q, eh_entry) { in scsi_eh_bus_reset()
1774 if (channel == scmd_channel(scmd)) { in scsi_eh_bus_reset()
1775 chan_scmd = scmd; in scsi_eh_bus_reset()
1792 list_for_each_entry_safe(scmd, next, work_q, eh_entry) { in scsi_eh_bus_reset()
1793 if (channel == scmd_channel(scmd)) { in scsi_eh_bus_reset()
1795 scsi_eh_finish_cmd(scmd, in scsi_eh_bus_reset()
1798 list_move_tail(&scmd->eh_entry, in scsi_eh_bus_reset()
1822 struct scsi_cmnd *scmd, *next; in scsi_eh_host_reset() local
1827 scmd = list_entry(work_q->next, in scsi_eh_host_reset()
1835 rtn = scsi_try_host_reset(scmd); in scsi_eh_host_reset()
1839 list_for_each_entry_safe(scmd, next, work_q, eh_entry) { in scsi_eh_host_reset()
1840 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_host_reset()
1860 struct scsi_cmnd *scmd, *next; in scsi_eh_offline_sdevs() local
1863 list_for_each_entry_safe(scmd, next, work_q, eh_entry) { in scsi_eh_offline_sdevs()
1864 sdev_printk(KERN_INFO, scmd->device, "Device offlined - " in scsi_eh_offline_sdevs()
1866 sdev = scmd->device; in scsi_eh_offline_sdevs()
1872 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_offline_sdevs()
1881 bool scsi_noretry_cmd(struct scsi_cmnd *scmd) in scsi_noretry_cmd() argument
1883 struct request *req = scsi_cmd_to_rq(scmd); in scsi_noretry_cmd()
1885 switch (host_byte(scmd->result)) { in scsi_noretry_cmd()
1895 if (get_status_byte(scmd) == SAM_STAT_RESERVATION_CONFLICT) in scsi_noretry_cmd()
1903 if (scsi_ml_byte(scmd->result) == SCSIML_STAT_DL_TIMEOUT) in scsi_noretry_cmd()
1906 if (!scsi_status_is_check_condition(scmd->result)) in scsi_noretry_cmd()
1934 enum scsi_disposition scsi_decide_disposition(struct scsi_cmnd *scmd) in scsi_decide_disposition() argument
1942 if (!scsi_device_online(scmd->device)) { in scsi_decide_disposition()
1943 SCSI_LOG_ERROR_RECOVERY(5, scmd_printk(KERN_INFO, scmd, in scsi_decide_disposition()
1952 switch (host_byte(scmd->result)) { in scsi_decide_disposition()
1959 scmd->result &= 0xff00ffff; in scsi_decide_disposition()
1967 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) { in scsi_decide_disposition()
1968 set_host_byte(scmd, DID_TIME_OUT); in scsi_decide_disposition()
2014 if (get_status_byte(scmd) == SAM_STAT_RESERVATION_CONFLICT) in scsi_decide_disposition()
2030 if ((scmd->cmnd[0] == TEST_UNIT_READY || in scsi_decide_disposition()
2031 scmd->cmnd[0] == INQUIRY)) { in scsi_decide_disposition()
2045 switch (get_status_byte(scmd)) { in scsi_decide_disposition()
2047 scsi_handle_queue_full(scmd->device); in scsi_decide_disposition()
2062 if (scmd->cmnd[0] == REPORT_LUNS) in scsi_decide_disposition()
2063 scmd->device->sdev_target->expecting_lun_change = 0; in scsi_decide_disposition()
2064 scsi_handle_queue_ramp_up(scmd->device); in scsi_decide_disposition()
2065 if (scmd->sense_buffer && SCSI_SENSE_VALID(scmd)) in scsi_decide_disposition()
2072 scsi_check_sense(scmd); in scsi_decide_disposition()
2079 rtn = scsi_check_sense(scmd); in scsi_decide_disposition()
2097 sdev_printk(KERN_INFO, scmd->device, in scsi_decide_disposition()
2099 set_scsi_ml_byte(scmd, SCSIML_STAT_RESV_CONFLICT); in scsi_decide_disposition()
2110 if (scsi_cmd_retry_allowed(scmd) && !scsi_noretry_cmd(scmd)) { in scsi_decide_disposition()
2141 struct scsi_cmnd *scmd; in scsi_eh_lock_door() local
2147 scmd = blk_mq_rq_to_pdu(req); in scsi_eh_lock_door()
2149 scmd->cmnd[0] = ALLOW_MEDIUM_REMOVAL; in scsi_eh_lock_door()
2150 scmd->cmnd[1] = 0; in scsi_eh_lock_door()
2151 scmd->cmnd[2] = 0; in scsi_eh_lock_door()
2152 scmd->cmnd[3] = 0; in scsi_eh_lock_door()
2153 scmd->cmnd[4] = SCSI_REMOVAL_PREVENT; in scsi_eh_lock_door()
2154 scmd->cmnd[5] = 0; in scsi_eh_lock_door()
2155 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]); in scsi_eh_lock_door()
2156 scmd->allowed = 5; in scsi_eh_lock_door()
2255 struct scsi_cmnd *scmd, *next; in scsi_eh_flush_done_q() local
2257 list_for_each_entry_safe(scmd, next, done_q, eh_entry) { in scsi_eh_flush_done_q()
2258 struct scsi_device *sdev = scmd->device; in scsi_eh_flush_done_q()
2260 list_del_init(&scmd->eh_entry); in scsi_eh_flush_done_q()
2261 if (scsi_device_online(sdev) && !scsi_noretry_cmd(scmd) && in scsi_eh_flush_done_q()
2262 scsi_cmd_retry_allowed(scmd) && in scsi_eh_flush_done_q()
2263 scsi_eh_should_retry_cmd(scmd)) { in scsi_eh_flush_done_q()
2265 scmd_printk(KERN_INFO, scmd, in scsi_eh_flush_done_q()
2268 scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY); in scsi_eh_flush_done_q()
2276 if (!scmd->result && in scsi_eh_flush_done_q()
2277 !(scmd->flags & SCMD_FORCE_EH_SUCCESS)) in scsi_eh_flush_done_q()
2278 scmd->result |= (DID_TIME_OUT << 16); in scsi_eh_flush_done_q()
2280 scmd_printk(KERN_INFO, scmd, in scsi_eh_flush_done_q()
2283 scsi_finish_command(scmd); in scsi_eh_flush_done_q()
2497 struct scsi_cmnd *scmd; in scsi_ioctl_reset() local
2521 scmd = (struct scsi_cmnd *)(rq + 1); in scsi_ioctl_reset()
2522 scsi_init_command(dev, scmd); in scsi_ioctl_reset()
2524 scmd->submitter = SUBMITTED_BY_SCSI_RESET_IOCTL; in scsi_ioctl_reset()
2525 scmd->flags |= SCMD_LAST; in scsi_ioctl_reset()
2526 memset(&scmd->sdb, 0, sizeof(scmd->sdb)); in scsi_ioctl_reset()
2528 scmd->cmd_len = 0; in scsi_ioctl_reset()
2530 scmd->sc_data_direction = DMA_BIDIRECTIONAL; in scsi_ioctl_reset()
2541 rtn = scsi_try_bus_device_reset(scmd); in scsi_ioctl_reset()
2546 rtn = scsi_try_target_reset(scmd); in scsi_ioctl_reset()
2551 rtn = scsi_try_bus_reset(scmd); in scsi_ioctl_reset()
2556 rtn = scsi_try_host_reset(scmd); in scsi_ioctl_reset()