Lines Matching refs:shost

64 void scsi_eh_wakeup(struct Scsi_Host *shost)  in scsi_eh_wakeup()  argument
66 lockdep_assert_held(shost->host_lock); in scsi_eh_wakeup()
68 if (scsi_host_busy(shost) == shost->host_failed) { in scsi_eh_wakeup()
69 trace_scsi_eh_wakeup(shost); in scsi_eh_wakeup()
70 wake_up_process(shost->ehandler); in scsi_eh_wakeup()
71 SCSI_LOG_ERROR_RECOVERY(5, shost_printk(KERN_INFO, shost, in scsi_eh_wakeup()
82 void scsi_schedule_eh(struct Scsi_Host *shost) in scsi_schedule_eh() argument
86 spin_lock_irqsave(shost->host_lock, flags); in scsi_schedule_eh()
88 if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 || in scsi_schedule_eh()
89 scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) { in scsi_schedule_eh()
90 shost->host_eh_scheduled++; in scsi_schedule_eh()
91 scsi_eh_wakeup(shost); in scsi_schedule_eh()
94 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_schedule_eh()
98 static int scsi_host_eh_past_deadline(struct Scsi_Host *shost) in scsi_host_eh_past_deadline() argument
100 if (!shost->last_reset || shost->eh_deadline == -1) in scsi_host_eh_past_deadline()
110 if (time_before(jiffies, shost->last_reset + shost->eh_deadline) && in scsi_host_eh_past_deadline()
111 shost->eh_deadline > -1) in scsi_host_eh_past_deadline()
152 struct Scsi_Host *shost = sdev->host; in scmd_eh_abort_handler() local
156 if (scsi_host_eh_past_deadline(shost)) { in scmd_eh_abort_handler()
166 rtn = scsi_try_to_abort_cmd(shost->hostt, scmd); in scmd_eh_abort_handler()
176 if (scsi_host_eh_past_deadline(shost)) { in scmd_eh_abort_handler()
184 spin_lock_irqsave(shost->host_lock, flags); in scmd_eh_abort_handler()
191 if (list_empty(&shost->eh_abort_list) && in scmd_eh_abort_handler()
192 list_empty(&shost->eh_cmd_q)) in scmd_eh_abort_handler()
193 if (shost->eh_deadline != -1) in scmd_eh_abort_handler()
194 shost->last_reset = 0; in scmd_eh_abort_handler()
196 spin_unlock_irqrestore(shost->host_lock, flags); in scmd_eh_abort_handler()
214 spin_lock_irqsave(shost->host_lock, flags); in scmd_eh_abort_handler()
216 spin_unlock_irqrestore(shost->host_lock, flags); in scmd_eh_abort_handler()
231 struct Scsi_Host *shost = sdev->host; in scsi_abort_command() local
234 if (!shost->hostt->eh_abort_handler) { in scsi_abort_command()
250 spin_lock_irqsave(shost->host_lock, flags); in scsi_abort_command()
251 if (shost->eh_deadline != -1 && !shost->last_reset) in scsi_abort_command()
252 shost->last_reset = jiffies; in scsi_abort_command()
254 list_add_tail(&scmd->eh_entry, &shost->eh_abort_list); in scsi_abort_command()
255 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_abort_command()
260 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100); in scsi_abort_command()
284 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_inc_host_failed() local
287 spin_lock_irqsave(shost->host_lock, flags); in scsi_eh_inc_host_failed()
288 shost->host_failed++; in scsi_eh_inc_host_failed()
289 scsi_eh_wakeup(shost); in scsi_eh_inc_host_failed()
290 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_eh_inc_host_failed()
299 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_scmd_add() local
303 WARN_ON_ONCE(!shost->ehandler); in scsi_eh_scmd_add()
305 spin_lock_irqsave(shost->host_lock, flags); in scsi_eh_scmd_add()
306 if (scsi_host_set_state(shost, SHOST_RECOVERY)) { in scsi_eh_scmd_add()
307 ret = scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY); in scsi_eh_scmd_add()
310 if (shost->eh_deadline != -1 && !shost->last_reset) in scsi_eh_scmd_add()
311 shost->last_reset = jiffies; in scsi_eh_scmd_add()
314 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q); in scsi_eh_scmd_add()
315 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_eh_scmd_add()
400 static inline void scsi_eh_prt_fail_stats(struct Scsi_Host *shost, in scsi_eh_prt_fail_stats() argument
410 shost_for_each_device(sdev, shost) { in scsi_eh_prt_fail_stats()
423 shost_printk(KERN_INFO, shost, in scsi_eh_prt_fail_stats()
433 SCSI_LOG_ERROR_RECOVERY(2, shost_printk(KERN_INFO, shost, in scsi_eh_prt_fail_stats()
1142 struct Scsi_Host *shost = sdev->host; in scsi_send_eh_cmnd() local
1151 shost->eh_action = &done; in scsi_send_eh_cmnd()
1173 rtn = shost->hostt->queuecommand(shost, scmd); in scsi_send_eh_cmnd()
1194 shost->eh_action = NULL; in scsi_send_eh_cmnd()
1305 struct Scsi_Host *shost; in scsi_eh_get_sense() local
1317 shost = scmd->device->host; in scsi_eh_get_sense()
1318 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_get_sense()
1497 static int scsi_eh_stu(struct Scsi_Host *shost, in scsi_eh_stu() argument
1504 shost_for_each_device(sdev, shost) { in scsi_eh_stu()
1505 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_stu()
1563 static int scsi_eh_bus_device_reset(struct Scsi_Host *shost, in scsi_eh_bus_device_reset() argument
1571 shost_for_each_device(sdev, shost) { in scsi_eh_bus_device_reset()
1572 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_bus_device_reset()
1625 static int scsi_eh_target_reset(struct Scsi_Host *shost, in scsi_eh_target_reset() argument
1639 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_target_reset()
1644 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1654 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1660 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1687 static int scsi_eh_bus_reset(struct Scsi_Host *shost, in scsi_eh_bus_reset() argument
1703 for (channel = 0; channel <= shost->max_channel; channel++) { in scsi_eh_bus_reset()
1704 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_bus_reset()
1707 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1728 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1745 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1759 static int scsi_eh_host_reset(struct Scsi_Host *shost, in scsi_eh_host_reset() argument
1772 shost_printk(KERN_INFO, shost, in scsi_eh_host_reset()
1785 shost_printk(KERN_INFO, shost, in scsi_eh_host_reset()
2113 static void scsi_restart_operations(struct Scsi_Host *shost) in scsi_restart_operations() argument
2123 shost_for_each_device(sdev, shost) { in scsi_restart_operations()
2136 shost_printk(KERN_INFO, shost, "waking up host to restart\n")); in scsi_restart_operations()
2138 spin_lock_irqsave(shost->host_lock, flags); in scsi_restart_operations()
2139 if (scsi_host_set_state(shost, SHOST_RUNNING)) in scsi_restart_operations()
2140 if (scsi_host_set_state(shost, SHOST_CANCEL)) in scsi_restart_operations()
2141 BUG_ON(scsi_host_set_state(shost, SHOST_DEL)); in scsi_restart_operations()
2142 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_restart_operations()
2144 wake_up(&shost->host_wait); in scsi_restart_operations()
2152 scsi_run_host_queues(shost); in scsi_restart_operations()
2162 spin_lock_irqsave(shost->host_lock, flags); in scsi_restart_operations()
2163 if (shost->host_eh_scheduled) in scsi_restart_operations()
2164 if (scsi_host_set_state(shost, SHOST_RECOVERY)) in scsi_restart_operations()
2165 WARN_ON(scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY)); in scsi_restart_operations()
2166 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_restart_operations()
2175 void scsi_eh_ready_devs(struct Scsi_Host *shost, in scsi_eh_ready_devs() argument
2179 if (!scsi_eh_stu(shost, work_q, done_q)) in scsi_eh_ready_devs()
2180 if (!scsi_eh_bus_device_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2181 if (!scsi_eh_target_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2182 if (!scsi_eh_bus_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2183 if (!scsi_eh_host_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2249 static void scsi_unjam_host(struct Scsi_Host *shost) in scsi_unjam_host() argument
2255 spin_lock_irqsave(shost->host_lock, flags); in scsi_unjam_host()
2256 list_splice_init(&shost->eh_cmd_q, &eh_work_q); in scsi_unjam_host()
2257 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_unjam_host()
2259 SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, &eh_work_q)); in scsi_unjam_host()
2262 scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q); in scsi_unjam_host()
2264 spin_lock_irqsave(shost->host_lock, flags); in scsi_unjam_host()
2265 if (shost->eh_deadline != -1) in scsi_unjam_host()
2266 shost->last_reset = 0; in scsi_unjam_host()
2267 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_unjam_host()
2281 struct Scsi_Host *shost = data; in scsi_error_handler() local
2300 if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) || in scsi_error_handler()
2301 shost->host_failed != scsi_host_busy(shost)) { in scsi_error_handler()
2303 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2305 shost->host_no)); in scsi_error_handler()
2312 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2314 shost->host_no, shost->host_eh_scheduled, in scsi_error_handler()
2315 shost->host_failed, in scsi_error_handler()
2316 scsi_host_busy(shost))); in scsi_error_handler()
2323 if (!shost->eh_noresume && scsi_autopm_get_host(shost) != 0) { in scsi_error_handler()
2325 shost_printk(KERN_ERR, shost, in scsi_error_handler()
2327 shost->host_no)); in scsi_error_handler()
2331 if (shost->transportt->eh_strategy_handler) in scsi_error_handler()
2332 shost->transportt->eh_strategy_handler(shost); in scsi_error_handler()
2334 scsi_unjam_host(shost); in scsi_error_handler()
2337 shost->host_failed = 0; in scsi_error_handler()
2346 scsi_restart_operations(shost); in scsi_error_handler()
2347 if (!shost->eh_noresume) in scsi_error_handler()
2348 scsi_autopm_put_host(shost); in scsi_error_handler()
2353 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2355 shost->host_no)); in scsi_error_handler()
2356 shost->ehandler = NULL; in scsi_error_handler()
2381 void scsi_report_bus_reset(struct Scsi_Host *shost, int channel) in scsi_report_bus_reset() argument
2385 __shost_for_each_device(sdev, shost) { in scsi_report_bus_reset()
2414 void scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target) in scsi_report_device_reset() argument
2418 __shost_for_each_device(sdev, shost) { in scsi_report_device_reset()
2435 struct Scsi_Host *shost = dev->host; in scsi_ioctl_reset() local
2448 if (scsi_autopm_get_host(shost) < 0) in scsi_ioctl_reset()
2453 shost->hostt->cmd_size, GFP_KERNEL); in scsi_ioctl_reset()
2468 spin_lock_irqsave(shost->host_lock, flags); in scsi_ioctl_reset()
2469 shost->tmf_in_progress = 1; in scsi_ioctl_reset()
2470 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_ioctl_reset()
2503 spin_lock_irqsave(shost->host_lock, flags); in scsi_ioctl_reset()
2504 shost->tmf_in_progress = 0; in scsi_ioctl_reset()
2505 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_ioctl_reset()
2512 shost_printk(KERN_INFO, shost, in scsi_ioctl_reset()
2515 wake_up(&shost->host_wait); in scsi_ioctl_reset()
2516 scsi_run_host_queues(shost); in scsi_ioctl_reset()
2521 scsi_autopm_put_host(shost); in scsi_ioctl_reset()