• Home
  • Raw
  • Download

Lines Matching refs:shost

67 void scsi_eh_wakeup(struct Scsi_Host *shost, unsigned int busy)  in scsi_eh_wakeup()  argument
69 lockdep_assert_held(shost->host_lock); in scsi_eh_wakeup()
71 if (busy == shost->host_failed) { in scsi_eh_wakeup()
72 trace_scsi_eh_wakeup(shost); in scsi_eh_wakeup()
73 wake_up_process(shost->ehandler); in scsi_eh_wakeup()
74 SCSI_LOG_ERROR_RECOVERY(5, shost_printk(KERN_INFO, shost, in scsi_eh_wakeup()
85 void scsi_schedule_eh(struct Scsi_Host *shost) in scsi_schedule_eh() argument
89 spin_lock_irqsave(shost->host_lock, flags); in scsi_schedule_eh()
91 if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 || in scsi_schedule_eh()
92 scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) { in scsi_schedule_eh()
93 shost->host_eh_scheduled++; in scsi_schedule_eh()
94 scsi_eh_wakeup(shost, scsi_host_busy(shost)); in scsi_schedule_eh()
97 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_schedule_eh()
101 static int scsi_host_eh_past_deadline(struct Scsi_Host *shost) in scsi_host_eh_past_deadline() argument
103 if (!shost->last_reset || shost->eh_deadline == -1) in scsi_host_eh_past_deadline()
113 if (time_before(jiffies, shost->last_reset + shost->eh_deadline) && in scsi_host_eh_past_deadline()
114 shost->eh_deadline > -1) in scsi_host_eh_past_deadline()
139 static void scsi_eh_complete_abort(struct scsi_cmnd *scmd, struct Scsi_Host *shost) in scsi_eh_complete_abort() argument
143 spin_lock_irqsave(shost->host_lock, flags); in scsi_eh_complete_abort()
149 if (list_empty(&shost->eh_abort_list) && in scsi_eh_complete_abort()
150 list_empty(&shost->eh_cmd_q)) in scsi_eh_complete_abort()
151 if (shost->eh_deadline != -1) in scsi_eh_complete_abort()
152 shost->last_reset = 0; in scsi_eh_complete_abort()
153 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_eh_complete_abort()
233 struct Scsi_Host *shost = sdev->host; in scsi_abort_command() local
247 spin_lock_irqsave(shost->host_lock, flags); in scsi_abort_command()
248 if (shost->eh_deadline != -1 && !shost->last_reset) in scsi_abort_command()
249 shost->last_reset = jiffies; in scsi_abort_command()
251 list_add_tail(&scmd->eh_entry, &shost->eh_abort_list); in scsi_abort_command()
252 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_abort_command()
257 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100); in scsi_abort_command()
281 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_inc_host_failed() local
282 unsigned int busy = scsi_host_busy(shost); in scsi_eh_inc_host_failed()
285 spin_lock_irqsave(shost->host_lock, flags); in scsi_eh_inc_host_failed()
286 shost->host_failed++; in scsi_eh_inc_host_failed()
287 scsi_eh_wakeup(shost, busy); in scsi_eh_inc_host_failed()
288 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_eh_inc_host_failed()
297 struct Scsi_Host *shost = scmd->device->host; in scsi_eh_scmd_add() local
301 WARN_ON_ONCE(!shost->ehandler); in scsi_eh_scmd_add()
303 spin_lock_irqsave(shost->host_lock, flags); in scsi_eh_scmd_add()
304 if (scsi_host_set_state(shost, SHOST_RECOVERY)) { in scsi_eh_scmd_add()
305 ret = scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY); in scsi_eh_scmd_add()
308 if (shost->eh_deadline != -1 && !shost->last_reset) in scsi_eh_scmd_add()
309 shost->last_reset = jiffies; in scsi_eh_scmd_add()
312 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q); in scsi_eh_scmd_add()
313 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_eh_scmd_add()
396 static inline void scsi_eh_prt_fail_stats(struct Scsi_Host *shost, in scsi_eh_prt_fail_stats() argument
406 shost_for_each_device(sdev, shost) { in scsi_eh_prt_fail_stats()
419 shost_printk(KERN_INFO, shost, in scsi_eh_prt_fail_stats()
429 SCSI_LOG_ERROR_RECOVERY(2, shost_printk(KERN_INFO, shost, in scsi_eh_prt_fail_stats()
1119 struct Scsi_Host *shost = sdev->host; in scsi_send_eh_cmnd() local
1128 shost->eh_action = &done; in scsi_send_eh_cmnd()
1151 rtn = shost->hostt->queuecommand(shost, scmd); in scsi_send_eh_cmnd()
1171 shost->eh_action = NULL; in scsi_send_eh_cmnd()
1282 struct Scsi_Host *shost; in scsi_eh_get_sense() local
1294 shost = scmd->device->host; in scsi_eh_get_sense()
1295 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_get_sense()
1473 static int scsi_eh_stu(struct Scsi_Host *shost, in scsi_eh_stu() argument
1480 shost_for_each_device(sdev, shost) { in scsi_eh_stu()
1481 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_stu()
1539 static int scsi_eh_bus_device_reset(struct Scsi_Host *shost, in scsi_eh_bus_device_reset() argument
1547 shost_for_each_device(sdev, shost) { in scsi_eh_bus_device_reset()
1548 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_bus_device_reset()
1601 static int scsi_eh_target_reset(struct Scsi_Host *shost, in scsi_eh_target_reset() argument
1615 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_target_reset()
1620 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1630 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1636 shost_printk(KERN_INFO, shost, in scsi_eh_target_reset()
1663 static int scsi_eh_bus_reset(struct Scsi_Host *shost, in scsi_eh_bus_reset() argument
1679 for (channel = 0; channel <= shost->max_channel; channel++) { in scsi_eh_bus_reset()
1680 if (scsi_host_eh_past_deadline(shost)) { in scsi_eh_bus_reset()
1683 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1704 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1721 shost_printk(KERN_INFO, shost, in scsi_eh_bus_reset()
1735 static int scsi_eh_host_reset(struct Scsi_Host *shost, in scsi_eh_host_reset() argument
1748 shost_printk(KERN_INFO, shost, in scsi_eh_host_reset()
1761 shost_printk(KERN_INFO, shost, in scsi_eh_host_reset()
2076 static void scsi_restart_operations(struct Scsi_Host *shost) in scsi_restart_operations() argument
2086 shost_for_each_device(sdev, shost) { in scsi_restart_operations()
2099 shost_printk(KERN_INFO, shost, "waking up host to restart\n")); in scsi_restart_operations()
2101 spin_lock_irqsave(shost->host_lock, flags); in scsi_restart_operations()
2102 if (scsi_host_set_state(shost, SHOST_RUNNING)) in scsi_restart_operations()
2103 if (scsi_host_set_state(shost, SHOST_CANCEL)) in scsi_restart_operations()
2104 BUG_ON(scsi_host_set_state(shost, SHOST_DEL)); in scsi_restart_operations()
2105 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_restart_operations()
2107 wake_up(&shost->host_wait); in scsi_restart_operations()
2115 scsi_run_host_queues(shost); in scsi_restart_operations()
2125 spin_lock_irqsave(shost->host_lock, flags); in scsi_restart_operations()
2126 if (shost->host_eh_scheduled) in scsi_restart_operations()
2127 if (scsi_host_set_state(shost, SHOST_RECOVERY)) in scsi_restart_operations()
2128 WARN_ON(scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY)); in scsi_restart_operations()
2129 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_restart_operations()
2138 void scsi_eh_ready_devs(struct Scsi_Host *shost, in scsi_eh_ready_devs() argument
2142 if (!scsi_eh_stu(shost, work_q, done_q)) in scsi_eh_ready_devs()
2143 if (!scsi_eh_bus_device_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2144 if (!scsi_eh_target_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2145 if (!scsi_eh_bus_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2146 if (!scsi_eh_host_reset(shost, work_q, done_q)) in scsi_eh_ready_devs()
2237 static void scsi_unjam_host(struct Scsi_Host *shost) in scsi_unjam_host() argument
2243 spin_lock_irqsave(shost->host_lock, flags); in scsi_unjam_host()
2244 list_splice_init(&shost->eh_cmd_q, &eh_work_q); in scsi_unjam_host()
2245 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_unjam_host()
2247 SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, &eh_work_q)); in scsi_unjam_host()
2250 scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q); in scsi_unjam_host()
2252 spin_lock_irqsave(shost->host_lock, flags); in scsi_unjam_host()
2253 if (shost->eh_deadline != -1) in scsi_unjam_host()
2254 shost->last_reset = 0; in scsi_unjam_host()
2255 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_unjam_host()
2269 struct Scsi_Host *shost = data; in scsi_error_handler() local
2288 if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) || in scsi_error_handler()
2289 shost->host_failed != scsi_host_busy(shost)) { in scsi_error_handler()
2291 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2293 shost->host_no)); in scsi_error_handler()
2300 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2302 shost->host_no, shost->host_eh_scheduled, in scsi_error_handler()
2303 shost->host_failed, in scsi_error_handler()
2304 scsi_host_busy(shost))); in scsi_error_handler()
2311 if (!shost->eh_noresume && scsi_autopm_get_host(shost) != 0) { in scsi_error_handler()
2313 shost_printk(KERN_ERR, shost, in scsi_error_handler()
2315 shost->host_no)); in scsi_error_handler()
2319 if (shost->transportt->eh_strategy_handler) in scsi_error_handler()
2320 shost->transportt->eh_strategy_handler(shost); in scsi_error_handler()
2322 scsi_unjam_host(shost); in scsi_error_handler()
2325 shost->host_failed = 0; in scsi_error_handler()
2334 scsi_restart_operations(shost); in scsi_error_handler()
2335 if (!shost->eh_noresume) in scsi_error_handler()
2336 scsi_autopm_put_host(shost); in scsi_error_handler()
2341 shost_printk(KERN_INFO, shost, in scsi_error_handler()
2343 shost->host_no)); in scsi_error_handler()
2344 shost->ehandler = NULL; in scsi_error_handler()
2369 void scsi_report_bus_reset(struct Scsi_Host *shost, int channel) in scsi_report_bus_reset() argument
2373 __shost_for_each_device(sdev, shost) { in scsi_report_bus_reset()
2402 void scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target) in scsi_report_device_reset() argument
2406 __shost_for_each_device(sdev, shost) { in scsi_report_device_reset()
2428 struct Scsi_Host *shost = dev->host; in scsi_ioctl_reset() local
2441 if (scsi_autopm_get_host(shost) < 0) in scsi_ioctl_reset()
2446 shost->hostt->cmd_size, GFP_KERNEL); in scsi_ioctl_reset()
2463 spin_lock_irqsave(shost->host_lock, flags); in scsi_ioctl_reset()
2464 shost->tmf_in_progress = 1; in scsi_ioctl_reset()
2465 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_ioctl_reset()
2498 spin_lock_irqsave(shost->host_lock, flags); in scsi_ioctl_reset()
2499 shost->tmf_in_progress = 0; in scsi_ioctl_reset()
2500 spin_unlock_irqrestore(shost->host_lock, flags); in scsi_ioctl_reset()
2507 shost_printk(KERN_INFO, shost, in scsi_ioctl_reset()
2510 wake_up(&shost->host_wait); in scsi_ioctl_reset()
2511 scsi_run_host_queues(shost); in scsi_ioctl_reset()
2516 scsi_autopm_put_host(shost); in scsi_ioctl_reset()