Lines Matching refs:shost
61 void scsi_eh_wakeup(struct Scsi_Host *shost) in scsi_eh_wakeup() argument
63 if (atomic_read(&shost->host_busy) == shost->host_failed) { in scsi_eh_wakeup()
64 trace_scsi_eh_wakeup(shost); in scsi_eh_wakeup()
65 wake_up_process(shost->ehandler); in scsi_eh_wakeup()
66 SCSI_LOG_ERROR_RECOVERY(5, shost_printk(KERN_INFO, shost, in scsi_eh_wakeup()
77 void scsi_schedule_eh(struct Scsi_Host *shost) in scsi_schedule_eh() argument
81 spin_lock_irqsave(shost->host_lock, flags); in scsi_schedule_eh()
83 if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 || in scsi_schedule_eh()
84 scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) { in scsi_schedule_eh()
85 shost->host_eh_scheduled++; in scsi_schedule_eh()
86 scsi_eh_wakeup(shost); in scsi_schedule_eh()
89 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_schedule_eh()
93 static int scsi_host_eh_past_deadline(struct Scsi_Host *shost) in scsi_host_eh_past_deadline() argument
95 if (!shost->last_reset || shost->eh_deadline == -1) in scsi_host_eh_past_deadline()
105 if (time_before(jiffies, shost->last_reset + shost->eh_deadline) && in scsi_host_eh_past_deadline()
106 shost->eh_deadline > -1) in scsi_host_eh_past_deadline()
182 struct Scsi_Host *shost = sdev->host; in scsi_abort_command() local
201 spin_lock_irqsave(shost->host_lock, flags); in scsi_abort_command()
202 if (scsi_host_in_recovery(shost)) { in scsi_abort_command()
203 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_abort_command()
210 if (shost->eh_deadline != -1 && !shost->last_reset) in scsi_abort_command()
211 shost->last_reset = jiffies; in scsi_abort_command()
212 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_abort_command()
217 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100); in scsi_abort_command()
231 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_scmd_add() local
235 if (!shost->ehandler) in scsi_eh_scmd_add()
238 spin_lock_irqsave(shost->host_lock, flags); in scsi_eh_scmd_add()
239 if (scsi_host_set_state(shost, SHOST_RECOVERY)) in scsi_eh_scmd_add()
240 if (scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY)) in scsi_eh_scmd_add()
243 if (shost->eh_deadline != -1 && !shost->last_reset) in scsi_eh_scmd_add()
244 shost->last_reset = jiffies; in scsi_eh_scmd_add()
250 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q); in scsi_eh_scmd_add()
251 shost->host_failed++; in scsi_eh_scmd_add()
252 scsi_eh_wakeup(shost); in scsi_eh_scmd_add()
254 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_eh_scmd_add()
330 static inline void scsi_eh_prt_fail_stats(struct Scsi_Host *shost, in scsi_eh_prt_fail_stats() argument
340 shost_for_each_device(sdev, shost) { in scsi_eh_prt_fail_stats()
353 shost_printk(KERN_INFO, shost, in scsi_eh_prt_fail_stats()
363 SCSI_LOG_ERROR_RECOVERY(2, shost_printk(KERN_INFO, shost, in scsi_eh_prt_fail_stats()
1014 struct Scsi_Host *shost = sdev->host; in scsi_send_eh_cmnd() local
1023 shost->eh_action = &done; in scsi_send_eh_cmnd()
1027 rtn = shost->hostt->queuecommand(shost, scmd); in scsi_send_eh_cmnd()
1043 shost->eh_action = NULL; in scsi_send_eh_cmnd()
1155 struct Scsi_Host *shost; in scsi_eh_get_sense() local
1163 shost = scmd->device->host; in scsi_eh_get_sense()
1164 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_get_sense()
1318 struct Scsi_Host *shost; in scsi_eh_abort_cmds() local
1323 shost = scmd->device->host; in scsi_eh_abort_cmds()
1324 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_abort_cmds()
1335 rtn = scsi_try_to_abort_cmd(shost->hostt, scmd); in scsi_eh_abort_cmds()
1388 static int scsi_eh_stu(struct Scsi_Host *shost, in scsi_eh_stu() argument
1395 shost_for_each_device(sdev, shost) { in scsi_eh_stu()
1396 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_stu()
1453 static int scsi_eh_bus_device_reset(struct Scsi_Host *shost, in scsi_eh_bus_device_reset() argument
1461 shost_for_each_device(sdev, shost) { in scsi_eh_bus_device_reset()
1462 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_bus_device_reset()
1514 static int scsi_eh_target_reset(struct Scsi_Host *shost, in scsi_eh_target_reset() argument
1528 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_target_reset()
1533 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1543 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1549 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1576 static int scsi_eh_bus_reset(struct Scsi_Host *shost, in scsi_eh_bus_reset() argument
1592 for (channel = 0; channel <= shost->max_channel; channel++) { in scsi_eh_bus_reset()
1593 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_bus_reset()
1596 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1617 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1634 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1648 static int scsi_eh_host_reset(struct Scsi_Host *shost, in scsi_eh_host_reset() argument
1661 shost_printk(KERN_INFO, shost, in scsi_eh_host_reset()
1674 shost_printk(KERN_INFO, shost, in scsi_eh_host_reset()
1996 static void scsi_restart_operations(struct Scsi_Host *shost) in scsi_restart_operations() argument
2006 shost_for_each_device(sdev, shost) { in scsi_restart_operations()
2019 shost_printk(KERN_INFO, shost, "waking up host to restart\n")); in scsi_restart_operations()
2021 spin_lock_irqsave(shost->host_lock, flags); in scsi_restart_operations()
2022 if (scsi_host_set_state(shost, SHOST_RUNNING)) in scsi_restart_operations()
2023 if (scsi_host_set_state(shost, SHOST_CANCEL)) in scsi_restart_operations()
2024 BUG_ON(scsi_host_set_state(shost, SHOST_DEL)); in scsi_restart_operations()
2025 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_restart_operations()
2027 wake_up(&shost->host_wait); in scsi_restart_operations()
2035 scsi_run_host_queues(shost); in scsi_restart_operations()
2045 spin_lock_irqsave(shost->host_lock, flags); in scsi_restart_operations()
2046 if (shost->host_eh_scheduled) in scsi_restart_operations()
2047 if (scsi_host_set_state(shost, SHOST_RECOVERY)) in scsi_restart_operations()
2048 WARN_ON(scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY)); in scsi_restart_operations()
2049 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_restart_operations()
2058 void scsi_eh_ready_devs(struct Scsi_Host *shost, in scsi_eh_ready_devs() argument
2062 if (!scsi_eh_stu(shost, work_q, done_q)) in scsi_eh_ready_devs()
2063 if (!scsi_eh_bus_device_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2064 if (!scsi_eh_target_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2065 if (!scsi_eh_bus_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2066 if (!scsi_eh_host_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2131 static void scsi_unjam_host(struct Scsi_Host *shost) in scsi_unjam_host() argument
2137 spin_lock_irqsave(shost->host_lock, flags); in scsi_unjam_host()
2138 list_splice_init(&shost->eh_cmd_q, &eh_work_q); in scsi_unjam_host()
2139 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_unjam_host()
2141 SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, &eh_work_q)); in scsi_unjam_host()
2145 scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q); in scsi_unjam_host()
2147 spin_lock_irqsave(shost->host_lock, flags); in scsi_unjam_host()
2148 if (shost->eh_deadline != -1) in scsi_unjam_host()
2149 shost->last_reset = 0; in scsi_unjam_host()
2150 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_unjam_host()
2164 struct Scsi_Host *shost = data; in scsi_error_handler() local
2183 if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) || in scsi_error_handler()
2184 shost->host_failed != atomic_read(&shost->host_busy)) { in scsi_error_handler()
2186 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2188 shost->host_no)); in scsi_error_handler()
2195 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2197 shost->host_no, shost->host_eh_scheduled, in scsi_error_handler()
2198 shost->host_failed, in scsi_error_handler()
2199 atomic_read(&shost->host_busy))); in scsi_error_handler()
2206 if (!shost->eh_noresume && scsi_autopm_get_host(shost) != 0) { in scsi_error_handler()
2208 shost_printk(KERN_ERR, shost, in scsi_error_handler()
2210 shost->host_no)); in scsi_error_handler()
2214 if (shost->transportt->eh_strategy_handler) in scsi_error_handler()
2215 shost->transportt->eh_strategy_handler(shost); in scsi_error_handler()
2217 scsi_unjam_host(shost); in scsi_error_handler()
2226 scsi_restart_operations(shost); in scsi_error_handler()
2227 if (!shost->eh_noresume) in scsi_error_handler()
2228 scsi_autopm_put_host(shost); in scsi_error_handler()
2233 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2235 shost->host_no)); in scsi_error_handler()
2236 shost->ehandler = NULL; in scsi_error_handler()
2261 void scsi_report_bus_reset(struct Scsi_Host *shost, int channel) in scsi_report_bus_reset() argument
2265 __shost_for_each_device(sdev, shost) { in scsi_report_bus_reset()
2294 void scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target) in scsi_report_device_reset() argument
2298 __shost_for_each_device(sdev, shost) { in scsi_report_device_reset()
2320 struct Scsi_Host *shost = dev->host; in scsi_ioctl_reset() local
2332 if (scsi_autopm_get_host(shost) < 0) in scsi_ioctl_reset()
2352 spin_lock_irqsave(shost->host_lock, flags); in scsi_ioctl_reset()
2353 shost->tmf_in_progress = 1; in scsi_ioctl_reset()
2354 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_ioctl_reset()
2387 spin_lock_irqsave(shost->host_lock, flags); in scsi_ioctl_reset()
2388 shost->tmf_in_progress = 0; in scsi_ioctl_reset()
2389 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_ioctl_reset()
2396 shost_printk(KERN_INFO, shost, in scsi_ioctl_reset()
2399 wake_up(&shost->host_wait); in scsi_ioctl_reset()
2400 scsi_run_host_queues(shost); in scsi_ioctl_reset()
2405 scsi_autopm_put_host(shost); in scsi_ioctl_reset()