Lines Matching refs:shost

63 void scsi_eh_wakeup(struct Scsi_Host *shost)  in scsi_eh_wakeup()  argument
65 if (atomic_read(&shost->host_busy) == shost->host_failed) { in scsi_eh_wakeup()
66 trace_scsi_eh_wakeup(shost); in scsi_eh_wakeup()
67 wake_up_process(shost->ehandler); in scsi_eh_wakeup()
68 SCSI_LOG_ERROR_RECOVERY(5, shost_printk(KERN_INFO, shost, in scsi_eh_wakeup()
79 void scsi_schedule_eh(struct Scsi_Host *shost) in scsi_schedule_eh() argument
83 spin_lock_irqsave(shost->host_lock, flags); in scsi_schedule_eh()
85 if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 || in scsi_schedule_eh()
86 scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) { in scsi_schedule_eh()
87 shost->host_eh_scheduled++; in scsi_schedule_eh()
88 scsi_eh_wakeup(shost); in scsi_schedule_eh()
91 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_schedule_eh()
95 static int scsi_host_eh_past_deadline(struct Scsi_Host *shost) in scsi_host_eh_past_deadline() argument
97 if (!shost->last_reset || shost->eh_deadline == -1) in scsi_host_eh_past_deadline()
107 if (time_before(jiffies, shost->last_reset + shost->eh_deadline) && in scsi_host_eh_past_deadline()
108 shost->eh_deadline > -1) in scsi_host_eh_past_deadline()
184 struct Scsi_Host *shost = sdev->host; in scsi_abort_command() local
203 spin_lock_irqsave(shost->host_lock, flags); in scsi_abort_command()
204 if (scsi_host_in_recovery(shost)) { in scsi_abort_command()
205 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_abort_command()
212 if (shost->eh_deadline != -1 && !shost->last_reset) in scsi_abort_command()
213 shost->last_reset = jiffies; in scsi_abort_command()
214 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_abort_command()
219 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100); in scsi_abort_command()
233 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_scmd_add() local
237 if (!shost->ehandler) in scsi_eh_scmd_add()
240 spin_lock_irqsave(shost->host_lock, flags); in scsi_eh_scmd_add()
241 if (scsi_host_set_state(shost, SHOST_RECOVERY)) in scsi_eh_scmd_add()
242 if (scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY)) in scsi_eh_scmd_add()
245 if (shost->eh_deadline != -1 && !shost->last_reset) in scsi_eh_scmd_add()
246 shost->last_reset = jiffies; in scsi_eh_scmd_add()
252 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q); in scsi_eh_scmd_add()
253 shost->host_failed++; in scsi_eh_scmd_add()
254 scsi_eh_wakeup(shost); in scsi_eh_scmd_add()
256 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_eh_scmd_add()
332 static inline void scsi_eh_prt_fail_stats(struct Scsi_Host *shost, in scsi_eh_prt_fail_stats() argument
342 shost_for_each_device(sdev, shost) { in scsi_eh_prt_fail_stats()
355 shost_printk(KERN_INFO, shost, in scsi_eh_prt_fail_stats()
365 SCSI_LOG_ERROR_RECOVERY(2, shost_printk(KERN_INFO, shost, in scsi_eh_prt_fail_stats()
1019 struct Scsi_Host *shost = sdev->host; in scsi_send_eh_cmnd() local
1028 shost->eh_action = &done; in scsi_send_eh_cmnd()
1032 rtn = shost->hostt->queuecommand(shost, scmd); in scsi_send_eh_cmnd()
1048 shost->eh_action = NULL; in scsi_send_eh_cmnd()
1160 struct Scsi_Host *shost; in scsi_eh_get_sense() local
1173 shost = scmd->device->host; in scsi_eh_get_sense()
1174 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_get_sense()
1328 struct Scsi_Host *shost; in scsi_eh_abort_cmds() local
1333 shost = scmd->device->host; in scsi_eh_abort_cmds()
1334 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_abort_cmds()
1345 rtn = scsi_try_to_abort_cmd(shost->hostt, scmd); in scsi_eh_abort_cmds()
1398 static int scsi_eh_stu(struct Scsi_Host *shost, in scsi_eh_stu() argument
1405 shost_for_each_device(sdev, shost) { in scsi_eh_stu()
1406 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_stu()
1463 static int scsi_eh_bus_device_reset(struct Scsi_Host *shost, in scsi_eh_bus_device_reset() argument
1471 shost_for_each_device(sdev, shost) { in scsi_eh_bus_device_reset()
1472 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_bus_device_reset()
1524 static int scsi_eh_target_reset(struct Scsi_Host *shost, in scsi_eh_target_reset() argument
1538 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_target_reset()
1543 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1553 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1559 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1586 static int scsi_eh_bus_reset(struct Scsi_Host *shost, in scsi_eh_bus_reset() argument
1602 for (channel = 0; channel <= shost->max_channel; channel++) { in scsi_eh_bus_reset()
1603 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_bus_reset()
1606 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1627 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1644 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1658 static int scsi_eh_host_reset(struct Scsi_Host *shost, in scsi_eh_host_reset() argument
1671 shost_printk(KERN_INFO, shost, in scsi_eh_host_reset()
1684 shost_printk(KERN_INFO, shost, in scsi_eh_host_reset()
2006 static void scsi_restart_operations(struct Scsi_Host *shost) in scsi_restart_operations() argument
2016 shost_for_each_device(sdev, shost) { in scsi_restart_operations()
2029 shost_printk(KERN_INFO, shost, "waking up host to restart\n")); in scsi_restart_operations()
2031 spin_lock_irqsave(shost->host_lock, flags); in scsi_restart_operations()
2032 if (scsi_host_set_state(shost, SHOST_RUNNING)) in scsi_restart_operations()
2033 if (scsi_host_set_state(shost, SHOST_CANCEL)) in scsi_restart_operations()
2034 BUG_ON(scsi_host_set_state(shost, SHOST_DEL)); in scsi_restart_operations()
2035 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_restart_operations()
2037 wake_up(&shost->host_wait); in scsi_restart_operations()
2045 scsi_run_host_queues(shost); in scsi_restart_operations()
2055 spin_lock_irqsave(shost->host_lock, flags); in scsi_restart_operations()
2056 if (shost->host_eh_scheduled) in scsi_restart_operations()
2057 if (scsi_host_set_state(shost, SHOST_RECOVERY)) in scsi_restart_operations()
2058 WARN_ON(scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY)); in scsi_restart_operations()
2059 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_restart_operations()
2068 void scsi_eh_ready_devs(struct Scsi_Host *shost, in scsi_eh_ready_devs() argument
2072 if (!scsi_eh_stu(shost, work_q, done_q)) in scsi_eh_ready_devs()
2073 if (!scsi_eh_bus_device_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2074 if (!scsi_eh_target_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2075 if (!scsi_eh_bus_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2076 if (!scsi_eh_host_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2141 static void scsi_unjam_host(struct Scsi_Host *shost) in scsi_unjam_host() argument
2147 spin_lock_irqsave(shost->host_lock, flags); in scsi_unjam_host()
2148 list_splice_init(&shost->eh_cmd_q, &eh_work_q); in scsi_unjam_host()
2149 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_unjam_host()
2151 SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, &eh_work_q)); in scsi_unjam_host()
2155 scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q); in scsi_unjam_host()
2157 spin_lock_irqsave(shost->host_lock, flags); in scsi_unjam_host()
2158 if (shost->eh_deadline != -1) in scsi_unjam_host()
2159 shost->last_reset = 0; in scsi_unjam_host()
2160 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_unjam_host()
2174 struct Scsi_Host *shost = data; in scsi_error_handler() local
2193 if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) || in scsi_error_handler()
2194 shost->host_failed != atomic_read(&shost->host_busy)) { in scsi_error_handler()
2196 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2198 shost->host_no)); in scsi_error_handler()
2205 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2207 shost->host_no, shost->host_eh_scheduled, in scsi_error_handler()
2208 shost->host_failed, in scsi_error_handler()
2209 atomic_read(&shost->host_busy))); in scsi_error_handler()
2216 if (!shost->eh_noresume && scsi_autopm_get_host(shost) != 0) { in scsi_error_handler()
2218 shost_printk(KERN_ERR, shost, in scsi_error_handler()
2220 shost->host_no)); in scsi_error_handler()
2224 if (shost->transportt->eh_strategy_handler) in scsi_error_handler()
2225 shost->transportt->eh_strategy_handler(shost); in scsi_error_handler()
2227 scsi_unjam_host(shost); in scsi_error_handler()
2236 scsi_restart_operations(shost); in scsi_error_handler()
2237 if (!shost->eh_noresume) in scsi_error_handler()
2238 scsi_autopm_put_host(shost); in scsi_error_handler()
2243 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2245 shost->host_no)); in scsi_error_handler()
2246 shost->ehandler = NULL; in scsi_error_handler()
2271 void scsi_report_bus_reset(struct Scsi_Host *shost, int channel) in scsi_report_bus_reset() argument
2275 __shost_for_each_device(sdev, shost) { in scsi_report_bus_reset()
2304 void scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target) in scsi_report_device_reset() argument
2308 __shost_for_each_device(sdev, shost) { in scsi_report_device_reset()
2330 struct Scsi_Host *shost = dev->host; in scsi_ioctl_reset() local
2342 if (scsi_autopm_get_host(shost) < 0) in scsi_ioctl_reset()
2362 spin_lock_irqsave(shost->host_lock, flags); in scsi_ioctl_reset()
2363 shost->tmf_in_progress = 1; in scsi_ioctl_reset()
2364 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_ioctl_reset()
2397 spin_lock_irqsave(shost->host_lock, flags); in scsi_ioctl_reset()
2398 shost->tmf_in_progress = 0; in scsi_ioctl_reset()
2399 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_ioctl_reset()
2406 shost_printk(KERN_INFO, shost, in scsi_ioctl_reset()
2409 wake_up(&shost->host_wait); in scsi_ioctl_reset()
2410 scsi_run_host_queues(shost); in scsi_ioctl_reset()
2415 scsi_autopm_put_host(shost); in scsi_ioctl_reset()