Lines Matching refs:scmd
53 static void scsi_eh_done(struct scsi_cmnd *scmd);
62 static int scsi_eh_try_stu(struct scsi_cmnd *scmd);
132 struct scsi_cmnd *scmd = in scmd_eh_abort_handler() local
134 struct scsi_device *sdev = scmd->device; in scmd_eh_abort_handler()
139 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler()
143 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler()
145 rtn = scsi_try_to_abort_cmd(sdev->host->hostt, scmd); in scmd_eh_abort_handler()
147 set_host_byte(scmd, DID_TIME_OUT); in scmd_eh_abort_handler()
150 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler()
153 } else if (!scsi_noretry_cmd(scmd) && in scmd_eh_abort_handler()
154 (++scmd->retries <= scmd->allowed)) { in scmd_eh_abort_handler()
156 scmd_printk(KERN_WARNING, scmd, in scmd_eh_abort_handler()
158 scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY); in scmd_eh_abort_handler()
162 scmd_printk(KERN_WARNING, scmd, in scmd_eh_abort_handler()
164 scsi_finish_command(scmd); in scmd_eh_abort_handler()
169 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler()
176 scsi_eh_scmd_add(scmd); in scmd_eh_abort_handler()
186 scsi_abort_command(struct scsi_cmnd *scmd) in scsi_abort_command() argument
188 struct scsi_device *sdev = scmd->device; in scsi_abort_command()
192 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) { in scsi_abort_command()
197 scmd_printk(KERN_INFO, scmd, in scsi_abort_command()
199 BUG_ON(delayed_work_pending(&scmd->abort_work)); in scsi_abort_command()
208 scmd->eh_eflags |= SCSI_EH_ABORT_SCHEDULED; in scsi_abort_command()
210 scmd_printk(KERN_INFO, scmd, "abort scheduled\n")); in scsi_abort_command()
211 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100); in scsi_abort_command()
223 static void scsi_eh_reset(struct scsi_cmnd *scmd) in scsi_eh_reset() argument
225 if (!blk_rq_is_passthrough(scmd->request)) { in scsi_eh_reset()
226 struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd); in scsi_eh_reset()
228 sdrv->eh_reset(scmd); in scsi_eh_reset()
234 struct scsi_cmnd *scmd = container_of(head, typeof(*scmd), rcu); in scsi_eh_inc_host_failed() local
235 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_inc_host_failed()
248 void scsi_eh_scmd_add(struct scsi_cmnd *scmd) in scsi_eh_scmd_add() argument
250 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_scmd_add()
264 scsi_eh_reset(scmd); in scsi_eh_scmd_add()
265 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q); in scsi_eh_scmd_add()
271 call_rcu(&scmd->rcu, scsi_eh_inc_host_failed); in scsi_eh_scmd_add()
286 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req); in scsi_times_out() local
288 struct Scsi_Host *host = scmd->device->host; in scsi_times_out()
290 trace_scsi_dispatch_cmd_timeout(scmd); in scsi_times_out()
291 scsi_log_completion(scmd, TIMEOUT_ERROR); in scsi_times_out()
297 rtn = host->hostt->eh_timed_out(scmd); in scsi_times_out()
312 if (test_and_set_bit(SCMD_STATE_COMPLETE, &scmd->state)) in scsi_times_out()
314 if (scsi_abort_command(scmd) != SUCCESS) { in scsi_times_out()
315 set_host_byte(scmd, DID_TIME_OUT); in scsi_times_out()
316 scsi_eh_scmd_add(scmd); in scsi_times_out()
355 struct scsi_cmnd *scmd; in scsi_eh_prt_fail_stats() local
363 list_for_each_entry(scmd, work_q, eh_entry) { in scsi_eh_prt_fail_stats()
364 if (scmd->device == sdev) { in scsi_eh_prt_fail_stats()
366 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) in scsi_eh_prt_fail_stats()
481 int scsi_check_sense(struct scsi_cmnd *scmd) in scsi_check_sense() argument
483 struct scsi_device *sdev = scmd->device; in scsi_check_sense()
486 if (! scsi_command_normalize_sense(scmd, &sshdr)) in scsi_check_sense()
503 if (scmd->cmnd[0] == TEST_UNIT_READY && scmd->scsi_done != scsi_eh_done) in scsi_check_sense()
517 if (scmd->sense_buffer[2] & 0xe0) in scsi_check_sense()
526 (scmd->sense_buffer[8] == 0x4) && in scsi_check_sense()
527 (scmd->sense_buffer[11] & 0xe0)) in scsi_check_sense()
556 if (scmd->device->expecting_cc_ua) { in scsi_check_sense()
564 scmd->device->expecting_cc_ua = 0; in scsi_check_sense()
573 if (scmd->device->sdev_target->expecting_lun_change && in scsi_check_sense()
586 if (scmd->device->allow_restart && in scsi_check_sense()
599 set_host_byte(scmd, DID_ALLOC_FAILURE); in scsi_check_sense()
607 set_host_byte(scmd, DID_TARGET_FAILURE); in scsi_check_sense()
614 set_host_byte(scmd, DID_MEDIUM_ERROR); in scsi_check_sense()
620 if (scmd->device->retry_hwerror) in scsi_check_sense()
623 set_host_byte(scmd, DID_TARGET_FAILURE); in scsi_check_sense()
633 set_host_byte(scmd, DID_TARGET_FAILURE); in scsi_check_sense()
706 static int scsi_eh_completed_normally(struct scsi_cmnd *scmd) in scsi_eh_completed_normally() argument
712 if (host_byte(scmd->result) == DID_RESET) { in scsi_eh_completed_normally()
719 return scsi_check_sense(scmd); in scsi_eh_completed_normally()
721 if (host_byte(scmd->result) != DID_OK) in scsi_eh_completed_normally()
727 if (msg_byte(scmd->result) != COMMAND_COMPLETE) in scsi_eh_completed_normally()
734 switch (status_byte(scmd->result)) { in scsi_eh_completed_normally()
736 scsi_handle_queue_ramp_up(scmd->device); in scsi_eh_completed_normally()
741 return scsi_check_sense(scmd); in scsi_eh_completed_normally()
750 if (scmd->cmnd[0] == TEST_UNIT_READY) in scsi_eh_completed_normally()
757 scsi_handle_queue_full(scmd->device); in scsi_eh_completed_normally()
771 static void scsi_eh_done(struct scsi_cmnd *scmd) in scsi_eh_done() argument
775 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_eh_done()
776 "%s result: %x\n", __func__, scmd->result)); in scsi_eh_done()
778 eh_action = scmd->device->host->eh_action; in scsi_eh_done()
787 static int scsi_try_host_reset(struct scsi_cmnd *scmd) in scsi_try_host_reset() argument
791 struct Scsi_Host *host = scmd->device->host; in scsi_try_host_reset()
800 rtn = hostt->eh_host_reset_handler(scmd); in scsi_try_host_reset()
806 scsi_report_bus_reset(host, scmd_channel(scmd)); in scsi_try_host_reset()
817 static int scsi_try_bus_reset(struct scsi_cmnd *scmd) in scsi_try_bus_reset() argument
821 struct Scsi_Host *host = scmd->device->host; in scsi_try_bus_reset()
824 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_try_bus_reset()
830 rtn = hostt->eh_bus_reset_handler(scmd); in scsi_try_bus_reset()
836 scsi_report_bus_reset(host, scmd_channel(scmd)); in scsi_try_bus_reset()
859 static int scsi_try_target_reset(struct scsi_cmnd *scmd) in scsi_try_target_reset() argument
863 struct Scsi_Host *host = scmd->device->host; in scsi_try_target_reset()
869 rtn = hostt->eh_target_reset_handler(scmd); in scsi_try_target_reset()
872 __starget_for_each_device(scsi_target(scmd->device), NULL, in scsi_try_target_reset()
890 static int scsi_try_bus_device_reset(struct scsi_cmnd *scmd) in scsi_try_bus_device_reset() argument
893 struct scsi_host_template *hostt = scmd->device->host->hostt; in scsi_try_bus_device_reset()
898 rtn = hostt->eh_device_reset_handler(scmd); in scsi_try_bus_device_reset()
900 __scsi_report_device_reset(scmd->device, NULL); in scsi_try_bus_device_reset()
922 struct scsi_cmnd *scmd) in scsi_try_to_abort_cmd() argument
927 return hostt->eh_abort_handler(scmd); in scsi_try_to_abort_cmd()
930 static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd) in scsi_abort_eh_cmnd() argument
932 if (scsi_try_to_abort_cmd(scmd->device->host->hostt, scmd) != SUCCESS) in scsi_abort_eh_cmnd()
933 if (scsi_try_bus_device_reset(scmd) != SUCCESS) in scsi_abort_eh_cmnd()
934 if (scsi_try_target_reset(scmd) != SUCCESS) in scsi_abort_eh_cmnd()
935 if (scsi_try_bus_reset(scmd) != SUCCESS) in scsi_abort_eh_cmnd()
936 scsi_try_host_reset(scmd); in scsi_abort_eh_cmnd()
953 void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses, in scsi_eh_prep_cmnd() argument
956 struct scsi_device *sdev = scmd->device; in scsi_eh_prep_cmnd()
965 ses->cmd_len = scmd->cmd_len; in scsi_eh_prep_cmnd()
966 ses->cmnd = scmd->cmnd; in scsi_eh_prep_cmnd()
967 ses->data_direction = scmd->sc_data_direction; in scsi_eh_prep_cmnd()
968 ses->sdb = scmd->sdb; in scsi_eh_prep_cmnd()
969 ses->result = scmd->result; in scsi_eh_prep_cmnd()
970 ses->resid_len = scmd->req.resid_len; in scsi_eh_prep_cmnd()
971 ses->underflow = scmd->underflow; in scsi_eh_prep_cmnd()
972 ses->prot_op = scmd->prot_op; in scsi_eh_prep_cmnd()
973 ses->eh_eflags = scmd->eh_eflags; in scsi_eh_prep_cmnd()
975 scmd->prot_op = SCSI_PROT_NORMAL; in scsi_eh_prep_cmnd()
976 scmd->eh_eflags = 0; in scsi_eh_prep_cmnd()
977 scmd->cmnd = ses->eh_cmnd; in scsi_eh_prep_cmnd()
978 memset(scmd->cmnd, 0, BLK_MAX_CDB); in scsi_eh_prep_cmnd()
979 memset(&scmd->sdb, 0, sizeof(scmd->sdb)); in scsi_eh_prep_cmnd()
980 scmd->result = 0; in scsi_eh_prep_cmnd()
981 scmd->req.resid_len = 0; in scsi_eh_prep_cmnd()
984 scmd->sdb.length = min_t(unsigned, SCSI_SENSE_BUFFERSIZE, in scsi_eh_prep_cmnd()
986 sg_init_one(&ses->sense_sgl, scmd->sense_buffer, in scsi_eh_prep_cmnd()
987 scmd->sdb.length); in scsi_eh_prep_cmnd()
988 scmd->sdb.table.sgl = &ses->sense_sgl; in scsi_eh_prep_cmnd()
989 scmd->sc_data_direction = DMA_FROM_DEVICE; in scsi_eh_prep_cmnd()
990 scmd->sdb.table.nents = scmd->sdb.table.orig_nents = 1; in scsi_eh_prep_cmnd()
991 scmd->cmnd[0] = REQUEST_SENSE; in scsi_eh_prep_cmnd()
992 scmd->cmnd[4] = scmd->sdb.length; in scsi_eh_prep_cmnd()
993 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]); in scsi_eh_prep_cmnd()
995 scmd->sc_data_direction = DMA_NONE; in scsi_eh_prep_cmnd()
998 memcpy(scmd->cmnd, cmnd, cmnd_size); in scsi_eh_prep_cmnd()
999 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]); in scsi_eh_prep_cmnd()
1003 scmd->underflow = 0; in scsi_eh_prep_cmnd()
1006 scmd->cmnd[1] = (scmd->cmnd[1] & 0x1f) | in scsi_eh_prep_cmnd()
1013 memset(scmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE); in scsi_eh_prep_cmnd()
1024 void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd, struct scsi_eh_save *ses) in scsi_eh_restore_cmnd() argument
1029 scmd->cmd_len = ses->cmd_len; in scsi_eh_restore_cmnd()
1030 scmd->cmnd = ses->cmnd; in scsi_eh_restore_cmnd()
1031 scmd->sc_data_direction = ses->data_direction; in scsi_eh_restore_cmnd()
1032 scmd->sdb = ses->sdb; in scsi_eh_restore_cmnd()
1033 scmd->result = ses->result; in scsi_eh_restore_cmnd()
1034 scmd->req.resid_len = ses->resid_len; in scsi_eh_restore_cmnd()
1035 scmd->underflow = ses->underflow; in scsi_eh_restore_cmnd()
1036 scmd->prot_op = ses->prot_op; in scsi_eh_restore_cmnd()
1037 scmd->eh_eflags = ses->eh_eflags; in scsi_eh_restore_cmnd()
1055 static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, unsigned char *cmnd, in scsi_send_eh_cmnd() argument
1058 struct scsi_device *sdev = scmd->device; in scsi_send_eh_cmnd()
1067 scsi_eh_prep_cmnd(scmd, &ses, cmnd, cmnd_size, sense_bytes); in scsi_send_eh_cmnd()
1070 scsi_log_send(scmd); in scsi_send_eh_cmnd()
1071 scmd->scsi_done = scsi_eh_done; in scsi_send_eh_cmnd()
1090 rtn = shost->hostt->queuecommand(shost, scmd); in scsi_send_eh_cmnd()
1097 scsi_eh_restore_cmnd(scmd, &ses); in scsi_send_eh_cmnd()
1112 scsi_log_completion(scmd, rtn); in scsi_send_eh_cmnd()
1114 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_send_eh_cmnd()
1128 rtn = scsi_eh_completed_normally(scmd); in scsi_send_eh_cmnd()
1129 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_send_eh_cmnd()
1145 scsi_abort_eh_cmnd(scmd); in scsi_send_eh_cmnd()
1149 scsi_eh_restore_cmnd(scmd, &ses); in scsi_send_eh_cmnd()
1163 static int scsi_request_sense(struct scsi_cmnd *scmd) in scsi_request_sense() argument
1165 return scsi_send_eh_cmnd(scmd, NULL, 0, scmd->device->eh_timeout, ~0); in scsi_request_sense()
1168 static int scsi_eh_action(struct scsi_cmnd *scmd, int rtn) in scsi_eh_action() argument
1170 if (!blk_rq_is_passthrough(scmd->request)) { in scsi_eh_action()
1171 struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd); in scsi_eh_action()
1173 rtn = sdrv->eh_action(scmd, rtn); in scsi_eh_action()
1190 void scsi_eh_finish_cmd(struct scsi_cmnd *scmd, struct list_head *done_q) in scsi_eh_finish_cmd() argument
1192 list_move_tail(&scmd->eh_entry, done_q); in scsi_eh_finish_cmd()
1219 struct scsi_cmnd *scmd, *next; in scsi_eh_get_sense() local
1227 list_for_each_entry_safe(scmd, next, work_q, eh_entry) { in scsi_eh_get_sense()
1228 if ((scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) || in scsi_eh_get_sense()
1229 SCSI_SENSE_VALID(scmd)) in scsi_eh_get_sense()
1232 shost = scmd->device->host; in scsi_eh_get_sense()
1235 scmd_printk(KERN_INFO, scmd, in scsi_eh_get_sense()
1240 if (status_byte(scmd->result) != CHECK_CONDITION) in scsi_eh_get_sense()
1249 SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd, in scsi_eh_get_sense()
1252 rtn = scsi_request_sense(scmd); in scsi_eh_get_sense()
1256 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_eh_get_sense()
1257 "sense requested, result %x\n", scmd->result)); in scsi_eh_get_sense()
1258 SCSI_LOG_ERROR_RECOVERY(3, scsi_print_sense(scmd)); in scsi_eh_get_sense()
1260 rtn = scsi_decide_disposition(scmd); in scsi_eh_get_sense()
1271 scmd->retries = scmd->allowed; in scsi_eh_get_sense()
1275 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_get_sense()
1289 static int scsi_eh_tur(struct scsi_cmnd *scmd) in scsi_eh_tur() argument
1295 rtn = scsi_send_eh_cmnd(scmd, tur_command, 6, in scsi_eh_tur()
1296 scmd->device->eh_timeout, 0); in scsi_eh_tur()
1298 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_eh_tur()
1330 struct scsi_cmnd *scmd, *next; in scsi_eh_test_devices() local
1335 scmd = list_entry(cmd_list->next, struct scsi_cmnd, eh_entry); in scsi_eh_test_devices()
1336 sdev = scmd->device; in scsi_eh_test_devices()
1350 finish_cmds = !scsi_device_online(scmd->device) || in scsi_eh_test_devices()
1351 (try_stu && !scsi_eh_try_stu(scmd) && in scsi_eh_test_devices()
1352 !scsi_eh_tur(scmd)) || in scsi_eh_test_devices()
1353 !scsi_eh_tur(scmd); in scsi_eh_test_devices()
1355 list_for_each_entry_safe(scmd, next, cmd_list, eh_entry) in scsi_eh_test_devices()
1356 if (scmd->device == sdev) { in scsi_eh_test_devices()
1359 scsi_eh_action(scmd, SUCCESS) == SUCCESS)) in scsi_eh_test_devices()
1360 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_test_devices()
1362 list_move_tail(&scmd->eh_entry, work_q); in scsi_eh_test_devices()
1375 static int scsi_eh_try_stu(struct scsi_cmnd *scmd) in scsi_eh_try_stu() argument
1379 if (scmd->device->allow_restart) { in scsi_eh_try_stu()
1383 rtn = scsi_send_eh_cmnd(scmd, stu_command, 6, scmd->device->request_queue->rq_timeout, 0); in scsi_eh_try_stu()
1406 struct scsi_cmnd *scmd, *stu_scmd, *next; in scsi_eh_stu() local
1418 list_for_each_entry(scmd, work_q, eh_entry) in scsi_eh_stu()
1419 if (scmd->device == sdev && SCSI_SENSE_VALID(scmd) && in scsi_eh_stu()
1420 scsi_check_sense(scmd) == FAILED ) { in scsi_eh_stu()
1421 stu_scmd = scmd; in scsi_eh_stu()
1436 list_for_each_entry_safe(scmd, next, in scsi_eh_stu()
1438 if (scmd->device == sdev && in scsi_eh_stu()
1439 scsi_eh_action(scmd, SUCCESS) == SUCCESS) in scsi_eh_stu()
1440 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_stu()
1471 struct scsi_cmnd *scmd, *bdr_scmd, *next; in scsi_eh_bus_device_reset() local
1484 list_for_each_entry(scmd, work_q, eh_entry) in scsi_eh_bus_device_reset()
1485 if (scmd->device == sdev) { in scsi_eh_bus_device_reset()
1486 bdr_scmd = scmd; in scsi_eh_bus_device_reset()
1501 list_for_each_entry_safe(scmd, next, in scsi_eh_bus_device_reset()
1503 if (scmd->device == sdev && in scsi_eh_bus_device_reset()
1504 scsi_eh_action(scmd, rtn) != FAILED) in scsi_eh_bus_device_reset()
1505 scsi_eh_finish_cmd(scmd, in scsi_eh_bus_device_reset()
1538 struct scsi_cmnd *next, *scmd; in scsi_eh_target_reset() local
1553 scmd = list_entry(tmp_list.next, struct scsi_cmnd, eh_entry); in scsi_eh_target_reset()
1554 id = scmd_id(scmd); in scsi_eh_target_reset()
1560 rtn = scsi_try_target_reset(scmd); in scsi_eh_target_reset()
1567 list_for_each_entry_safe(scmd, next, &tmp_list, eh_entry) { in scsi_eh_target_reset()
1568 if (scmd_id(scmd) != id) in scsi_eh_target_reset()
1572 list_move_tail(&scmd->eh_entry, &check_list); in scsi_eh_target_reset()
1574 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_target_reset()
1577 list_move(&scmd->eh_entry, work_q); in scsi_eh_target_reset()
1594 struct scsi_cmnd *scmd, *chan_scmd, *next; in scsi_eh_bus_reset() local
1617 list_for_each_entry(scmd, work_q, eh_entry) { in scsi_eh_bus_reset()
1618 if (channel == scmd_channel(scmd)) { in scsi_eh_bus_reset()
1619 chan_scmd = scmd; in scsi_eh_bus_reset()
1636 list_for_each_entry_safe(scmd, next, work_q, eh_entry) { in scsi_eh_bus_reset()
1637 if (channel == scmd_channel(scmd)) { in scsi_eh_bus_reset()
1639 scsi_eh_finish_cmd(scmd, in scsi_eh_bus_reset()
1642 list_move_tail(&scmd->eh_entry, in scsi_eh_bus_reset()
1666 struct scsi_cmnd *scmd, *next; in scsi_eh_host_reset() local
1671 scmd = list_entry(work_q->next, in scsi_eh_host_reset()
1679 rtn = scsi_try_host_reset(scmd); in scsi_eh_host_reset()
1683 list_for_each_entry_safe(scmd, next, work_q, eh_entry) { in scsi_eh_host_reset()
1684 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_host_reset()
1704 struct scsi_cmnd *scmd, *next; in scsi_eh_offline_sdevs() local
1707 list_for_each_entry_safe(scmd, next, work_q, eh_entry) { in scsi_eh_offline_sdevs()
1708 sdev_printk(KERN_INFO, scmd->device, "Device offlined - " in scsi_eh_offline_sdevs()
1710 sdev = scmd->device; in scsi_eh_offline_sdevs()
1716 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_offline_sdevs()
1725 int scsi_noretry_cmd(struct scsi_cmnd *scmd) in scsi_noretry_cmd() argument
1727 switch (host_byte(scmd->result)) { in scsi_noretry_cmd()
1733 return (scmd->request->cmd_flags & REQ_FAILFAST_TRANSPORT); in scsi_noretry_cmd()
1735 return (scmd->request->cmd_flags & REQ_FAILFAST_DEV); in scsi_noretry_cmd()
1737 if (msg_byte(scmd->result) == COMMAND_COMPLETE && in scsi_noretry_cmd()
1738 status_byte(scmd->result) == RESERVATION_CONFLICT) in scsi_noretry_cmd()
1742 return (scmd->request->cmd_flags & REQ_FAILFAST_DRIVER); in scsi_noretry_cmd()
1745 if (status_byte(scmd->result) != CHECK_CONDITION) in scsi_noretry_cmd()
1753 if (scmd->request->cmd_flags & REQ_FAILFAST_DEV || in scsi_noretry_cmd()
1754 blk_rq_is_passthrough(scmd->request)) in scsi_noretry_cmd()
1774 int scsi_decide_disposition(struct scsi_cmnd *scmd) in scsi_decide_disposition() argument
1782 if (!scsi_device_online(scmd->device)) { in scsi_decide_disposition()
1783 SCSI_LOG_ERROR_RECOVERY(5, scmd_printk(KERN_INFO, scmd, in scsi_decide_disposition()
1792 switch (host_byte(scmd->result)) { in scsi_decide_disposition()
1799 scmd->result &= 0xff00ffff; in scsi_decide_disposition()
1807 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) { in scsi_decide_disposition()
1808 set_host_byte(scmd, DID_TIME_OUT); in scsi_decide_disposition()
1848 if (msg_byte(scmd->result) == COMMAND_COMPLETE && in scsi_decide_disposition()
1849 status_byte(scmd->result) == RESERVATION_CONFLICT) in scsi_decide_disposition()
1865 if ((scmd->cmnd[0] == TEST_UNIT_READY || in scsi_decide_disposition()
1866 scmd->cmnd[0] == INQUIRY)) { in scsi_decide_disposition()
1880 if (msg_byte(scmd->result) != COMMAND_COMPLETE) in scsi_decide_disposition()
1886 switch (status_byte(scmd->result)) { in scsi_decide_disposition()
1888 scsi_handle_queue_full(scmd->device); in scsi_decide_disposition()
1903 if (scmd->cmnd[0] == REPORT_LUNS) in scsi_decide_disposition()
1904 scmd->device->sdev_target->expecting_lun_change = 0; in scsi_decide_disposition()
1905 scsi_handle_queue_ramp_up(scmd->device); in scsi_decide_disposition()
1912 rtn = scsi_check_sense(scmd); in scsi_decide_disposition()
1930 sdev_printk(KERN_INFO, scmd->device, in scsi_decide_disposition()
1932 set_host_byte(scmd, DID_NEXUS_FAILURE); in scsi_decide_disposition()
1945 if ((++scmd->retries) <= scmd->allowed in scsi_decide_disposition()
1946 && !scsi_noretry_cmd(scmd)) { in scsi_decide_disposition()
2087 struct scsi_cmnd *scmd, *next; in scsi_eh_flush_done_q() local
2089 list_for_each_entry_safe(scmd, next, done_q, eh_entry) { in scsi_eh_flush_done_q()
2090 list_del_init(&scmd->eh_entry); in scsi_eh_flush_done_q()
2091 if (scsi_device_online(scmd->device) && in scsi_eh_flush_done_q()
2092 !scsi_noretry_cmd(scmd) && in scsi_eh_flush_done_q()
2093 (++scmd->retries <= scmd->allowed)) { in scsi_eh_flush_done_q()
2095 scmd_printk(KERN_INFO, scmd, in scsi_eh_flush_done_q()
2098 scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY); in scsi_eh_flush_done_q()
2105 if (!scmd->result) in scsi_eh_flush_done_q()
2106 scmd->result |= (DRIVER_TIMEOUT << 24); in scsi_eh_flush_done_q()
2108 scmd_printk(KERN_INFO, scmd, in scsi_eh_flush_done_q()
2111 scsi_finish_command(scmd); in scsi_eh_flush_done_q()
2318 scsi_reset_provider_done_command(struct scsi_cmnd *scmd) in scsi_reset_provider_done_command() argument
2330 struct scsi_cmnd *scmd; in scsi_ioctl_reset() local
2353 scmd = (struct scsi_cmnd *)(rq + 1); in scsi_ioctl_reset()
2354 scsi_init_command(dev, scmd); in scsi_ioctl_reset()
2355 scmd->request = rq; in scsi_ioctl_reset()
2356 scmd->cmnd = scsi_req(rq)->cmd; in scsi_ioctl_reset()
2358 scmd->scsi_done = scsi_reset_provider_done_command; in scsi_ioctl_reset()
2359 memset(&scmd->sdb, 0, sizeof(scmd->sdb)); in scsi_ioctl_reset()
2361 scmd->cmd_len = 0; in scsi_ioctl_reset()
2363 scmd->sc_data_direction = DMA_BIDIRECTIONAL; in scsi_ioctl_reset()
2374 rtn = scsi_try_bus_device_reset(scmd); in scsi_ioctl_reset()
2379 rtn = scsi_try_target_reset(scmd); in scsi_ioctl_reset()
2384 rtn = scsi_try_bus_reset(scmd); in scsi_ioctl_reset()
2389 rtn = scsi_try_host_reset(scmd); in scsi_ioctl_reset()
2415 scsi_put_command(scmd); in scsi_ioctl_reset()