Lines Matching refs:scmd

60 static int scsi_eh_try_stu(struct scsi_cmnd *scmd);
80 * Schedule SCSI EH without scmd.
149 struct scsi_cmnd *scmd =
151 struct scsi_device *sdev = scmd->device;
158 scmd_printk(KERN_INFO, scmd,
164 scmd_printk(KERN_INFO, scmd,
166 rtn = scsi_try_to_abort_cmd(shost->hostt, scmd);
169 scmd_printk(KERN_INFO, scmd,
175 set_host_byte(scmd, DID_TIME_OUT);
178 scmd_printk(KERN_INFO, scmd,
185 list_del_init(&scmd->eh_entry);
198 if (!scsi_noretry_cmd(scmd) &&
199 scsi_cmd_retry_allowed(scmd) &&
200 scsi_eh_should_retry_cmd(scmd)) {
202 scmd_printk(KERN_WARNING, scmd,
204 scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY);
207 scmd_printk(KERN_WARNING, scmd,
209 scsi_finish_command(scmd);
215 list_del_init(&scmd->eh_entry);
218 scsi_eh_scmd_add(scmd);
223 * @scmd: scmd to abort.
228 scsi_abort_command(struct scsi_cmnd *scmd)
230 struct scsi_device *sdev = scmd->device;
239 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) {
244 scmd_printk(KERN_INFO, scmd,
246 BUG_ON(delayed_work_pending(&scmd->abort_work));
253 BUG_ON(!list_empty(&scmd->eh_entry));
254 list_add_tail(&scmd->eh_entry, &shost->eh_abort_list);
257 scmd->eh_eflags |= SCSI_EH_ABORT_SCHEDULED;
259 scmd_printk(KERN_INFO, scmd, "abort scheduled\n"));
260 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100);
266 * @scmd: scmd to run eh on.
272 static void scsi_eh_reset(struct scsi_cmnd *scmd)
274 if (!blk_rq_is_passthrough(scsi_cmd_to_rq(scmd))) {
275 struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd);
277 sdrv->eh_reset(scmd);
283 struct scsi_cmnd *scmd = container_of(head, typeof(*scmd), rcu);
284 struct Scsi_Host *shost = scmd->device->host;
296 * @scmd: scmd to run eh on.
298 void scsi_eh_scmd_add(struct scsi_cmnd *scmd)
300 struct Scsi_Host *shost = scmd->device->host;
314 scsi_eh_reset(scmd);
315 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q);
321 call_rcu_hurry(&scmd->rcu, scsi_eh_inc_host_failed);
336 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req);
337 struct Scsi_Host *host = scmd->device->host;
339 trace_scsi_dispatch_cmd_timeout(scmd);
340 scsi_log_completion(scmd, TIMEOUT_ERROR);
342 atomic_inc(&scmd->device->iotmo_cnt);
347 switch (host->hostt->eh_timed_out(scmd)) {
359 * *scmd.
361 if (test_and_set_bit(SCMD_STATE_COMPLETE, &scmd->state))
363 atomic_inc(&scmd->device->iodone_cnt);
364 if (scsi_abort_command(scmd) != SUCCESS) {
365 set_host_byte(scmd, DID_TIME_OUT);
366 scsi_eh_scmd_add(scmd);
404 struct scsi_cmnd *scmd;
412 list_for_each_entry(scmd, work_q, eh_entry) {
413 if (scmd->device == sdev) {
415 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED)
529 * @scmd: Cmd to have sense checked.
538 enum scsi_disposition scsi_check_sense(struct scsi_cmnd *scmd)
540 struct request *req = scsi_cmd_to_rq(scmd);
541 struct scsi_device *sdev = scmd->device;
544 if (! scsi_command_normalize_sense(scmd, &sshdr))
561 if (scmd->cmnd[0] == TEST_UNIT_READY &&
562 scmd->submitter != SUBMITTED_BY_SCSI_ERROR_HANDLER)
576 if (scmd->sense_buffer[2] & 0xe0)
585 (scmd->sense_buffer[8] == 0x4) &&
586 (scmd->sense_buffer[11] & 0xe0))
610 set_scsi_ml_byte(scmd, SCSIML_STAT_DL_TIMEOUT);
631 if (scmd->device->expecting_cc_ua) {
639 scmd->device->expecting_cc_ua = 0;
648 if (scmd->device->sdev_target->expecting_lun_change &&
661 if (scmd->device->allow_restart &&
674 set_scsi_ml_byte(scmd, SCSIML_STAT_NOSPC);
682 set_scsi_ml_byte(scmd, SCSIML_STAT_TGT_FAILURE);
689 set_scsi_ml_byte(scmd, SCSIML_STAT_MED_ERROR);
695 if (scmd->device->retry_hwerror)
698 set_scsi_ml_byte(scmd, SCSIML_STAT_TGT_FAILURE);
708 set_scsi_ml_byte(scmd, SCSIML_STAT_TGT_FAILURE);
714 set_scsi_ml_byte(scmd, SCSIML_STAT_DL_TIMEOUT);
781 * @scmd: SCSI cmd to examine.
789 static enum scsi_disposition scsi_eh_completed_normally(struct scsi_cmnd *scmd)
795 if (host_byte(scmd->result) == DID_RESET) {
802 return scsi_check_sense(scmd);
804 if (host_byte(scmd->result) != DID_OK)
811 switch (get_status_byte(scmd)) {
813 scsi_handle_queue_ramp_up(scmd->device);
814 if (scmd->sense_buffer && SCSI_SENSE_VALID(scmd))
821 scsi_check_sense(scmd);
826 return scsi_check_sense(scmd);
835 if (scmd->cmnd[0] == TEST_UNIT_READY)
842 scsi_handle_queue_full(scmd->device);
854 * @scmd: Cmd that is done.
856 void scsi_eh_done(struct scsi_cmnd *scmd)
860 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
861 "%s result: %x\n", __func__, scmd->result));
863 eh_action = scmd->device->host->eh_action;
870 * @scmd: SCSI cmd to send host reset.
872 static enum scsi_disposition scsi_try_host_reset(struct scsi_cmnd *scmd)
876 struct Scsi_Host *host = scmd->device->host;
885 rtn = hostt->eh_host_reset_handler(scmd);
891 scsi_report_bus_reset(host, scmd_channel(scmd));
900 * @scmd: SCSI cmd to send bus reset.
902 static enum scsi_disposition scsi_try_bus_reset(struct scsi_cmnd *scmd)
906 struct Scsi_Host *host = scmd->device->host;
909 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
915 rtn = hostt->eh_bus_reset_handler(scmd);
921 scsi_report_bus_reset(host, scmd_channel(scmd));
936 * @scmd: SCSI cmd used to send a target reset
944 static enum scsi_disposition scsi_try_target_reset(struct scsi_cmnd *scmd)
948 struct Scsi_Host *host = scmd->device->host;
954 rtn = hostt->eh_target_reset_handler(scmd);
957 __starget_for_each_device(scsi_target(scmd->device), NULL,
967 * @scmd: SCSI cmd used to send BDR
975 static enum scsi_disposition scsi_try_bus_device_reset(struct scsi_cmnd *scmd)
978 const struct scsi_host_template *hostt = scmd->device->host->hostt;
983 rtn = hostt->eh_device_reset_handler(scmd);
985 __scsi_report_device_reset(scmd->device, NULL);
992 * @scmd: SCSI cmd used to send a target reset
1007 scsi_try_to_abort_cmd(const struct scsi_host_template *hostt, struct scsi_cmnd *scmd)
1012 return hostt->eh_abort_handler(scmd);
1015 static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd)
1017 if (scsi_try_to_abort_cmd(scmd->device->host->hostt, scmd) != SUCCESS)
1018 if (scsi_try_bus_device_reset(scmd) != SUCCESS)
1019 if (scsi_try_target_reset(scmd) != SUCCESS)
1020 if (scsi_try_bus_reset(scmd) != SUCCESS)
1021 scsi_try_host_reset(scmd);
1026 * @scmd: SCSI command structure to hijack
1036 * and cmnd buffers to read @sense_bytes into @scmd->sense_buffer.
1038 void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses,
1041 struct scsi_device *sdev = scmd->device;
1050 ses->cmd_len = scmd->cmd_len;
1051 ses->data_direction = scmd->sc_data_direction;
1052 ses->sdb = scmd->sdb;
1053 ses->result = scmd->result;
1054 ses->resid_len = scmd->resid_len;
1055 ses->underflow = scmd->underflow;
1056 ses->prot_op = scmd->prot_op;
1057 ses->eh_eflags = scmd->eh_eflags;
1059 scmd->prot_op = SCSI_PROT_NORMAL;
1060 scmd->eh_eflags = 0;
1061 memcpy(ses->cmnd, scmd->cmnd, sizeof(ses->cmnd));
1062 memset(scmd->cmnd, 0, sizeof(scmd->cmnd));
1063 memset(&scmd->sdb, 0, sizeof(scmd->sdb));
1064 scmd->result = 0;
1065 scmd->resid_len = 0;
1068 scmd->sdb.length = min_t(unsigned, SCSI_SENSE_BUFFERSIZE,
1070 sg_init_one(&ses->sense_sgl, scmd->sense_buffer,
1071 scmd->sdb.length);
1072 scmd->sdb.table.sgl = &ses->sense_sgl;
1073 scmd->sc_data_direction = DMA_FROM_DEVICE;
1074 scmd->sdb.table.nents = scmd->sdb.table.orig_nents = 1;
1075 scmd->cmnd[0] = REQUEST_SENSE;
1076 scmd->cmnd[4] = scmd->sdb.length;
1077 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
1079 scmd->sc_data_direction = DMA_NONE;
1081 BUG_ON(cmnd_size > sizeof(scmd->cmnd));
1082 memcpy(scmd->cmnd, cmnd, cmnd_size);
1083 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
1087 scmd->underflow = 0;
1090 scmd->cmnd[1] = (scmd->cmnd[1] & 0x1f) |
1097 memset(scmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
1103 * @scmd: SCSI command structure to restore
1108 void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd, struct scsi_eh_save *ses)
1113 scmd->cmd_len = ses->cmd_len;
1114 memcpy(scmd->cmnd, ses->cmnd, sizeof(ses->cmnd));
1115 scmd->sc_data_direction = ses->data_direction;
1116 scmd->sdb = ses->sdb;
1117 scmd->result = ses->result;
1118 scmd->resid_len = ses->resid_len;
1119 scmd->underflow = ses->underflow;
1120 scmd->prot_op = ses->prot_op;
1121 scmd->eh_eflags = ses->eh_eflags;
1127 * @scmd: SCSI command structure to hijack
1139 static enum scsi_disposition scsi_send_eh_cmnd(struct scsi_cmnd *scmd,
1142 struct scsi_device *sdev = scmd->device;
1151 scsi_eh_prep_cmnd(scmd, &ses, cmnd, cmnd_size, sense_bytes);
1154 scsi_log_send(scmd);
1155 scmd->submitter = SUBMITTED_BY_SCSI_ERROR_HANDLER;
1156 scmd->flags |= SCMD_LAST;
1175 rtn = shost->hostt->queuecommand(shost, scmd);
1182 scsi_eh_restore_cmnd(scmd, &ses);
1198 scsi_log_completion(scmd, rtn);
1200 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
1214 rtn = scsi_eh_completed_normally(scmd);
1215 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
1231 scsi_abort_eh_cmnd(scmd);
1235 scsi_eh_restore_cmnd(scmd, &ses);
1242 * @scmd: SCSI cmd for request sense.
1249 static enum scsi_disposition scsi_request_sense(struct scsi_cmnd *scmd)
1251 return scsi_send_eh_cmnd(scmd, NULL, 0, scmd->device->eh_timeout, ~0);
1255 scsi_eh_action(struct scsi_cmnd *scmd, enum scsi_disposition rtn)
1257 if (!blk_rq_is_passthrough(scsi_cmd_to_rq(scmd))) {
1258 struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd);
1260 rtn = sdrv->eh_action(scmd, rtn);
1267 * @scmd: Original SCSI cmd that eh has finished.
1277 void scsi_eh_finish_cmd(struct scsi_cmnd *scmd, struct list_head *done_q)
1279 list_move_tail(&scmd->eh_entry, done_q);
1306 struct scsi_cmnd *scmd, *next;
1314 list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1315 if ((scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) ||
1316 SCSI_SENSE_VALID(scmd))
1319 shost = scmd->device->host;
1322 scmd_printk(KERN_INFO, scmd,
1327 if (!scsi_status_is_check_condition(scmd->result))
1336 SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd,
1339 rtn = scsi_request_sense(scmd);
1343 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
1344 "sense requested, result %x\n", scmd->result));
1345 SCSI_LOG_ERROR_RECOVERY(3, scsi_print_sense(scmd));
1347 rtn = scsi_decide_disposition(scmd);
1362 if (scmd->allowed == SCSI_CMD_RETRIES_NO_LIMIT)
1363 scmd->retries = scmd->allowed = 1;
1365 scmd->retries = scmd->allowed;
1369 scsi_eh_finish_cmd(scmd, done_q);
1378 * @scmd: &scsi_cmnd to send TUR
1383 static int scsi_eh_tur(struct scsi_cmnd *scmd)
1390 rtn = scsi_send_eh_cmnd(scmd, tur_command, 6,
1391 scmd->device->eh_timeout, 0);
1393 SCSI_LOG_ERROR_RECOVERY(3, scmd_printk(KERN_INFO, scmd,
1425 struct scsi_cmnd *scmd, *next;
1430 scmd = list_entry(cmd_list->next, struct scsi_cmnd, eh_entry);
1431 sdev = scmd->device;
1445 finish_cmds = !scsi_device_online(scmd->device) ||
1446 (try_stu && !scsi_eh_try_stu(scmd) &&
1447 !scsi_eh_tur(scmd)) ||
1448 !scsi_eh_tur(scmd);
1450 list_for_each_entry_safe(scmd, next, cmd_list, eh_entry)
1451 if (scmd->device == sdev) {
1454 scsi_eh_action(scmd, SUCCESS) == SUCCESS))
1455 scsi_eh_finish_cmd(scmd, done_q);
1457 list_move_tail(&scmd->eh_entry, work_q);
1465 * @scmd: &scsi_cmnd to send START_UNIT
1470 static int scsi_eh_try_stu(struct scsi_cmnd *scmd)
1474 if (scmd->device->allow_restart) {
1479 rtn = scsi_send_eh_cmnd(scmd, stu_command, 6,
1480 scmd->device->eh_timeout, 0);
1503 struct scsi_cmnd *scmd, *stu_scmd, *next;
1516 list_for_each_entry(scmd, work_q, eh_entry)
1517 if (scmd->device == sdev && SCSI_SENSE_VALID(scmd) &&
1518 scsi_check_sense(scmd) == FAILED ) {
1519 stu_scmd = scmd;
1534 list_for_each_entry_safe(scmd, next,
1536 if (scmd->device == sdev &&
1537 scsi_eh_action(scmd, SUCCESS) == SUCCESS)
1538 scsi_eh_finish_cmd(scmd, done_q);
1569 struct scsi_cmnd *scmd, *bdr_scmd, *next;
1583 list_for_each_entry(scmd, work_q, eh_entry)
1584 if (scmd->device == sdev) {
1585 bdr_scmd = scmd;
1600 list_for_each_entry_safe(scmd, next,
1602 if (scmd->device == sdev &&
1603 scsi_eh_action(scmd, rtn) != FAILED)
1604 scsi_eh_finish_cmd(scmd,
1637 struct scsi_cmnd *next, *scmd;
1652 scmd = list_entry(tmp_list.next, struct scsi_cmnd, eh_entry);
1653 id = scmd_id(scmd);
1659 rtn = scsi_try_target_reset(scmd);
1666 list_for_each_entry_safe(scmd, next, &tmp_list, eh_entry) {
1667 if (scmd_id(scmd) != id)
1671 list_move_tail(&scmd->eh_entry, &check_list);
1673 scsi_eh_finish_cmd(scmd, done_q);
1676 list_move(&scmd->eh_entry, work_q);
1693 struct scsi_cmnd *scmd, *chan_scmd, *next;
1716 list_for_each_entry(scmd, work_q, eh_entry) {
1717 if (channel == scmd_channel(scmd)) {
1718 chan_scmd = scmd;
1735 list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1736 if (channel == scmd_channel(scmd)) {
1738 scsi_eh_finish_cmd(scmd,
1741 list_move_tail(&scmd->eh_entry,
1765 struct scsi_cmnd *scmd, *next;
1770 scmd = list_entry(work_q->next,
1778 rtn = scsi_try_host_reset(scmd);
1782 list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1783 scsi_eh_finish_cmd(scmd, done_q);
1803 struct scsi_cmnd *scmd, *next;
1806 list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1807 sdev_printk(KERN_INFO, scmd->device, "Device offlined - "
1809 sdev = scmd->device;
1815 scsi_eh_finish_cmd(scmd, done_q);
1822 * @scmd: SCSI cmd to examine.
1824 bool scsi_noretry_cmd(struct scsi_cmnd *scmd)
1826 struct request *req = scsi_cmd_to_rq(scmd);
1828 switch (host_byte(scmd->result)) {
1838 if (get_status_byte(scmd) == SAM_STAT_RESERVATION_CONFLICT)
1846 if (scsi_ml_byte(scmd->result) == SCSIML_STAT_DL_TIMEOUT)
1849 if (!scsi_status_is_check_condition(scmd->result))
1865 * @scmd: SCSI cmd to examine.
1877 enum scsi_disposition scsi_decide_disposition(struct scsi_cmnd *scmd)
1885 if (!scsi_device_online(scmd->device)) {
1886 SCSI_LOG_ERROR_RECOVERY(5, scmd_printk(KERN_INFO, scmd,
1895 switch (host_byte(scmd->result)) {
1902 scmd->result &= 0xff00ffff;
1910 if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) {
1911 set_host_byte(scmd, DID_TIME_OUT);
1957 if (get_status_byte(scmd) == SAM_STAT_RESERVATION_CONFLICT)
1973 if ((scmd->cmnd[0] == TEST_UNIT_READY ||
1974 scmd->cmnd[0] == INQUIRY)) {
1988 switch (get_status_byte(scmd)) {
1990 scsi_handle_queue_full(scmd->device);
2005 if (scmd->cmnd[0] == REPORT_LUNS)
2006 scmd->device->sdev_target->expecting_lun_change = 0;
2007 scsi_handle_queue_ramp_up(scmd->device);
2008 if (scmd->sense_buffer && SCSI_SENSE_VALID(scmd))
2015 scsi_check_sense(scmd);
2022 rtn = scsi_check_sense(scmd);
2040 sdev_printk(KERN_INFO, scmd->device,
2042 set_scsi_ml_byte(scmd, SCSIML_STAT_RESV_CONFLICT);
2053 if (scsi_cmd_retry_allowed(scmd) && !scsi_noretry_cmd(scmd)) {
2083 struct scsi_cmnd *scmd;
2089 scmd = blk_mq_rq_to_pdu(req);
2091 scmd->cmnd[0] = ALLOW_MEDIUM_REMOVAL;
2092 scmd->cmnd[1] = 0;
2093 scmd->cmnd[2] = 0;
2094 scmd->cmnd[3] = 0;
2095 scmd->cmnd[4] = SCSI_REMOVAL_PREVENT;
2096 scmd->cmnd[5] = 0;
2097 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
2098 scmd->allowed = 5;
2197 struct scsi_cmnd *scmd, *next;
2199 list_for_each_entry_safe(scmd, next, done_q, eh_entry) {
2200 struct scsi_device *sdev = scmd->device;
2202 list_del_init(&scmd->eh_entry);
2203 if (scsi_device_online(sdev) && !scsi_noretry_cmd(scmd) &&
2204 scsi_cmd_retry_allowed(scmd) &&
2205 scsi_eh_should_retry_cmd(scmd)) {
2207 scmd_printk(KERN_INFO, scmd,
2210 scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY);
2215 * scsi_eh_get_sense), scmd->result is already
2218 if (!scmd->result &&
2219 !(scmd->flags & SCMD_FORCE_EH_SUCCESS))
2220 scmd->result |= (DID_TIME_OUT << 16);
2222 scmd_printk(KERN_INFO, scmd,
2225 scsi_finish_command(scmd);
2439 struct scsi_cmnd *scmd;
2463 scmd = (struct scsi_cmnd *)(rq + 1);
2464 scsi_init_command(dev, scmd);
2466 scmd->submitter = SUBMITTED_BY_SCSI_RESET_IOCTL;
2467 scmd->flags |= SCMD_LAST;
2468 memset(&scmd->sdb, 0, sizeof(scmd->sdb));
2470 scmd->cmd_len = 0;
2472 scmd->sc_data_direction = DMA_BIDIRECTIONAL;
2483 rtn = scsi_try_bus_device_reset(scmd);
2488 rtn = scsi_try_target_reset(scmd);
2493 rtn = scsi_try_bus_reset(scmd);
2498 rtn = scsi_try_host_reset(scmd);