Lines Matching defs:shost

64 void scsi_eh_wakeup(struct Scsi_Host *shost, unsigned int busy)
66 lockdep_assert_held(shost->host_lock);
68 if (busy == shost->host_failed) {
69 trace_scsi_eh_wakeup(shost);
70 wake_up_process(shost->ehandler);
71 SCSI_LOG_ERROR_RECOVERY(5, shost_printk(KERN_INFO, shost,
78 * @shost: SCSI host to invoke error handling on.
82 void scsi_schedule_eh(struct Scsi_Host *shost)
86 spin_lock_irqsave(shost->host_lock, flags);
88 if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 ||
89 scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) {
90 shost->host_eh_scheduled++;
91 scsi_eh_wakeup(shost, scsi_host_busy(shost));
94 spin_unlock_irqrestore(shost->host_lock, flags);
98 static int scsi_host_eh_past_deadline(struct Scsi_Host *shost)
100 if (!shost->last_reset || shost->eh_deadline == -1)
110 if (time_before(jiffies, shost->last_reset + shost->eh_deadline) &&
111 shost->eh_deadline > -1)
152 struct Scsi_Host *shost = sdev->host;
156 if (scsi_host_eh_past_deadline(shost)) {
166 rtn = scsi_try_to_abort_cmd(shost->hostt, scmd);
176 if (scsi_host_eh_past_deadline(shost)) {
184 spin_lock_irqsave(shost->host_lock, flags);
191 if (list_empty(&shost->eh_abort_list) &&
192 list_empty(&shost->eh_cmd_q))
193 if (shost->eh_deadline != -1)
194 shost->last_reset = 0;
196 spin_unlock_irqrestore(shost->host_lock, flags);
214 spin_lock_irqsave(shost->host_lock, flags);
216 spin_unlock_irqrestore(shost->host_lock, flags);
231 struct Scsi_Host *shost = sdev->host;
234 if (!shost->hostt->eh_abort_handler) {
250 spin_lock_irqsave(shost->host_lock, flags);
251 if (shost->eh_deadline != -1 && !shost->last_reset)
252 shost->last_reset = jiffies;
254 list_add_tail(&scmd->eh_entry, &shost->eh_abort_list);
255 spin_unlock_irqrestore(shost->host_lock, flags);
260 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100);
284 struct Scsi_Host *shost = scmd->device->host;
285 unsigned int busy = scsi_host_busy(shost);
288 spin_lock_irqsave(shost->host_lock, flags);
289 shost->host_failed++;
290 scsi_eh_wakeup(shost, busy);
291 spin_unlock_irqrestore(shost->host_lock, flags);
300 struct Scsi_Host *shost = scmd->device->host;
304 WARN_ON_ONCE(!shost->ehandler);
307 spin_lock_irqsave(shost->host_lock, flags);
308 if (scsi_host_set_state(shost, SHOST_RECOVERY)) {
309 ret = scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY);
312 if (shost->eh_deadline != -1 && !shost->last_reset)
313 shost->last_reset = jiffies;
316 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q);
317 spin_unlock_irqrestore(shost->host_lock, flags);
399 * @shost: scsi host being recovered.
402 static inline void scsi_eh_prt_fail_stats(struct Scsi_Host *shost,
412 shost_for_each_device(sdev, shost) {
425 shost_printk(KERN_INFO, shost,
435 SCSI_LOG_ERROR_RECOVERY(2, shost_printk(KERN_INFO, shost,
1144 struct Scsi_Host *shost = sdev->host;
1153 shost->eh_action = &done;
1176 rtn = shost->hostt->queuecommand(shost, scmd);
1197 shost->eh_action = NULL;
1294 * This has the unfortunate side effect that if a shost adapter does
1308 struct Scsi_Host *shost;
1320 shost = scmd->device->host;
1321 if (scsi_host_eh_past_deadline(shost)) {
1492 * @shost: &scsi host being recovered.
1500 static int scsi_eh_stu(struct Scsi_Host *shost,
1507 shost_for_each_device(sdev, shost) {
1508 if (scsi_host_eh_past_deadline(shost)) {
1556 * @shost: scsi host being recovered.
1566 static int scsi_eh_bus_device_reset(struct Scsi_Host *shost,
1574 shost_for_each_device(sdev, shost) {
1575 if (scsi_host_eh_past_deadline(shost)) {
1621 * @shost: scsi host being recovered.
1628 static int scsi_eh_target_reset(struct Scsi_Host *shost,
1642 if (scsi_host_eh_past_deadline(shost)) {
1647 shost_printk(KERN_INFO, shost,
1657 shost_printk(KERN_INFO, shost,
1663 shost_printk(KERN_INFO, shost,
1686 * @shost: &scsi host being recovered.
1690 static int scsi_eh_bus_reset(struct Scsi_Host *shost,
1706 for (channel = 0; channel <= shost->max_channel; channel++) {
1707 if (scsi_host_eh_past_deadline(shost)) {
1710 shost_printk(KERN_INFO, shost,
1731 shost_printk(KERN_INFO, shost,
1748 shost_printk(KERN_INFO, shost,
1758 * @shost: host to be reset.
1762 static int scsi_eh_host_reset(struct Scsi_Host *shost,
1775 shost_printk(KERN_INFO, shost,
1788 shost_printk(KERN_INFO, shost,
2110 * @shost: Host we are restarting.
2116 static void scsi_restart_operations(struct Scsi_Host *shost)
2126 shost_for_each_device(sdev, shost) {
2139 shost_printk(KERN_INFO, shost, "waking up host to restart\n"));
2141 spin_lock_irqsave(shost->host_lock, flags);
2142 if (scsi_host_set_state(shost, SHOST_RUNNING))
2143 if (scsi_host_set_state(shost, SHOST_CANCEL))
2144 BUG_ON(scsi_host_set_state(shost, SHOST_DEL));
2145 spin_unlock_irqrestore(shost->host_lock, flags);
2147 wake_up(&shost->host_wait);
2155 scsi_run_host_queues(shost);
2165 spin_lock_irqsave(shost->host_lock, flags);
2166 if (shost->host_eh_scheduled)
2167 if (scsi_host_set_state(shost, SHOST_RECOVERY))
2168 WARN_ON(scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY));
2169 spin_unlock_irqrestore(shost->host_lock, flags);
2174 * @shost: host to be recovered.
2178 void scsi_eh_ready_devs(struct Scsi_Host *shost,
2182 if (!scsi_eh_stu(shost, work_q, done_q))
2183 if (!scsi_eh_bus_device_reset(shost, work_q, done_q))
2184 if (!scsi_eh_target_reset(shost, work_q, done_q))
2185 if (!scsi_eh_bus_reset(shost, work_q, done_q))
2186 if (!scsi_eh_host_reset(shost, work_q, done_q))
2234 * @shost: Host to unjam.
2255 static void scsi_unjam_host(struct Scsi_Host *shost)
2261 spin_lock_irqsave(shost->host_lock, flags);
2262 list_splice_init(&shost->eh_cmd_q, &eh_work_q);
2263 spin_unlock_irqrestore(shost->host_lock, flags);
2265 SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, &eh_work_q));
2268 scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q);
2270 spin_lock_irqsave(shost->host_lock, flags);
2271 if (shost->eh_deadline != -1)
2272 shost->last_reset = 0;
2273 spin_unlock_irqrestore(shost->host_lock, flags);
2287 struct Scsi_Host *shost = data;
2306 if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) ||
2307 shost->host_failed != scsi_host_busy(shost)) {
2309 shost_printk(KERN_INFO, shost,
2311 shost->host_no));
2318 shost_printk(KERN_INFO, shost,
2320 shost->host_no, shost->host_eh_scheduled,
2321 shost->host_failed,
2322 scsi_host_busy(shost)));
2329 if (!shost->eh_noresume && scsi_autopm_get_host(shost) != 0) {
2331 shost_printk(KERN_ERR, shost,
2333 shost->host_no));
2337 if (shost->transportt->eh_strategy_handler)
2338 shost->transportt->eh_strategy_handler(shost);
2340 scsi_unjam_host(shost);
2343 shost->host_failed = 0;
2352 scsi_restart_operations(shost);
2353 if (!shost->eh_noresume)
2354 scsi_autopm_put_host(shost);
2359 shost_printk(KERN_INFO, shost,
2361 shost->host_no));
2362 shost->ehandler = NULL;
2372 * Arguments: shost - Host in question
2387 void scsi_report_bus_reset(struct Scsi_Host *shost, int channel)
2391 __shost_for_each_device(sdev, shost) {
2404 * Arguments: shost - Host in question
2420 void scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target)
2424 __shost_for_each_device(sdev, shost) {
2441 struct Scsi_Host *shost = dev->host;
2454 if (scsi_autopm_get_host(shost) < 0)
2459 shost->hostt->cmd_size, GFP_KERNEL);
2475 spin_lock_irqsave(shost->host_lock, flags);
2476 shost->tmf_in_progress = 1;
2477 spin_unlock_irqrestore(shost->host_lock, flags);
2510 spin_lock_irqsave(shost->host_lock, flags);
2511 shost->tmf_in_progress = 0;
2512 spin_unlock_irqrestore(shost->host_lock, flags);
2519 shost_printk(KERN_INFO, shost,
2522 wake_up(&shost->host_wait);
2523 scsi_run_host_queues(shost);
2528 scsi_autopm_put_host(shost);