Lines Matching refs:shost
66 void scsi_eh_wakeup(struct Scsi_Host *shost) in scsi_eh_wakeup() argument
68 lockdep_assert_held(shost->host_lock); in scsi_eh_wakeup()
70 if (scsi_host_busy(shost) == shost->host_failed) { in scsi_eh_wakeup()
71 trace_scsi_eh_wakeup(shost); in scsi_eh_wakeup()
72 wake_up_process(shost->ehandler); in scsi_eh_wakeup()
73 SCSI_LOG_ERROR_RECOVERY(5, shost_printk(KERN_INFO, shost, in scsi_eh_wakeup()
84 void scsi_schedule_eh(struct Scsi_Host *shost) in scsi_schedule_eh() argument
88 spin_lock_irqsave(shost->host_lock, flags); in scsi_schedule_eh()
90 if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 || in scsi_schedule_eh()
91 scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) { in scsi_schedule_eh()
92 shost->host_eh_scheduled++; in scsi_schedule_eh()
93 scsi_eh_wakeup(shost); in scsi_schedule_eh()
96 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_schedule_eh()
100 static int scsi_host_eh_past_deadline(struct Scsi_Host *shost) in scsi_host_eh_past_deadline() argument
102 if (!shost->last_reset || shost->eh_deadline == -1) in scsi_host_eh_past_deadline()
112 if (time_before(jiffies, shost->last_reset + shost->eh_deadline) && in scsi_host_eh_past_deadline()
113 shost->eh_deadline > -1) in scsi_host_eh_past_deadline()
209 struct Scsi_Host *shost = sdev->host; in scsi_abort_command() local
223 spin_lock_irqsave(shost->host_lock, flags); in scsi_abort_command()
224 if (shost->eh_deadline != -1 && !shost->last_reset) in scsi_abort_command()
225 shost->last_reset = jiffies; in scsi_abort_command()
226 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_abort_command()
231 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100); in scsi_abort_command()
255 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_inc_host_failed() local
258 spin_lock_irqsave(shost->host_lock, flags); in scsi_eh_inc_host_failed()
259 shost->host_failed++; in scsi_eh_inc_host_failed()
260 scsi_eh_wakeup(shost); in scsi_eh_inc_host_failed()
261 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_eh_inc_host_failed()
270 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_scmd_add() local
274 WARN_ON_ONCE(!shost->ehandler); in scsi_eh_scmd_add()
276 spin_lock_irqsave(shost->host_lock, flags); in scsi_eh_scmd_add()
277 if (scsi_host_set_state(shost, SHOST_RECOVERY)) { in scsi_eh_scmd_add()
278 ret = scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY); in scsi_eh_scmd_add()
281 if (shost->eh_deadline != -1 && !shost->last_reset) in scsi_eh_scmd_add()
282 shost->last_reset = jiffies; in scsi_eh_scmd_add()
285 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q); in scsi_eh_scmd_add()
286 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_eh_scmd_add()
372 static inline void scsi_eh_prt_fail_stats(struct Scsi_Host *shost, in scsi_eh_prt_fail_stats() argument
382 shost_for_each_device(sdev, shost) { in scsi_eh_prt_fail_stats()
395 shost_printk(KERN_INFO, shost, in scsi_eh_prt_fail_stats()
405 SCSI_LOG_ERROR_RECOVERY(2, shost_printk(KERN_INFO, shost, in scsi_eh_prt_fail_stats()
1073 struct Scsi_Host *shost = sdev->host; in scsi_send_eh_cmnd() local
1082 shost->eh_action = &done; in scsi_send_eh_cmnd()
1104 rtn = shost->hostt->queuecommand(shost, scmd); in scsi_send_eh_cmnd()
1124 shost->eh_action = NULL; in scsi_send_eh_cmnd()
1235 struct Scsi_Host *shost; in scsi_eh_get_sense() local
1247 shost = scmd->device->host; in scsi_eh_get_sense()
1248 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_get_sense()
1426 static int scsi_eh_stu(struct Scsi_Host *shost, in scsi_eh_stu() argument
1433 shost_for_each_device(sdev, shost) { in scsi_eh_stu()
1434 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_stu()
1492 static int scsi_eh_bus_device_reset(struct Scsi_Host *shost, in scsi_eh_bus_device_reset() argument
1500 shost_for_each_device(sdev, shost) { in scsi_eh_bus_device_reset()
1501 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_bus_device_reset()
1554 static int scsi_eh_target_reset(struct Scsi_Host *shost, in scsi_eh_target_reset() argument
1568 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_target_reset()
1573 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1583 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1589 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1616 static int scsi_eh_bus_reset(struct Scsi_Host *shost, in scsi_eh_bus_reset() argument
1632 for (channel = 0; channel <= shost->max_channel; channel++) { in scsi_eh_bus_reset()
1633 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_bus_reset()
1636 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1657 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1674 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1688 static int scsi_eh_host_reset(struct Scsi_Host *shost, in scsi_eh_host_reset() argument
1701 shost_printk(KERN_INFO, shost, in scsi_eh_host_reset()
1714 shost_printk(KERN_INFO, shost, in scsi_eh_host_reset()
2029 static void scsi_restart_operations(struct Scsi_Host *shost) in scsi_restart_operations() argument
2039 shost_for_each_device(sdev, shost) { in scsi_restart_operations()
2052 shost_printk(KERN_INFO, shost, "waking up host to restart\n")); in scsi_restart_operations()
2054 spin_lock_irqsave(shost->host_lock, flags); in scsi_restart_operations()
2055 if (scsi_host_set_state(shost, SHOST_RUNNING)) in scsi_restart_operations()
2056 if (scsi_host_set_state(shost, SHOST_CANCEL)) in scsi_restart_operations()
2057 BUG_ON(scsi_host_set_state(shost, SHOST_DEL)); in scsi_restart_operations()
2058 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_restart_operations()
2060 wake_up(&shost->host_wait); in scsi_restart_operations()
2068 scsi_run_host_queues(shost); in scsi_restart_operations()
2078 spin_lock_irqsave(shost->host_lock, flags); in scsi_restart_operations()
2079 if (shost->host_eh_scheduled) in scsi_restart_operations()
2080 if (scsi_host_set_state(shost, SHOST_RECOVERY)) in scsi_restart_operations()
2081 WARN_ON(scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY)); in scsi_restart_operations()
2082 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_restart_operations()
2091 void scsi_eh_ready_devs(struct Scsi_Host *shost, in scsi_eh_ready_devs() argument
2095 if (!scsi_eh_stu(shost, work_q, done_q)) in scsi_eh_ready_devs()
2096 if (!scsi_eh_bus_device_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2097 if (!scsi_eh_target_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2098 if (!scsi_eh_bus_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2099 if (!scsi_eh_host_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2164 static void scsi_unjam_host(struct Scsi_Host *shost) in scsi_unjam_host() argument
2170 spin_lock_irqsave(shost->host_lock, flags); in scsi_unjam_host()
2171 list_splice_init(&shost->eh_cmd_q, &eh_work_q); in scsi_unjam_host()
2172 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_unjam_host()
2174 SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, &eh_work_q)); in scsi_unjam_host()
2177 scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q); in scsi_unjam_host()
2179 spin_lock_irqsave(shost->host_lock, flags); in scsi_unjam_host()
2180 if (shost->eh_deadline != -1) in scsi_unjam_host()
2181 shost->last_reset = 0; in scsi_unjam_host()
2182 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_unjam_host()
2196 struct Scsi_Host *shost = data; in scsi_error_handler() local
2215 if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) || in scsi_error_handler()
2216 shost->host_failed != scsi_host_busy(shost)) { in scsi_error_handler()
2218 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2220 shost->host_no)); in scsi_error_handler()
2227 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2229 shost->host_no, shost->host_eh_scheduled, in scsi_error_handler()
2230 shost->host_failed, in scsi_error_handler()
2231 scsi_host_busy(shost))); in scsi_error_handler()
2238 if (!shost->eh_noresume && scsi_autopm_get_host(shost) != 0) { in scsi_error_handler()
2240 shost_printk(KERN_ERR, shost, in scsi_error_handler()
2242 shost->host_no)); in scsi_error_handler()
2246 if (shost->transportt->eh_strategy_handler) in scsi_error_handler()
2247 shost->transportt->eh_strategy_handler(shost); in scsi_error_handler()
2249 scsi_unjam_host(shost); in scsi_error_handler()
2252 shost->host_failed = 0; in scsi_error_handler()
2261 scsi_restart_operations(shost); in scsi_error_handler()
2262 if (!shost->eh_noresume) in scsi_error_handler()
2263 scsi_autopm_put_host(shost); in scsi_error_handler()
2268 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2270 shost->host_no)); in scsi_error_handler()
2271 shost->ehandler = NULL; in scsi_error_handler()
2296 void scsi_report_bus_reset(struct Scsi_Host *shost, int channel) in scsi_report_bus_reset() argument
2300 __shost_for_each_device(sdev, shost) { in scsi_report_bus_reset()
2329 void scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target) in scsi_report_device_reset() argument
2333 __shost_for_each_device(sdev, shost) { in scsi_report_device_reset()
2355 struct Scsi_Host *shost = dev->host; in scsi_ioctl_reset() local
2368 if (scsi_autopm_get_host(shost) < 0) in scsi_ioctl_reset()
2373 shost->hostt->cmd_size, GFP_KERNEL); in scsi_ioctl_reset()
2389 spin_lock_irqsave(shost->host_lock, flags); in scsi_ioctl_reset()
2390 shost->tmf_in_progress = 1; in scsi_ioctl_reset()
2391 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_ioctl_reset()
2424 spin_lock_irqsave(shost->host_lock, flags); in scsi_ioctl_reset()
2425 shost->tmf_in_progress = 0; in scsi_ioctl_reset()
2426 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_ioctl_reset()
2433 shost_printk(KERN_INFO, shost, in scsi_ioctl_reset()
2436 wake_up(&shost->host_wait); in scsi_ioctl_reset()
2437 scsi_run_host_queues(shost); in scsi_ioctl_reset()
2442 scsi_autopm_put_host(shost); in scsi_ioctl_reset()