Lines Matching refs:scmd
49 static void scsi_eh_done(struct scsi_cmnd *scmd);
58 static int scsi_eh_try_stu(struct scsi_cmnd *scmd);
121 struct scsi_cmnd *scmd = in scmd_eh_abort_handler() local
123 struct scsi_device *sdev = scmd->device; in scmd_eh_abort_handler()
128 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler()
132 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler()
134 rtn = scsi_try_to_abort_cmd(sdev->host->hostt, scmd); in scmd_eh_abort_handler()
136 set_host_byte(scmd, DID_TIME_OUT); in scmd_eh_abort_handler()
139 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler()
142 } else if (!scsi_noretry_cmd(scmd) && in scmd_eh_abort_handler()
143 (++scmd->retries <= scmd->allowed)) { in scmd_eh_abort_handler()
145 scmd_printk(KERN_WARNING, scmd, in scmd_eh_abort_handler()
147 scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY); in scmd_eh_abort_handler()
151 scmd_printk(KERN_WARNING, scmd, in scmd_eh_abort_handler()
153 scsi_finish_command(scmd); in scmd_eh_abort_handler()
158 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler()
165 if (!scsi_eh_scmd_add(scmd, 0)) { in scmd_eh_abort_handler()
167 scmd_printk(KERN_WARNING, scmd, in scmd_eh_abort_handler()
169 set_host_byte(scmd, DID_TIME_OUT); in scmd_eh_abort_handler()
170 scsi_finish_command(scmd); in scmd_eh_abort_handler()
181 scsi_abort_command(struct scsi_cmnd *scmd) in scsi_abort_command() argument
183 struct scsi_device *sdev = scmd->device; in scsi_abort_command()
187 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) { in scsi_abort_command()
191 scmd->eh_eflags &= ~SCSI_EH_ABORT_SCHEDULED; in scsi_abort_command()
193 scmd_printk(KERN_INFO, scmd, in scsi_abort_command()
195 BUG_ON(delayed_work_pending(&scmd->abort_work)); in scsi_abort_command()
207 scmd_printk(KERN_INFO, scmd, in scsi_abort_command()
216 scmd->eh_eflags |= SCSI_EH_ABORT_SCHEDULED; in scsi_abort_command()
218 scmd_printk(KERN_INFO, scmd, "abort scheduled\n")); in scsi_abort_command()
219 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100); in scsi_abort_command()
231 int scsi_eh_scmd_add(struct scsi_cmnd *scmd, int eh_flag) in scsi_eh_scmd_add() argument
233 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_scmd_add()
249 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) in scsi_eh_scmd_add()
251 scmd->eh_eflags |= eh_flag; in scsi_eh_scmd_add()
252 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q); in scsi_eh_scmd_add()
272 struct scsi_cmnd *scmd = req->special; in scsi_times_out() local
274 struct Scsi_Host *host = scmd->device->host; in scsi_times_out()
276 trace_scsi_dispatch_cmd_timeout(scmd); in scsi_times_out()
277 scsi_log_completion(scmd, TIMEOUT_ERROR); in scsi_times_out()
283 rtn = host->transportt->eh_timed_out(scmd); in scsi_times_out()
285 rtn = host->hostt->eh_timed_out(scmd); in scsi_times_out()
289 scsi_abort_command(scmd) == SUCCESS) in scsi_times_out()
292 set_host_byte(scmd, DID_TIME_OUT); in scsi_times_out()
293 if (!scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD)) in scsi_times_out()
335 struct scsi_cmnd *scmd; in scsi_eh_prt_fail_stats() local
343 list_for_each_entry(scmd, work_q, eh_entry) { in scsi_eh_prt_fail_stats()
344 if (scmd->device == sdev) { in scsi_eh_prt_fail_stats()
346 if (scmd->eh_eflags & SCSI_EH_CANCEL_CMD) in scsi_eh_prt_fail_stats()
455 static int scsi_check_sense(struct scsi_cmnd *scmd) in scsi_check_sense() argument
457 struct scsi_device *sdev = scmd->device; in scsi_check_sense()
460 if (! scsi_command_normalize_sense(scmd, &sshdr)) in scsi_check_sense()
477 if (scmd->cmnd[0] == TEST_UNIT_READY && scmd->scsi_done != scsi_eh_done) in scsi_check_sense()
491 if (scmd->sense_buffer[2] & 0xe0) in scsi_check_sense()
500 (scmd->sense_buffer[8] == 0x4) && in scsi_check_sense()
501 (scmd->sense_buffer[11] & 0xe0)) in scsi_check_sense()
524 if (scmd->device->expecting_cc_ua) { in scsi_check_sense()
532 scmd->device->expecting_cc_ua = 0; in scsi_check_sense()
541 if (scmd->device->sdev_target->expecting_lun_change && in scsi_check_sense()
554 if (scmd->device->allow_restart && in scsi_check_sense()
567 set_host_byte(scmd, DID_ALLOC_FAILURE); in scsi_check_sense()
574 set_host_byte(scmd, DID_TARGET_FAILURE); in scsi_check_sense()
581 set_host_byte(scmd, DID_MEDIUM_ERROR); in scsi_check_sense()
587 if (scmd->device->retry_hwerror) in scsi_check_sense()
590 set_host_byte(scmd, DID_TARGET_FAILURE); in scsi_check_sense()
597 set_host_byte(scmd, DID_TARGET_FAILURE); in scsi_check_sense()
669 static int scsi_eh_completed_normally(struct scsi_cmnd *scmd) in scsi_eh_completed_normally() argument
675 if (host_byte(scmd->result) == DID_RESET) { in scsi_eh_completed_normally()
682 return scsi_check_sense(scmd); in scsi_eh_completed_normally()
684 if (host_byte(scmd->result) != DID_OK) in scsi_eh_completed_normally()
690 if (msg_byte(scmd->result) != COMMAND_COMPLETE) in scsi_eh_completed_normally()
697 switch (status_byte(scmd->result)) { in scsi_eh_completed_normally()
699 scsi_handle_queue_ramp_up(scmd->device); in scsi_eh_completed_normally()
703 return scsi_check_sense(scmd); in scsi_eh_completed_normally()
712 if (scmd->cmnd[0] == TEST_UNIT_READY) in scsi_eh_completed_normally()
719 scsi_handle_queue_full(scmd->device); in scsi_eh_completed_normally()
733 static void scsi_eh_done(struct scsi_cmnd *scmd) in scsi_eh_done() argument
737 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_eh_done()
738 "%s result: %x\n", __func__, scmd->result)); in scsi_eh_done()
740 eh_action = scmd->device->host->eh_action; in scsi_eh_done()
749 static int scsi_try_host_reset(struct scsi_cmnd *scmd) in scsi_try_host_reset() argument
753 struct Scsi_Host *host = scmd->device->host; in scsi_try_host_reset()
762 rtn = hostt->eh_host_reset_handler(scmd); in scsi_try_host_reset()
768 scsi_report_bus_reset(host, scmd_channel(scmd)); in scsi_try_host_reset()
779 static int scsi_try_bus_reset(struct scsi_cmnd *scmd) in scsi_try_bus_reset() argument
783 struct Scsi_Host *host = scmd->device->host; in scsi_try_bus_reset()
786 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_try_bus_reset()
792 rtn = hostt->eh_bus_reset_handler(scmd); in scsi_try_bus_reset()
798 scsi_report_bus_reset(host, scmd_channel(scmd)); in scsi_try_bus_reset()
821 static int scsi_try_target_reset(struct scsi_cmnd *scmd) in scsi_try_target_reset() argument
825 struct Scsi_Host *host = scmd->device->host; in scsi_try_target_reset()
831 rtn = hostt->eh_target_reset_handler(scmd); in scsi_try_target_reset()
834 __starget_for_each_device(scsi_target(scmd->device), NULL, in scsi_try_target_reset()
852 static int scsi_try_bus_device_reset(struct scsi_cmnd *scmd) in scsi_try_bus_device_reset() argument
855 struct scsi_host_template *hostt = scmd->device->host->hostt; in scsi_try_bus_device_reset()
860 rtn = hostt->eh_device_reset_handler(scmd); in scsi_try_bus_device_reset()
862 __scsi_report_device_reset(scmd->device, NULL); in scsi_try_bus_device_reset()
884 struct scsi_cmnd *scmd) in scsi_try_to_abort_cmd() argument
889 return hostt->eh_abort_handler(scmd); in scsi_try_to_abort_cmd()
892 static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd) in scsi_abort_eh_cmnd() argument
894 if (scsi_try_to_abort_cmd(scmd->device->host->hostt, scmd) != SUCCESS) in scsi_abort_eh_cmnd()
895 if (scsi_try_bus_device_reset(scmd) != SUCCESS) in scsi_abort_eh_cmnd()
896 if (scsi_try_target_reset(scmd) != SUCCESS) in scsi_abort_eh_cmnd()
897 if (scsi_try_bus_reset(scmd) != SUCCESS) in scsi_abort_eh_cmnd()
898 scsi_try_host_reset(scmd); in scsi_abort_eh_cmnd()
915 void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses, in scsi_eh_prep_cmnd() argument
918 struct scsi_device *sdev = scmd->device; in scsi_eh_prep_cmnd()
927 ses->cmd_len = scmd->cmd_len; in scsi_eh_prep_cmnd()
928 ses->cmnd = scmd->cmnd; in scsi_eh_prep_cmnd()
929 ses->data_direction = scmd->sc_data_direction; in scsi_eh_prep_cmnd()
930 ses->sdb = scmd->sdb; in scsi_eh_prep_cmnd()
931 ses->next_rq = scmd->request->next_rq; in scsi_eh_prep_cmnd()
932 ses->result = scmd->result; in scsi_eh_prep_cmnd()
933 ses->underflow = scmd->underflow; in scsi_eh_prep_cmnd()
934 ses->prot_op = scmd->prot_op; in scsi_eh_prep_cmnd()
936 scmd->prot_op = SCSI_PROT_NORMAL; in scsi_eh_prep_cmnd()
937 scmd->eh_eflags = 0; in scsi_eh_prep_cmnd()
938 scmd->cmnd = ses->eh_cmnd; in scsi_eh_prep_cmnd()
939 memset(scmd->cmnd, 0, BLK_MAX_CDB); in scsi_eh_prep_cmnd()
940 memset(&scmd->sdb, 0, sizeof(scmd->sdb)); in scsi_eh_prep_cmnd()
941 scmd->request->next_rq = NULL; in scsi_eh_prep_cmnd()
942 scmd->result = 0; in scsi_eh_prep_cmnd()
945 scmd->sdb.length = min_t(unsigned, SCSI_SENSE_BUFFERSIZE, in scsi_eh_prep_cmnd()
947 sg_init_one(&ses->sense_sgl, scmd->sense_buffer, in scsi_eh_prep_cmnd()
948 scmd->sdb.length); in scsi_eh_prep_cmnd()
949 scmd->sdb.table.sgl = &ses->sense_sgl; in scsi_eh_prep_cmnd()
950 scmd->sc_data_direction = DMA_FROM_DEVICE; in scsi_eh_prep_cmnd()
951 scmd->sdb.table.nents = scmd->sdb.table.orig_nents = 1; in scsi_eh_prep_cmnd()
952 scmd->cmnd[0] = REQUEST_SENSE; in scsi_eh_prep_cmnd()
953 scmd->cmnd[4] = scmd->sdb.length; in scsi_eh_prep_cmnd()
954 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]); in scsi_eh_prep_cmnd()
956 scmd->sc_data_direction = DMA_NONE; in scsi_eh_prep_cmnd()
959 memcpy(scmd->cmnd, cmnd, cmnd_size); in scsi_eh_prep_cmnd()
960 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]); in scsi_eh_prep_cmnd()
964 scmd->underflow = 0; in scsi_eh_prep_cmnd()
967 scmd->cmnd[1] = (scmd->cmnd[1] & 0x1f) | in scsi_eh_prep_cmnd()
974 memset(scmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE); in scsi_eh_prep_cmnd()
985 void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd, struct scsi_eh_save *ses) in scsi_eh_restore_cmnd() argument
990 scmd->cmd_len = ses->cmd_len; in scsi_eh_restore_cmnd()
991 scmd->cmnd = ses->cmnd; in scsi_eh_restore_cmnd()
992 scmd->sc_data_direction = ses->data_direction; in scsi_eh_restore_cmnd()
993 scmd->sdb = ses->sdb; in scsi_eh_restore_cmnd()
994 scmd->request->next_rq = ses->next_rq; in scsi_eh_restore_cmnd()
995 scmd->result = ses->result; in scsi_eh_restore_cmnd()
996 scmd->underflow = ses->underflow; in scsi_eh_restore_cmnd()
997 scmd->prot_op = ses->prot_op; in scsi_eh_restore_cmnd()
1015 static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, unsigned char *cmnd, in scsi_send_eh_cmnd() argument
1018 struct scsi_device *sdev = scmd->device; in scsi_send_eh_cmnd()
1027 scsi_eh_prep_cmnd(scmd, &ses, cmnd, cmnd_size, sense_bytes); in scsi_send_eh_cmnd()
1030 scsi_log_send(scmd); in scsi_send_eh_cmnd()
1031 scmd->scsi_done = scsi_eh_done; in scsi_send_eh_cmnd()
1032 rtn = shost->hostt->queuecommand(shost, scmd); in scsi_send_eh_cmnd()
1035 scsi_eh_restore_cmnd(scmd, &ses); in scsi_send_eh_cmnd()
1050 scsi_log_completion(scmd, rtn); in scsi_send_eh_cmnd()
1052 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_send_eh_cmnd()
1066 rtn = scsi_eh_completed_normally(scmd); in scsi_send_eh_cmnd()
1067 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_send_eh_cmnd()
1083 scsi_abort_eh_cmnd(scmd); in scsi_send_eh_cmnd()
1087 scsi_eh_restore_cmnd(scmd, &ses); in scsi_send_eh_cmnd()
1101 static int scsi_request_sense(struct scsi_cmnd *scmd) in scsi_request_sense() argument
1103 return scsi_send_eh_cmnd(scmd, NULL, 0, scmd->device->eh_timeout, ~0); in scsi_request_sense()
1106 static int scsi_eh_action(struct scsi_cmnd *scmd, int rtn) in scsi_eh_action() argument
1108 if (scmd->request->cmd_type != REQ_TYPE_BLOCK_PC) { in scsi_eh_action()
1109 struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd); in scsi_eh_action()
1111 rtn = sdrv->eh_action(scmd, rtn); in scsi_eh_action()
1128 void scsi_eh_finish_cmd(struct scsi_cmnd *scmd, struct list_head *done_q) in scsi_eh_finish_cmd() argument
1130 scmd->device->host->host_failed--; in scsi_eh_finish_cmd()
1131 scmd->eh_eflags = 0; in scsi_eh_finish_cmd()
1132 list_move_tail(&scmd->eh_entry, done_q); in scsi_eh_finish_cmd()
1159 struct scsi_cmnd *scmd, *next; in scsi_eh_get_sense() local
1167 list_for_each_entry_safe(scmd, next, work_q, eh_entry) { in scsi_eh_get_sense()
1168 if ((scmd->eh_eflags & SCSI_EH_CANCEL_CMD) || in scsi_eh_get_sense()
1169 (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) || in scsi_eh_get_sense()
1170 SCSI_SENSE_VALID(scmd)) in scsi_eh_get_sense()
1173 shost = scmd->device->host; in scsi_eh_get_sense()
1176 scmd_printk(KERN_INFO, scmd, in scsi_eh_get_sense()
1181 if (status_byte(scmd->result) != CHECK_CONDITION) in scsi_eh_get_sense()
1190 SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd, in scsi_eh_get_sense()
1193 rtn = scsi_request_sense(scmd); in scsi_eh_get_sense()
1197 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_eh_get_sense()
1198 "sense requested, result %x\n", scmd->result)); in scsi_eh_get_sense()
1199 SCSI_LOG_ERROR_RECOVERY(3, scsi_print_sense(scmd)); in scsi_eh_get_sense()
1201 rtn = scsi_decide_disposition(scmd); in scsi_eh_get_sense()
1212 scmd->retries = scmd->allowed; in scsi_eh_get_sense()
1216 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_get_sense()
1230 static int scsi_eh_tur(struct scsi_cmnd *scmd) in scsi_eh_tur() argument
1236 rtn = scsi_send_eh_cmnd(scmd, tur_command, 6, in scsi_eh_tur()
1237 scmd->device->eh_timeout, 0); in scsi_eh_tur()
1239 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd, in scsi_eh_tur()
1271 struct scsi_cmnd *scmd, *next; in scsi_eh_test_devices() local
1276 scmd = list_entry(cmd_list->next, struct scsi_cmnd, eh_entry); in scsi_eh_test_devices()
1277 sdev = scmd->device; in scsi_eh_test_devices()
1291 finish_cmds = !scsi_device_online(scmd->device) || in scsi_eh_test_devices()
1292 (try_stu && !scsi_eh_try_stu(scmd) && in scsi_eh_test_devices()
1293 !scsi_eh_tur(scmd)) || in scsi_eh_test_devices()
1294 !scsi_eh_tur(scmd); in scsi_eh_test_devices()
1296 list_for_each_entry_safe(scmd, next, cmd_list, eh_entry) in scsi_eh_test_devices()
1297 if (scmd->device == sdev) { in scsi_eh_test_devices()
1300 scsi_eh_action(scmd, SUCCESS) == SUCCESS)) in scsi_eh_test_devices()
1301 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_test_devices()
1303 list_move_tail(&scmd->eh_entry, work_q); in scsi_eh_test_devices()
1325 struct scsi_cmnd *scmd, *next; in scsi_eh_abort_cmds() local
1330 list_for_each_entry_safe(scmd, next, work_q, eh_entry) { in scsi_eh_abort_cmds()
1331 if (!(scmd->eh_eflags & SCSI_EH_CANCEL_CMD)) in scsi_eh_abort_cmds()
1333 shost = scmd->device->host; in scsi_eh_abort_cmds()
1337 scmd_printk(KERN_INFO, scmd, in scsi_eh_abort_cmds()
1343 scmd_printk(KERN_INFO, scmd, in scsi_eh_abort_cmds()
1345 rtn = scsi_try_to_abort_cmd(shost->hostt, scmd); in scsi_eh_abort_cmds()
1348 scmd_printk(KERN_INFO, scmd, in scsi_eh_abort_cmds()
1354 scmd->eh_eflags &= ~SCSI_EH_CANCEL_CMD; in scsi_eh_abort_cmds()
1356 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_abort_cmds()
1358 list_move_tail(&scmd->eh_entry, &check_list); in scsi_eh_abort_cmds()
1371 static int scsi_eh_try_stu(struct scsi_cmnd *scmd) in scsi_eh_try_stu() argument
1375 if (scmd->device->allow_restart) { in scsi_eh_try_stu()
1379 rtn = scsi_send_eh_cmnd(scmd, stu_command, 6, scmd->device->request_queue->rq_timeout, 0); in scsi_eh_try_stu()
1402 struct scsi_cmnd *scmd, *stu_scmd, *next; in scsi_eh_stu() local
1414 list_for_each_entry(scmd, work_q, eh_entry) in scsi_eh_stu()
1415 if (scmd->device == sdev && SCSI_SENSE_VALID(scmd) && in scsi_eh_stu()
1416 scsi_check_sense(scmd) == FAILED ) { in scsi_eh_stu()
1417 stu_scmd = scmd; in scsi_eh_stu()
1432 list_for_each_entry_safe(scmd, next, in scsi_eh_stu()
1434 if (scmd->device == sdev && in scsi_eh_stu()
1435 scsi_eh_action(scmd, SUCCESS) == SUCCESS) in scsi_eh_stu()
1436 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_stu()
1467 struct scsi_cmnd *scmd, *bdr_scmd, *next; in scsi_eh_bus_device_reset() local
1480 list_for_each_entry(scmd, work_q, eh_entry) in scsi_eh_bus_device_reset()
1481 if (scmd->device == sdev) { in scsi_eh_bus_device_reset()
1482 bdr_scmd = scmd; in scsi_eh_bus_device_reset()
1497 list_for_each_entry_safe(scmd, next, in scsi_eh_bus_device_reset()
1499 if (scmd->device == sdev && in scsi_eh_bus_device_reset()
1500 scsi_eh_action(scmd, rtn) != FAILED) in scsi_eh_bus_device_reset()
1501 scsi_eh_finish_cmd(scmd, in scsi_eh_bus_device_reset()
1534 struct scsi_cmnd *next, *scmd; in scsi_eh_target_reset() local
1549 scmd = list_entry(tmp_list.next, struct scsi_cmnd, eh_entry); in scsi_eh_target_reset()
1550 id = scmd_id(scmd); in scsi_eh_target_reset()
1556 rtn = scsi_try_target_reset(scmd); in scsi_eh_target_reset()
1563 list_for_each_entry_safe(scmd, next, &tmp_list, eh_entry) { in scsi_eh_target_reset()
1564 if (scmd_id(scmd) != id) in scsi_eh_target_reset()
1568 list_move_tail(&scmd->eh_entry, &check_list); in scsi_eh_target_reset()
1570 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_target_reset()
1573 list_move(&scmd->eh_entry, work_q); in scsi_eh_target_reset()
1590 struct scsi_cmnd *scmd, *chan_scmd, *next; in scsi_eh_bus_reset() local
1613 list_for_each_entry(scmd, work_q, eh_entry) { in scsi_eh_bus_reset()
1614 if (channel == scmd_channel(scmd)) { in scsi_eh_bus_reset()
1615 chan_scmd = scmd; in scsi_eh_bus_reset()
1632 list_for_each_entry_safe(scmd, next, work_q, eh_entry) { in scsi_eh_bus_reset()
1633 if (channel == scmd_channel(scmd)) { in scsi_eh_bus_reset()
1635 scsi_eh_finish_cmd(scmd, in scsi_eh_bus_reset()
1638 list_move_tail(&scmd->eh_entry, in scsi_eh_bus_reset()
1662 struct scsi_cmnd *scmd, *next; in scsi_eh_host_reset() local
1667 scmd = list_entry(work_q->next, in scsi_eh_host_reset()
1675 rtn = scsi_try_host_reset(scmd); in scsi_eh_host_reset()
1679 list_for_each_entry_safe(scmd, next, work_q, eh_entry) { in scsi_eh_host_reset()
1680 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_host_reset()
1700 struct scsi_cmnd *scmd, *next; in scsi_eh_offline_sdevs() local
1702 list_for_each_entry_safe(scmd, next, work_q, eh_entry) { in scsi_eh_offline_sdevs()
1703 sdev_printk(KERN_INFO, scmd->device, "Device offlined - " in scsi_eh_offline_sdevs()
1705 scsi_device_set_state(scmd->device, SDEV_OFFLINE); in scsi_eh_offline_sdevs()
1706 if (scmd->eh_eflags & SCSI_EH_CANCEL_CMD) { in scsi_eh_offline_sdevs()
1711 scsi_eh_finish_cmd(scmd, done_q); in scsi_eh_offline_sdevs()
1720 int scsi_noretry_cmd(struct scsi_cmnd *scmd) in scsi_noretry_cmd() argument
1722 switch (host_byte(scmd->result)) { in scsi_noretry_cmd()
1728 return (scmd->request->cmd_flags & REQ_FAILFAST_TRANSPORT); in scsi_noretry_cmd()
1730 return (scmd->request->cmd_flags & REQ_FAILFAST_DEV); in scsi_noretry_cmd()
1732 if (msg_byte(scmd->result) == COMMAND_COMPLETE && in scsi_noretry_cmd()
1733 status_byte(scmd->result) == RESERVATION_CONFLICT) in scsi_noretry_cmd()
1737 return (scmd->request->cmd_flags & REQ_FAILFAST_DRIVER); in scsi_noretry_cmd()
1740 if (status_byte(scmd->result) != CHECK_CONDITION) in scsi_noretry_cmd()
1748 if (scmd->request->cmd_flags & REQ_FAILFAST_DEV || in scsi_noretry_cmd()
1749 scmd->request->cmd_type == REQ_TYPE_BLOCK_PC) in scsi_noretry_cmd()
1769 int scsi_decide_disposition(struct scsi_cmnd *scmd) in scsi_decide_disposition() argument
1777 if (!scsi_device_online(scmd->device)) { in scsi_decide_disposition()
1778 SCSI_LOG_ERROR_RECOVERY(5, scmd_printk(KERN_INFO, scmd, in scsi_decide_disposition()
1787 switch (host_byte(scmd->result)) { in scsi_decide_disposition()
1794 scmd->result &= 0xff00ffff; in scsi_decide_disposition()
1802 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) { in scsi_decide_disposition()
1803 set_host_byte(scmd, DID_TIME_OUT); in scsi_decide_disposition()
1846 if (msg_byte(scmd->result) == COMMAND_COMPLETE && in scsi_decide_disposition()
1847 status_byte(scmd->result) == RESERVATION_CONFLICT) in scsi_decide_disposition()
1863 if ((scmd->cmnd[0] == TEST_UNIT_READY || in scsi_decide_disposition()
1864 scmd->cmnd[0] == INQUIRY)) { in scsi_decide_disposition()
1878 if (msg_byte(scmd->result) != COMMAND_COMPLETE) in scsi_decide_disposition()
1884 switch (status_byte(scmd->result)) { in scsi_decide_disposition()
1886 scsi_handle_queue_full(scmd->device); in scsi_decide_disposition()
1900 if (scmd->cmnd[0] == REPORT_LUNS) in scsi_decide_disposition()
1901 scmd->device->sdev_target->expecting_lun_change = 0; in scsi_decide_disposition()
1902 scsi_handle_queue_ramp_up(scmd->device); in scsi_decide_disposition()
1908 rtn = scsi_check_sense(scmd); in scsi_decide_disposition()
1926 sdev_printk(KERN_INFO, scmd->device, in scsi_decide_disposition()
1928 set_host_byte(scmd, DID_NEXUS_FAILURE); in scsi_decide_disposition()
1941 if ((++scmd->retries) <= scmd->allowed in scsi_decide_disposition()
1942 && !scsi_noretry_cmd(scmd)) { in scsi_decide_disposition()
2088 struct scsi_cmnd *scmd, *next; in scsi_eh_flush_done_q() local
2090 list_for_each_entry_safe(scmd, next, done_q, eh_entry) { in scsi_eh_flush_done_q()
2091 list_del_init(&scmd->eh_entry); in scsi_eh_flush_done_q()
2092 if (scsi_device_online(scmd->device) && in scsi_eh_flush_done_q()
2093 !scsi_noretry_cmd(scmd) && in scsi_eh_flush_done_q()
2094 (++scmd->retries <= scmd->allowed)) { in scsi_eh_flush_done_q()
2096 scmd_printk(KERN_INFO, scmd, in scsi_eh_flush_done_q()
2099 scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY); in scsi_eh_flush_done_q()
2106 if (!scmd->result) in scsi_eh_flush_done_q()
2107 scmd->result |= (DRIVER_TIMEOUT << 24); in scsi_eh_flush_done_q()
2109 scmd_printk(KERN_INFO, scmd, in scsi_eh_flush_done_q()
2112 scsi_finish_command(scmd); in scsi_eh_flush_done_q()
2317 scsi_reset_provider_done_command(struct scsi_cmnd *scmd) in scsi_reset_provider_done_command() argument
2329 struct scsi_cmnd *scmd; in scsi_ioctl_reset() local
2346 scmd = scsi_get_command(dev, GFP_KERNEL); in scsi_ioctl_reset()
2347 if (!scmd) in scsi_ioctl_reset()
2351 scmd->request = &req; in scsi_ioctl_reset()
2353 scmd->cmnd = req.cmd; in scsi_ioctl_reset()
2355 scmd->scsi_done = scsi_reset_provider_done_command; in scsi_ioctl_reset()
2356 memset(&scmd->sdb, 0, sizeof(scmd->sdb)); in scsi_ioctl_reset()
2358 scmd->cmd_len = 0; in scsi_ioctl_reset()
2360 scmd->sc_data_direction = DMA_BIDIRECTIONAL; in scsi_ioctl_reset()
2371 rtn = scsi_try_bus_device_reset(scmd); in scsi_ioctl_reset()
2376 rtn = scsi_try_target_reset(scmd); in scsi_ioctl_reset()
2381 rtn = scsi_try_bus_reset(scmd); in scsi_ioctl_reset()
2386 rtn = scsi_try_host_reset(scmd); in scsi_ioctl_reset()
2412 scsi_put_command(scmd); in scsi_ioctl_reset()