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);
82 * Schedule SCSI EH without scmd.
140 struct scsi_cmnd *scmd =
142 struct scsi_device *sdev = scmd->device;
147 scmd_printk(KERN_INFO, scmd,
151 scmd_printk(KERN_INFO, scmd,
153 rtn = scsi_try_to_abort_cmd(sdev->host->hostt, scmd);
155 set_host_byte(scmd, DID_TIME_OUT);
158 scmd_printk(KERN_INFO, scmd,
161 } else if (!scsi_noretry_cmd(scmd) &&
162 scsi_cmd_retry_allowed(scmd)) {
164 scmd_printk(KERN_WARNING, scmd,
166 scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY);
170 scmd_printk(KERN_WARNING, scmd,
172 scsi_finish_command(scmd);
177 scmd_printk(KERN_INFO, scmd,
184 scsi_eh_scmd_add(scmd);
189 * @scmd: scmd to abort.
194 scsi_abort_command(struct scsi_cmnd *scmd)
196 struct scsi_device *sdev = scmd->device;
200 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) {
205 scmd_printk(KERN_INFO, scmd,
207 BUG_ON(delayed_work_pending(&scmd->abort_work));
216 scmd->eh_eflags |= SCSI_EH_ABORT_SCHEDULED;
218 scmd_printk(KERN_INFO, scmd, "abort scheduled\n"));
219 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100);
225 * @scmd: scmd to run eh on.
231 static void scsi_eh_reset(struct scsi_cmnd *scmd)
233 if (!blk_rq_is_passthrough(scmd->request)) {
234 struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd);
236 sdrv->eh_reset(scmd);
242 struct scsi_cmnd *scmd = container_of(head, typeof(*scmd), rcu);
243 struct Scsi_Host *shost = scmd->device->host;
255 * @scmd: scmd to run eh on.
257 void scsi_eh_scmd_add(struct scsi_cmnd *scmd)
259 struct Scsi_Host *shost = scmd->device->host;
273 scsi_eh_reset(scmd);
274 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q);
280 call_rcu(&scmd->rcu, scsi_eh_inc_host_failed);
295 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req);
297 struct Scsi_Host *host = scmd->device->host;
299 trace_scsi_dispatch_cmd_timeout(scmd);
300 scsi_log_completion(scmd, TIMEOUT_ERROR);
306 rtn = host->hostt->eh_timed_out(scmd);
311 * modify *scmd.
313 if (test_and_set_bit(SCMD_STATE_COMPLETE, &scmd->state))
315 if (scsi_abort_command(scmd) != SUCCESS) {
316 set_host_byte(scmd, DID_TIME_OUT);
317 scsi_eh_scmd_add(scmd);
356 struct scsi_cmnd *scmd;
364 list_for_each_entry(scmd, work_q, eh_entry) {
365 if (scmd->device == sdev) {
367 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED)
473 * @scmd: Cmd to have sense checked.
482 enum scsi_disposition scsi_check_sense(struct scsi_cmnd *scmd)
484 struct scsi_device *sdev = scmd->device;
487 if (! scsi_command_normalize_sense(scmd, &sshdr))
504 if (scmd->cmnd[0] == TEST_UNIT_READY && scmd->scsi_done != scsi_eh_done)
518 if (scmd->sense_buffer[2] & 0xe0)
527 (scmd->sense_buffer[8] == 0x4) &&
528 (scmd->sense_buffer[11] & 0xe0))
557 if (scmd->device->expecting_cc_ua) {
565 scmd->device->expecting_cc_ua = 0;
574 if (scmd->device->sdev_target->expecting_lun_change &&
587 if (scmd->device->allow_restart &&
600 set_host_byte(scmd, DID_ALLOC_FAILURE);
608 set_host_byte(scmd, DID_TARGET_FAILURE);
615 set_host_byte(scmd, DID_MEDIUM_ERROR);
621 if (scmd->device->retry_hwerror)
624 set_host_byte(scmd, DID_TARGET_FAILURE);
634 set_host_byte(scmd, DID_TARGET_FAILURE);
699 * @scmd: SCSI cmd to examine.
707 static enum scsi_disposition scsi_eh_completed_normally(struct scsi_cmnd *scmd)
713 if (host_byte(scmd->result) == DID_RESET) {
720 return scsi_check_sense(scmd);
722 if (host_byte(scmd->result) != DID_OK)
728 if (msg_byte(scmd->result) != COMMAND_COMPLETE)
735 switch (status_byte(scmd->result)) {
737 scsi_handle_queue_ramp_up(scmd->device);
742 return scsi_check_sense(scmd);
751 if (scmd->cmnd[0] == TEST_UNIT_READY)
758 scsi_handle_queue_full(scmd->device);
770 * @scmd: Cmd that is done.
772 static void scsi_eh_done(struct scsi_cmnd *scmd)
776 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
777 "%s result: %x\n", __func__, scmd->result));
779 eh_action = scmd->device->host->eh_action;
786 * @scmd: SCSI cmd to send host reset.
788 static enum scsi_disposition scsi_try_host_reset(struct scsi_cmnd *scmd)
792 struct Scsi_Host *host = scmd->device->host;
801 rtn = hostt->eh_host_reset_handler(scmd);
807 scsi_report_bus_reset(host, scmd_channel(scmd));
816 * @scmd: SCSI cmd to send bus reset.
818 static enum scsi_disposition scsi_try_bus_reset(struct scsi_cmnd *scmd)
822 struct Scsi_Host *host = scmd->device->host;
825 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
831 rtn = hostt->eh_bus_reset_handler(scmd);
837 scsi_report_bus_reset(host, scmd_channel(scmd));
852 * @scmd: SCSI cmd used to send a target reset
860 static enum scsi_disposition scsi_try_target_reset(struct scsi_cmnd *scmd)
864 struct Scsi_Host *host = scmd->device->host;
870 rtn = hostt->eh_target_reset_handler(scmd);
873 __starget_for_each_device(scsi_target(scmd->device), NULL,
883 * @scmd: SCSI cmd used to send BDR
891 static enum scsi_disposition scsi_try_bus_device_reset(struct scsi_cmnd *scmd)
894 struct scsi_host_template *hostt = scmd->device->host->hostt;
899 rtn = hostt->eh_device_reset_handler(scmd);
901 __scsi_report_device_reset(scmd->device, NULL);
908 * @scmd: SCSI cmd used to send a target reset
923 scsi_try_to_abort_cmd(struct scsi_host_template *hostt, struct scsi_cmnd *scmd)
928 return hostt->eh_abort_handler(scmd);
931 static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd)
933 if (scsi_try_to_abort_cmd(scmd->device->host->hostt, scmd) != SUCCESS)
934 if (scsi_try_bus_device_reset(scmd) != SUCCESS)
935 if (scsi_try_target_reset(scmd) != SUCCESS)
936 if (scsi_try_bus_reset(scmd) != SUCCESS)
937 scsi_try_host_reset(scmd);
942 * @scmd: SCSI command structure to hijack
952 * and cmnd buffers to read @sense_bytes into @scmd->sense_buffer.
954 void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses,
957 struct scsi_device *sdev = scmd->device;
966 ses->cmd_len = scmd->cmd_len;
967 ses->cmnd = scmd->cmnd;
968 ses->data_direction = scmd->sc_data_direction;
969 ses->sdb = scmd->sdb;
970 ses->result = scmd->result;
971 ses->resid_len = scmd->req.resid_len;
972 ses->underflow = scmd->underflow;
973 ses->prot_op = scmd->prot_op;
974 ses->eh_eflags = scmd->eh_eflags;
976 scmd->prot_op = SCSI_PROT_NORMAL;
977 scmd->eh_eflags = 0;
978 scmd->cmnd = ses->eh_cmnd;
979 memset(scmd->cmnd, 0, BLK_MAX_CDB);
980 memset(&scmd->sdb, 0, sizeof(scmd->sdb));
981 scmd->result = 0;
982 scmd->req.resid_len = 0;
985 scmd->sdb.length = min_t(unsigned, SCSI_SENSE_BUFFERSIZE,
987 sg_init_one(&ses->sense_sgl, scmd->sense_buffer,
988 scmd->sdb.length);
989 scmd->sdb.table.sgl = &ses->sense_sgl;
990 scmd->sc_data_direction = DMA_FROM_DEVICE;
991 scmd->sdb.table.nents = scmd->sdb.table.orig_nents = 1;
992 scmd->cmnd[0] = REQUEST_SENSE;
993 scmd->cmnd[4] = scmd->sdb.length;
994 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
996 scmd->sc_data_direction = DMA_NONE;
999 memcpy(scmd->cmnd, cmnd, cmnd_size);
1000 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
1004 scmd->underflow = 0;
1007 scmd->cmnd[1] = (scmd->cmnd[1] & 0x1f) |
1014 memset(scmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
1020 * @scmd: SCSI command structure to restore
1025 void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd, struct scsi_eh_save *ses)
1030 scmd->cmd_len = ses->cmd_len;
1031 scmd->cmnd = ses->cmnd;
1032 scmd->sc_data_direction = ses->data_direction;
1033 scmd->sdb = ses->sdb;
1034 scmd->result = ses->result;
1035 scmd->req.resid_len = ses->resid_len;
1036 scmd->underflow = ses->underflow;
1037 scmd->prot_op = ses->prot_op;
1038 scmd->eh_eflags = ses->eh_eflags;
1044 * @scmd: SCSI command structure to hijack
1056 static enum scsi_disposition scsi_send_eh_cmnd(struct scsi_cmnd *scmd,
1059 struct scsi_device *sdev = scmd->device;
1068 scsi_eh_prep_cmnd(scmd, &ses, cmnd, cmnd_size, sense_bytes);
1071 scsi_log_send(scmd);
1072 scmd->scsi_done = scsi_eh_done;
1073 scmd->flags |= SCMD_LAST;
1092 rtn = shost->hostt->queuecommand(shost, scmd);
1099 scsi_eh_restore_cmnd(scmd, &ses);
1114 scsi_log_completion(scmd, rtn);
1116 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
1130 rtn = scsi_eh_completed_normally(scmd);
1131 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
1147 scsi_abort_eh_cmnd(scmd);
1151 scsi_eh_restore_cmnd(scmd, &ses);
1158 * @scmd: SCSI cmd for request sense.
1165 static enum scsi_disposition scsi_request_sense(struct scsi_cmnd *scmd)
1167 return scsi_send_eh_cmnd(scmd, NULL, 0, scmd->device->eh_timeout, ~0);
1171 scsi_eh_action(struct scsi_cmnd *scmd, enum scsi_disposition rtn)
1173 if (!blk_rq_is_passthrough(scmd->request)) {
1174 struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd);
1176 rtn = sdrv->eh_action(scmd, rtn);
1183 * @scmd: Original SCSI cmd that eh has finished.
1193 void scsi_eh_finish_cmd(struct scsi_cmnd *scmd, struct list_head *done_q)
1195 list_move_tail(&scmd->eh_entry, done_q);
1222 struct scsi_cmnd *scmd, *next;
1230 list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1231 if ((scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) ||
1232 SCSI_SENSE_VALID(scmd))
1235 shost = scmd->device->host;
1238 scmd_printk(KERN_INFO, scmd,
1243 if (status_byte(scmd->result) != CHECK_CONDITION)
1252 SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd,
1255 rtn = scsi_request_sense(scmd);
1259 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
1260 "sense requested, result %x\n", scmd->result));
1261 SCSI_LOG_ERROR_RECOVERY(3, scsi_print_sense(scmd));
1263 rtn = scsi_decide_disposition(scmd);
1278 if (scmd->allowed == SCSI_CMD_RETRIES_NO_LIMIT)
1279 scmd->retries = scmd->allowed = 1;
1281 scmd->retries = scmd->allowed;
1285 scsi_eh_finish_cmd(scmd, done_q);
1294 * @scmd: &scsi_cmnd to send TUR
1299 static int scsi_eh_tur(struct scsi_cmnd *scmd)
1306 rtn = scsi_send_eh_cmnd(scmd, tur_command, 6,
1307 scmd->device->eh_timeout, 0);
1309 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
1341 struct scsi_cmnd *scmd, *next;
1346 scmd = list_entry(cmd_list->next, struct scsi_cmnd, eh_entry);
1347 sdev = scmd->device;
1361 finish_cmds = !scsi_device_online(scmd->device) ||
1362 (try_stu && !scsi_eh_try_stu(scmd) &&
1363 !scsi_eh_tur(scmd)) ||
1364 !scsi_eh_tur(scmd);
1366 list_for_each_entry_safe(scmd, next, cmd_list, eh_entry)
1367 if (scmd->device == sdev) {
1370 scsi_eh_action(scmd, SUCCESS) == SUCCESS))
1371 scsi_eh_finish_cmd(scmd, done_q);
1373 list_move_tail(&scmd->eh_entry, work_q);
1381 * @scmd: &scsi_cmnd to send START_UNIT
1386 static int scsi_eh_try_stu(struct scsi_cmnd *scmd)
1390 if (scmd->device->allow_restart) {
1395 rtn = scsi_send_eh_cmnd(scmd, stu_command, 6, scmd->device->request_queue->rq_timeout, 0);
1418 struct scsi_cmnd *scmd, *stu_scmd, *next;
1431 list_for_each_entry(scmd, work_q, eh_entry)
1432 if (scmd->device == sdev && SCSI_SENSE_VALID(scmd) &&
1433 scsi_check_sense(scmd) == FAILED ) {
1434 stu_scmd = scmd;
1449 list_for_each_entry_safe(scmd, next,
1451 if (scmd->device == sdev &&
1452 scsi_eh_action(scmd, SUCCESS) == SUCCESS)
1453 scsi_eh_finish_cmd(scmd, done_q);
1484 struct scsi_cmnd *scmd, *bdr_scmd, *next;
1498 list_for_each_entry(scmd, work_q, eh_entry)
1499 if (scmd->device == sdev) {
1500 bdr_scmd = scmd;
1515 list_for_each_entry_safe(scmd, next,
1517 if (scmd->device == sdev &&
1518 scsi_eh_action(scmd, rtn) != FAILED)
1519 scsi_eh_finish_cmd(scmd,
1552 struct scsi_cmnd *next, *scmd;
1567 scmd = list_entry(tmp_list.next, struct scsi_cmnd, eh_entry);
1568 id = scmd_id(scmd);
1574 rtn = scsi_try_target_reset(scmd);
1581 list_for_each_entry_safe(scmd, next, &tmp_list, eh_entry) {
1582 if (scmd_id(scmd) != id)
1586 list_move_tail(&scmd->eh_entry, &check_list);
1588 scsi_eh_finish_cmd(scmd, done_q);
1591 list_move(&scmd->eh_entry, work_q);
1608 struct scsi_cmnd *scmd, *chan_scmd, *next;
1631 list_for_each_entry(scmd, work_q, eh_entry) {
1632 if (channel == scmd_channel(scmd)) {
1633 chan_scmd = scmd;
1650 list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1651 if (channel == scmd_channel(scmd)) {
1653 scsi_eh_finish_cmd(scmd,
1656 list_move_tail(&scmd->eh_entry,
1680 struct scsi_cmnd *scmd, *next;
1685 scmd = list_entry(work_q->next,
1693 rtn = scsi_try_host_reset(scmd);
1697 list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1698 scsi_eh_finish_cmd(scmd, done_q);
1718 struct scsi_cmnd *scmd, *next;
1721 list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1722 sdev_printk(KERN_INFO, scmd->device, "Device offlined - "
1724 sdev = scmd->device;
1730 scsi_eh_finish_cmd(scmd, done_q);
1737 * @scmd: SCSI cmd to examine.
1739 int scsi_noretry_cmd(struct scsi_cmnd *scmd)
1741 switch (host_byte(scmd->result)) {
1747 return (scmd->request->cmd_flags & REQ_FAILFAST_TRANSPORT);
1749 return (scmd->request->cmd_flags & REQ_FAILFAST_DEV);
1751 if (msg_byte(scmd->result) == COMMAND_COMPLETE &&
1752 status_byte(scmd->result) == RESERVATION_CONFLICT)
1756 return (scmd->request->cmd_flags & REQ_FAILFAST_DRIVER);
1759 if (status_byte(scmd->result) != CHECK_CONDITION)
1767 if (scmd->request->cmd_flags & REQ_FAILFAST_DEV ||
1768 blk_rq_is_passthrough(scmd->request))
1776 * @scmd: SCSI cmd to examine.
1788 enum scsi_disposition scsi_decide_disposition(struct scsi_cmnd *scmd)
1796 if (!scsi_device_online(scmd->device)) {
1797 SCSI_LOG_ERROR_RECOVERY(5, scmd_printk(KERN_INFO, scmd,
1806 switch (host_byte(scmd->result)) {
1813 scmd->result &= 0xff00ffff;
1821 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) {
1822 set_host_byte(scmd, DID_TIME_OUT);
1862 if (msg_byte(scmd->result) == COMMAND_COMPLETE &&
1863 status_byte(scmd->result) == RESERVATION_CONFLICT)
1879 if ((scmd->cmnd[0] == TEST_UNIT_READY ||
1880 scmd->cmnd[0] == INQUIRY)) {
1894 if (msg_byte(scmd->result) != COMMAND_COMPLETE)
1900 switch (status_byte(scmd->result)) {
1902 scsi_handle_queue_full(scmd->device);
1917 if (scmd->cmnd[0] == REPORT_LUNS)
1918 scmd->device->sdev_target->expecting_lun_change = 0;
1919 scsi_handle_queue_ramp_up(scmd->device);
1926 rtn = scsi_check_sense(scmd);
1944 sdev_printk(KERN_INFO, scmd->device,
1946 set_host_byte(scmd, DID_NEXUS_FAILURE);
1959 if (scsi_cmd_retry_allowed(scmd) && !scsi_noretry_cmd(scmd)) {
2100 struct scsi_cmnd *scmd, *next;
2102 list_for_each_entry_safe(scmd, next, done_q, eh_entry) {
2103 list_del_init(&scmd->eh_entry);
2104 if (scsi_device_online(scmd->device) &&
2105 !scsi_noretry_cmd(scmd) && scsi_cmd_retry_allowed(scmd)) {
2107 scmd_printk(KERN_INFO, scmd,
2110 scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY);
2114 * scsi_eh_get_sense), scmd->result is already
2117 if (!scmd->result)
2118 scmd->result |= (DRIVER_TIMEOUT << 24);
2120 scmd_printk(KERN_INFO, scmd,
2123 scsi_finish_command(scmd);
2330 scsi_reset_provider_done_command(struct scsi_cmnd *scmd)
2342 struct scsi_cmnd *scmd;
2366 scmd = (struct scsi_cmnd *)(rq + 1);
2367 scsi_init_command(dev, scmd);
2368 scmd->request = rq;
2369 scmd->cmnd = scsi_req(rq)->cmd;
2370 scmd->flags |= SCMD_LAST;
2372 scmd->scsi_done = scsi_reset_provider_done_command;
2373 memset(&scmd->sdb, 0, sizeof(scmd->sdb));
2375 scmd->cmd_len = 0;
2377 scmd->sc_data_direction = DMA_BIDIRECTIONAL;
2388 rtn = scsi_try_bus_device_reset(scmd);
2393 rtn = scsi_try_target_reset(scmd);
2398 rtn = scsi_try_bus_reset(scmd);
2403 rtn = scsi_try_host_reset(scmd);