Lines Matching refs:shost
65 void scsi_eh_wakeup(struct Scsi_Host *shost) in scsi_eh_wakeup() argument
67 lockdep_assert_held(shost->host_lock); in scsi_eh_wakeup()
69 if (scsi_host_busy(shost) == shost->host_failed) { in scsi_eh_wakeup()
70 trace_scsi_eh_wakeup(shost); in scsi_eh_wakeup()
71 wake_up_process(shost->ehandler); in scsi_eh_wakeup()
72 SCSI_LOG_ERROR_RECOVERY(5, shost_printk(KERN_INFO, shost, in scsi_eh_wakeup()
83 void scsi_schedule_eh(struct Scsi_Host *shost) in scsi_schedule_eh() argument
87 spin_lock_irqsave(shost->host_lock, flags); in scsi_schedule_eh()
89 if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 || in scsi_schedule_eh()
90 scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) { in scsi_schedule_eh()
91 shost->host_eh_scheduled++; in scsi_schedule_eh()
92 scsi_eh_wakeup(shost); in scsi_schedule_eh()
95 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_schedule_eh()
99 static int scsi_host_eh_past_deadline(struct Scsi_Host *shost) in scsi_host_eh_past_deadline() argument
101 if (!shost->last_reset || shost->eh_deadline == -1) in scsi_host_eh_past_deadline()
111 if (time_before(jiffies, shost->last_reset + shost->eh_deadline) && in scsi_host_eh_past_deadline()
112 shost->eh_deadline > -1) in scsi_host_eh_past_deadline()
188 struct Scsi_Host *shost = sdev->host; in scsi_abort_command() local
202 spin_lock_irqsave(shost->host_lock, flags); in scsi_abort_command()
203 if (shost->eh_deadline != -1 && !shost->last_reset) in scsi_abort_command()
204 shost->last_reset = jiffies; in scsi_abort_command()
205 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_abort_command()
210 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100); in scsi_abort_command()
234 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_inc_host_failed() local
237 spin_lock_irqsave(shost->host_lock, flags); in scsi_eh_inc_host_failed()
238 shost->host_failed++; in scsi_eh_inc_host_failed()
239 scsi_eh_wakeup(shost); in scsi_eh_inc_host_failed()
240 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_eh_inc_host_failed()
249 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_scmd_add() local
253 WARN_ON_ONCE(!shost->ehandler); in scsi_eh_scmd_add()
255 spin_lock_irqsave(shost->host_lock, flags); in scsi_eh_scmd_add()
256 if (scsi_host_set_state(shost, SHOST_RECOVERY)) { in scsi_eh_scmd_add()
257 ret = scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY); in scsi_eh_scmd_add()
260 if (shost->eh_deadline != -1 && !shost->last_reset) in scsi_eh_scmd_add()
261 shost->last_reset = jiffies; in scsi_eh_scmd_add()
264 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q); in scsi_eh_scmd_add()
265 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_eh_scmd_add()
354 static inline void scsi_eh_prt_fail_stats(struct Scsi_Host *shost, in scsi_eh_prt_fail_stats() argument
364 shost_for_each_device(sdev, shost) { in scsi_eh_prt_fail_stats()
377 shost_printk(KERN_INFO, shost, in scsi_eh_prt_fail_stats()
387 SCSI_LOG_ERROR_RECOVERY(2, shost_printk(KERN_INFO, shost, in scsi_eh_prt_fail_stats()
1061 struct Scsi_Host *shost = sdev->host; in scsi_send_eh_cmnd() local
1070 shost->eh_action = &done; in scsi_send_eh_cmnd()
1074 rtn = shost->hostt->queuecommand(shost, scmd); in scsi_send_eh_cmnd()
1090 shost->eh_action = NULL; in scsi_send_eh_cmnd()
1200 struct Scsi_Host *shost; in scsi_eh_get_sense() local
1212 shost = scmd->device->host; in scsi_eh_get_sense()
1213 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_get_sense()
1382 static int scsi_eh_stu(struct Scsi_Host *shost, in scsi_eh_stu() argument
1389 shost_for_each_device(sdev, shost) { in scsi_eh_stu()
1390 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_stu()
1447 static int scsi_eh_bus_device_reset(struct Scsi_Host *shost, in scsi_eh_bus_device_reset() argument
1455 shost_for_each_device(sdev, shost) { in scsi_eh_bus_device_reset()
1456 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_bus_device_reset()
1508 static int scsi_eh_target_reset(struct Scsi_Host *shost, in scsi_eh_target_reset() argument
1522 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_target_reset()
1527 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1537 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1543 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1570 static int scsi_eh_bus_reset(struct Scsi_Host *shost, in scsi_eh_bus_reset() argument
1586 for (channel = 0; channel <= shost->max_channel; channel++) { in scsi_eh_bus_reset()
1587 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_bus_reset()
1590 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1611 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1628 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1642 static int scsi_eh_host_reset(struct Scsi_Host *shost, in scsi_eh_host_reset() argument
1655 shost_printk(KERN_INFO, shost, in scsi_eh_host_reset()
1668 shost_printk(KERN_INFO, shost, in scsi_eh_host_reset()
1985 static void scsi_restart_operations(struct Scsi_Host *shost) in scsi_restart_operations() argument
1995 shost_for_each_device(sdev, shost) { in scsi_restart_operations()
2008 shost_printk(KERN_INFO, shost, "waking up host to restart\n")); in scsi_restart_operations()
2010 spin_lock_irqsave(shost->host_lock, flags); in scsi_restart_operations()
2011 if (scsi_host_set_state(shost, SHOST_RUNNING)) in scsi_restart_operations()
2012 if (scsi_host_set_state(shost, SHOST_CANCEL)) in scsi_restart_operations()
2013 BUG_ON(scsi_host_set_state(shost, SHOST_DEL)); in scsi_restart_operations()
2014 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_restart_operations()
2016 wake_up(&shost->host_wait); in scsi_restart_operations()
2024 scsi_run_host_queues(shost); in scsi_restart_operations()
2034 spin_lock_irqsave(shost->host_lock, flags); in scsi_restart_operations()
2035 if (shost->host_eh_scheduled) in scsi_restart_operations()
2036 if (scsi_host_set_state(shost, SHOST_RECOVERY)) in scsi_restart_operations()
2037 WARN_ON(scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY)); in scsi_restart_operations()
2038 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_restart_operations()
2047 void scsi_eh_ready_devs(struct Scsi_Host *shost, in scsi_eh_ready_devs() argument
2051 if (!scsi_eh_stu(shost, work_q, done_q)) in scsi_eh_ready_devs()
2052 if (!scsi_eh_bus_device_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2053 if (!scsi_eh_target_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2054 if (!scsi_eh_bus_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2055 if (!scsi_eh_host_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2120 static void scsi_unjam_host(struct Scsi_Host *shost) in scsi_unjam_host() argument
2126 spin_lock_irqsave(shost->host_lock, flags); in scsi_unjam_host()
2127 list_splice_init(&shost->eh_cmd_q, &eh_work_q); in scsi_unjam_host()
2128 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_unjam_host()
2130 SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, &eh_work_q)); in scsi_unjam_host()
2133 scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q); in scsi_unjam_host()
2135 spin_lock_irqsave(shost->host_lock, flags); in scsi_unjam_host()
2136 if (shost->eh_deadline != -1) in scsi_unjam_host()
2137 shost->last_reset = 0; in scsi_unjam_host()
2138 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_unjam_host()
2152 struct Scsi_Host *shost = data; in scsi_error_handler() local
2171 if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) || in scsi_error_handler()
2172 shost->host_failed != scsi_host_busy(shost)) { in scsi_error_handler()
2174 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2176 shost->host_no)); in scsi_error_handler()
2183 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2185 shost->host_no, shost->host_eh_scheduled, in scsi_error_handler()
2186 shost->host_failed, in scsi_error_handler()
2187 scsi_host_busy(shost))); in scsi_error_handler()
2194 if (!shost->eh_noresume && scsi_autopm_get_host(shost) != 0) { in scsi_error_handler()
2196 shost_printk(KERN_ERR, shost, in scsi_error_handler()
2198 shost->host_no)); in scsi_error_handler()
2202 if (shost->transportt->eh_strategy_handler) in scsi_error_handler()
2203 shost->transportt->eh_strategy_handler(shost); in scsi_error_handler()
2205 scsi_unjam_host(shost); in scsi_error_handler()
2208 shost->host_failed = 0; in scsi_error_handler()
2217 scsi_restart_operations(shost); in scsi_error_handler()
2218 if (!shost->eh_noresume) in scsi_error_handler()
2219 scsi_autopm_put_host(shost); in scsi_error_handler()
2224 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2226 shost->host_no)); in scsi_error_handler()
2227 shost->ehandler = NULL; in scsi_error_handler()
2252 void scsi_report_bus_reset(struct Scsi_Host *shost, int channel) in scsi_report_bus_reset() argument
2256 __shost_for_each_device(sdev, shost) { in scsi_report_bus_reset()
2285 void scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target) in scsi_report_device_reset() argument
2289 __shost_for_each_device(sdev, shost) { in scsi_report_device_reset()
2311 struct Scsi_Host *shost = dev->host; in scsi_ioctl_reset() local
2323 if (scsi_autopm_get_host(shost) < 0) in scsi_ioctl_reset()
2328 shost->hostt->cmd_size, GFP_KERNEL); in scsi_ioctl_reset()
2345 spin_lock_irqsave(shost->host_lock, flags); in scsi_ioctl_reset()
2346 shost->tmf_in_progress = 1; in scsi_ioctl_reset()
2347 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_ioctl_reset()
2380 spin_lock_irqsave(shost->host_lock, flags); in scsi_ioctl_reset()
2381 shost->tmf_in_progress = 0; in scsi_ioctl_reset()
2382 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_ioctl_reset()
2389 shost_printk(KERN_INFO, shost, in scsi_ioctl_reset()
2392 wake_up(&shost->host_wait); in scsi_ioctl_reset()
2393 scsi_run_host_queues(shost); in scsi_ioctl_reset()
2399 scsi_autopm_put_host(shost); in scsi_ioctl_reset()