]> pilppa.org Git - linux-2.6-omap-h63xx.git/blob - drivers/scsi/scsi_error.c
Merge branch 'upstream-fixes' into upstream
[linux-2.6-omap-h63xx.git] / drivers / scsi / scsi_error.c
1 /*
2  *  scsi_error.c Copyright (C) 1997 Eric Youngdale
3  *
4  *  SCSI error/timeout handling
5  *      Initial versions: Eric Youngdale.  Based upon conversations with
6  *                        Leonard Zubkoff and David Miller at Linux Expo, 
7  *                        ideas originating from all over the place.
8  *
9  *      Restructured scsi_unjam_host and associated functions.
10  *      September 04, 2002 Mike Anderson (andmike@us.ibm.com)
11  *
12  *      Forward port of Russell King's (rmk@arm.linux.org.uk) changes and
13  *      minor  cleanups.
14  *      September 30, 2002 Mike Anderson (andmike@us.ibm.com)
15  */
16
17 #include <linux/module.h>
18 #include <linux/sched.h>
19 #include <linux/timer.h>
20 #include <linux/string.h>
21 #include <linux/slab.h>
22 #include <linux/kernel.h>
23 #include <linux/kthread.h>
24 #include <linux/interrupt.h>
25 #include <linux/blkdev.h>
26 #include <linux/delay.h>
27
28 #include <scsi/scsi.h>
29 #include <scsi/scsi_dbg.h>
30 #include <scsi/scsi_device.h>
31 #include <scsi/scsi_eh.h>
32 #include <scsi/scsi_transport.h>
33 #include <scsi/scsi_host.h>
34 #include <scsi/scsi_ioctl.h>
35 #include <scsi/scsi_request.h>
36
37 #include "scsi_priv.h"
38 #include "scsi_logging.h"
39
40 #define SENSE_TIMEOUT           (10*HZ)
41 #define START_UNIT_TIMEOUT      (30*HZ)
42
43 /*
44  * These should *probably* be handled by the host itself.
45  * Since it is allowed to sleep, it probably should.
46  */
47 #define BUS_RESET_SETTLE_TIME   (10)
48 #define HOST_RESET_SETTLE_TIME  (10)
49
50 /* called with shost->host_lock held */
51 void scsi_eh_wakeup(struct Scsi_Host *shost)
52 {
53         if (shost->host_busy == shost->host_failed) {
54                 wake_up_process(shost->ehandler);
55                 SCSI_LOG_ERROR_RECOVERY(5,
56                                 printk("Waking error handler thread\n"));
57         }
58 }
59 EXPORT_SYMBOL_GPL(scsi_eh_wakeup);
60
61 /**
62  * scsi_eh_scmd_add - add scsi cmd to error handling.
63  * @scmd:       scmd to run eh on.
64  * @eh_flag:    optional SCSI_EH flag.
65  *
66  * Return value:
67  *      0 on failure.
68  **/
69 int scsi_eh_scmd_add(struct scsi_cmnd *scmd, int eh_flag)
70 {
71         struct Scsi_Host *shost = scmd->device->host;
72         unsigned long flags;
73         int ret = 0;
74
75         if (!shost->ehandler)
76                 return 0;
77
78         spin_lock_irqsave(shost->host_lock, flags);
79         if (scsi_host_set_state(shost, SHOST_RECOVERY))
80                 if (scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY))
81                         goto out_unlock;
82
83         ret = 1;
84         scmd->eh_eflags |= eh_flag;
85         list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q);
86         shost->host_failed++;
87         scsi_eh_wakeup(shost);
88  out_unlock:
89         spin_unlock_irqrestore(shost->host_lock, flags);
90         return ret;
91 }
92
93 /**
94  * scsi_add_timer - Start timeout timer for a single scsi command.
95  * @scmd:       scsi command that is about to start running.
96  * @timeout:    amount of time to allow this command to run.
97  * @complete:   timeout function to call if timer isn't canceled.
98  *
99  * Notes:
100  *    This should be turned into an inline function.  Each scsi command
101  *    has its own timer, and as it is added to the queue, we set up the
102  *    timer.  When the command completes, we cancel the timer.
103  **/
104 void scsi_add_timer(struct scsi_cmnd *scmd, int timeout,
105                     void (*complete)(struct scsi_cmnd *))
106 {
107
108         /*
109          * If the clock was already running for this command, then
110          * first delete the timer.  The timer handling code gets rather
111          * confused if we don't do this.
112          */
113         if (scmd->eh_timeout.function)
114                 del_timer(&scmd->eh_timeout);
115
116         scmd->eh_timeout.data = (unsigned long)scmd;
117         scmd->eh_timeout.expires = jiffies + timeout;
118         scmd->eh_timeout.function = (void (*)(unsigned long)) complete;
119
120         SCSI_LOG_ERROR_RECOVERY(5, printk("%s: scmd: %p, time:"
121                                           " %d, (%p)\n", __FUNCTION__,
122                                           scmd, timeout, complete));
123
124         add_timer(&scmd->eh_timeout);
125 }
126
127 /**
128  * scsi_delete_timer - Delete/cancel timer for a given function.
129  * @scmd:       Cmd that we are canceling timer for
130  *
131  * Notes:
132  *     This should be turned into an inline function.
133  *
134  * Return value:
135  *     1 if we were able to detach the timer.  0 if we blew it, and the
136  *     timer function has already started to run.
137  **/
138 int scsi_delete_timer(struct scsi_cmnd *scmd)
139 {
140         int rtn;
141
142         rtn = del_timer(&scmd->eh_timeout);
143
144         SCSI_LOG_ERROR_RECOVERY(5, printk("%s: scmd: %p,"
145                                          " rtn: %d\n", __FUNCTION__,
146                                          scmd, rtn));
147
148         scmd->eh_timeout.data = (unsigned long)NULL;
149         scmd->eh_timeout.function = NULL;
150
151         return rtn;
152 }
153
154 /**
155  * scsi_times_out - Timeout function for normal scsi commands.
156  * @scmd:       Cmd that is timing out.
157  *
158  * Notes:
159  *     We do not need to lock this.  There is the potential for a race
160  *     only in that the normal completion handling might run, but if the
161  *     normal completion function determines that the timer has already
162  *     fired, then it mustn't do anything.
163  **/
164 void scsi_times_out(struct scsi_cmnd *scmd)
165 {
166         scsi_log_completion(scmd, TIMEOUT_ERROR);
167
168         if (scmd->device->host->transportt->eh_timed_out)
169                 switch (scmd->device->host->transportt->eh_timed_out(scmd)) {
170                 case EH_HANDLED:
171                         __scsi_done(scmd);
172                         return;
173                 case EH_RESET_TIMER:
174                         scsi_add_timer(scmd, scmd->timeout_per_command,
175                                        scsi_times_out);
176                         return;
177                 case EH_NOT_HANDLED:
178                         break;
179                 }
180
181         if (unlikely(!scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD))) {
182                 scmd->result |= DID_TIME_OUT << 16;
183                 __scsi_done(scmd);
184         }
185 }
186
187 /**
188  * scsi_block_when_processing_errors - Prevent cmds from being queued.
189  * @sdev:       Device on which we are performing recovery.
190  *
191  * Description:
192  *     We block until the host is out of error recovery, and then check to
193  *     see whether the host or the device is offline.
194  *
195  * Return value:
196  *     0 when dev was taken offline by error recovery. 1 OK to proceed.
197  **/
198 int scsi_block_when_processing_errors(struct scsi_device *sdev)
199 {
200         int online;
201
202         wait_event(sdev->host->host_wait, !scsi_host_in_recovery(sdev->host));
203
204         online = scsi_device_online(sdev);
205
206         SCSI_LOG_ERROR_RECOVERY(5, printk("%s: rtn: %d\n", __FUNCTION__,
207                                           online));
208
209         return online;
210 }
211 EXPORT_SYMBOL(scsi_block_when_processing_errors);
212
213 #ifdef CONFIG_SCSI_LOGGING
214 /**
215  * scsi_eh_prt_fail_stats - Log info on failures.
216  * @shost:      scsi host being recovered.
217  * @work_q:     Queue of scsi cmds to process.
218  **/
219 static inline void scsi_eh_prt_fail_stats(struct Scsi_Host *shost,
220                                           struct list_head *work_q)
221 {
222         struct scsi_cmnd *scmd;
223         struct scsi_device *sdev;
224         int total_failures = 0;
225         int cmd_failed = 0;
226         int cmd_cancel = 0;
227         int devices_failed = 0;
228
229         shost_for_each_device(sdev, shost) {
230                 list_for_each_entry(scmd, work_q, eh_entry) {
231                         if (scmd->device == sdev) {
232                                 ++total_failures;
233                                 if (scmd->eh_eflags & SCSI_EH_CANCEL_CMD)
234                                         ++cmd_cancel;
235                                 else 
236                                         ++cmd_failed;
237                         }
238                 }
239
240                 if (cmd_cancel || cmd_failed) {
241                         SCSI_LOG_ERROR_RECOVERY(3,
242                                 sdev_printk(KERN_INFO, sdev,
243                                             "%s: cmds failed: %d, cancel: %d\n",
244                                             __FUNCTION__, cmd_failed,
245                                             cmd_cancel));
246                         cmd_cancel = 0;
247                         cmd_failed = 0;
248                         ++devices_failed;
249                 }
250         }
251
252         SCSI_LOG_ERROR_RECOVERY(2, printk("Total of %d commands on %d"
253                                           " devices require eh work\n",
254                                   total_failures, devices_failed));
255 }
256 #endif
257
258 /**
259  * scsi_check_sense - Examine scsi cmd sense
260  * @scmd:       Cmd to have sense checked.
261  *
262  * Return value:
263  *      SUCCESS or FAILED or NEEDS_RETRY
264  *
265  * Notes:
266  *      When a deferred error is detected the current command has
267  *      not been executed and needs retrying.
268  **/
269 static int scsi_check_sense(struct scsi_cmnd *scmd)
270 {
271         struct scsi_sense_hdr sshdr;
272
273         if (! scsi_command_normalize_sense(scmd, &sshdr))
274                 return FAILED;  /* no valid sense data */
275
276         if (scsi_sense_is_deferred(&sshdr))
277                 return NEEDS_RETRY;
278
279         /*
280          * Previous logic looked for FILEMARK, EOM or ILI which are
281          * mainly associated with tapes and returned SUCCESS.
282          */
283         if (sshdr.response_code == 0x70) {
284                 /* fixed format */
285                 if (scmd->sense_buffer[2] & 0xe0)
286                         return SUCCESS;
287         } else {
288                 /*
289                  * descriptor format: look for "stream commands sense data
290                  * descriptor" (see SSC-3). Assume single sense data
291                  * descriptor. Ignore ILI from SBC-2 READ LONG and WRITE LONG.
292                  */
293                 if ((sshdr.additional_length > 3) &&
294                     (scmd->sense_buffer[8] == 0x4) &&
295                     (scmd->sense_buffer[11] & 0xe0))
296                         return SUCCESS;
297         }
298
299         switch (sshdr.sense_key) {
300         case NO_SENSE:
301                 return SUCCESS;
302         case RECOVERED_ERROR:
303                 return /* soft_error */ SUCCESS;
304
305         case ABORTED_COMMAND:
306                 return NEEDS_RETRY;
307         case NOT_READY:
308         case UNIT_ATTENTION:
309                 /*
310                  * if we are expecting a cc/ua because of a bus reset that we
311                  * performed, treat this just as a retry.  otherwise this is
312                  * information that we should pass up to the upper-level driver
313                  * so that we can deal with it there.
314                  */
315                 if (scmd->device->expecting_cc_ua) {
316                         scmd->device->expecting_cc_ua = 0;
317                         return NEEDS_RETRY;
318                 }
319                 /*
320                  * if the device is in the process of becoming ready, we 
321                  * should retry.
322                  */
323                 if ((sshdr.asc == 0x04) && (sshdr.ascq == 0x01))
324                         return NEEDS_RETRY;
325                 /*
326                  * if the device is not started, we need to wake
327                  * the error handler to start the motor
328                  */
329                 if (scmd->device->allow_restart &&
330                     (sshdr.asc == 0x04) && (sshdr.ascq == 0x02))
331                         return FAILED;
332                 return SUCCESS;
333
334                 /* these three are not supported */
335         case COPY_ABORTED:
336         case VOLUME_OVERFLOW:
337         case MISCOMPARE:
338                 return SUCCESS;
339
340         case MEDIUM_ERROR:
341                 return NEEDS_RETRY;
342
343         case HARDWARE_ERROR:
344                 if (scmd->device->retry_hwerror)
345                         return NEEDS_RETRY;
346                 else
347                         return SUCCESS;
348
349         case ILLEGAL_REQUEST:
350         case BLANK_CHECK:
351         case DATA_PROTECT:
352         default:
353                 return SUCCESS;
354         }
355 }
356
357 /**
358  * scsi_eh_completed_normally - Disposition a eh cmd on return from LLD.
359  * @scmd:       SCSI cmd to examine.
360  *
361  * Notes:
362  *    This is *only* called when we are examining the status of commands
363  *    queued during error recovery.  the main difference here is that we
364  *    don't allow for the possibility of retries here, and we are a lot
365  *    more restrictive about what we consider acceptable.
366  **/
367 static int scsi_eh_completed_normally(struct scsi_cmnd *scmd)
368 {
369         /*
370          * first check the host byte, to see if there is anything in there
371          * that would indicate what we need to do.
372          */
373         if (host_byte(scmd->result) == DID_RESET) {
374                 /*
375                  * rats.  we are already in the error handler, so we now
376                  * get to try and figure out what to do next.  if the sense
377                  * is valid, we have a pretty good idea of what to do.
378                  * if not, we mark it as FAILED.
379                  */
380                 return scsi_check_sense(scmd);
381         }
382         if (host_byte(scmd->result) != DID_OK)
383                 return FAILED;
384
385         /*
386          * next, check the message byte.
387          */
388         if (msg_byte(scmd->result) != COMMAND_COMPLETE)
389                 return FAILED;
390
391         /*
392          * now, check the status byte to see if this indicates
393          * anything special.
394          */
395         switch (status_byte(scmd->result)) {
396         case GOOD:
397         case COMMAND_TERMINATED:
398                 return SUCCESS;
399         case CHECK_CONDITION:
400                 return scsi_check_sense(scmd);
401         case CONDITION_GOOD:
402         case INTERMEDIATE_GOOD:
403         case INTERMEDIATE_C_GOOD:
404                 /*
405                  * who knows?  FIXME(eric)
406                  */
407                 return SUCCESS;
408         case BUSY:
409         case QUEUE_FULL:
410         case RESERVATION_CONFLICT:
411         default:
412                 return FAILED;
413         }
414         return FAILED;
415 }
416
417 /**
418  * scsi_eh_done - Completion function for error handling.
419  * @scmd:       Cmd that is done.
420  **/
421 static void scsi_eh_done(struct scsi_cmnd *scmd)
422 {
423         struct completion     *eh_action;
424
425         SCSI_LOG_ERROR_RECOVERY(3,
426                 printk("%s scmd: %p result: %x\n",
427                         __FUNCTION__, scmd, scmd->result));
428
429         eh_action = scmd->device->host->eh_action;
430         if (eh_action)
431                 complete(eh_action);
432 }
433
434 /**
435  * scsi_send_eh_cmnd  - send a cmd to a device as part of error recovery.
436  * @scmd:       SCSI Cmd to send.
437  * @timeout:    Timeout for cmd.
438  *
439  * Return value:
440  *    SUCCESS or FAILED or NEEDS_RETRY
441  **/
442 static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, int timeout)
443 {
444         struct scsi_device *sdev = scmd->device;
445         struct Scsi_Host *shost = sdev->host;
446         DECLARE_COMPLETION(done);
447         unsigned long timeleft;
448         unsigned long flags;
449         int rtn;
450
451         if (sdev->scsi_level <= SCSI_2)
452                 scmd->cmnd[1] = (scmd->cmnd[1] & 0x1f) |
453                         (sdev->lun << 5 & 0xe0);
454
455         shost->eh_action = &done;
456         scmd->request->rq_status = RQ_SCSI_BUSY;
457
458         spin_lock_irqsave(shost->host_lock, flags);
459         scsi_log_send(scmd);
460         shost->hostt->queuecommand(scmd, scsi_eh_done);
461         spin_unlock_irqrestore(shost->host_lock, flags);
462
463         timeleft = wait_for_completion_timeout(&done, timeout);
464
465         scmd->request->rq_status = RQ_SCSI_DONE;
466         shost->eh_action = NULL;
467
468         scsi_log_completion(scmd, SUCCESS);
469
470         SCSI_LOG_ERROR_RECOVERY(3,
471                 printk("%s: scmd: %p, timeleft: %ld\n",
472                         __FUNCTION__, scmd, timeleft));
473
474         /*
475          * If there is time left scsi_eh_done got called, and we will
476          * examine the actual status codes to see whether the command
477          * actually did complete normally, else tell the host to forget
478          * about this command.
479          */
480         if (timeleft) {
481                 rtn = scsi_eh_completed_normally(scmd);
482                 SCSI_LOG_ERROR_RECOVERY(3,
483                         printk("%s: scsi_eh_completed_normally %x\n",
484                                __FUNCTION__, rtn));
485
486                 switch (rtn) {
487                 case SUCCESS:
488                 case NEEDS_RETRY:
489                 case FAILED:
490                         break;
491                 default:
492                         rtn = FAILED;
493                         break;
494                 }
495         } else {
496                 /*
497                  * FIXME(eric) - we are not tracking whether we could
498                  * abort a timed out command or not.  not sure how
499                  * we should treat them differently anyways.
500                  */
501                 if (shost->hostt->eh_abort_handler)
502                         shost->hostt->eh_abort_handler(scmd);
503                 rtn = FAILED;
504         }
505
506         return rtn;
507 }
508
509 /**
510  * scsi_request_sense - Request sense data from a particular target.
511  * @scmd:       SCSI cmd for request sense.
512  *
513  * Notes:
514  *    Some hosts automatically obtain this information, others require
515  *    that we obtain it on our own. This function will *not* return until
516  *    the command either times out, or it completes.
517  **/
518 static int scsi_request_sense(struct scsi_cmnd *scmd)
519 {
520         static unsigned char generic_sense[6] =
521         {REQUEST_SENSE, 0, 0, 0, 252, 0};
522         unsigned char *scsi_result;
523         int saved_result;
524         int rtn;
525
526         memcpy(scmd->cmnd, generic_sense, sizeof(generic_sense));
527
528         scsi_result = kmalloc(252, GFP_ATOMIC | ((scmd->device->host->hostt->unchecked_isa_dma) ? __GFP_DMA : 0));
529
530
531         if (unlikely(!scsi_result)) {
532                 printk(KERN_ERR "%s: cannot allocate scsi_result.\n",
533                        __FUNCTION__);
534                 return FAILED;
535         }
536
537         /*
538          * zero the sense buffer.  some host adapters automatically always
539          * request sense, so it is not a good idea that
540          * scmd->request_buffer and scmd->sense_buffer point to the same
541          * address (db).  0 is not a valid sense code. 
542          */
543         memset(scmd->sense_buffer, 0, sizeof(scmd->sense_buffer));
544         memset(scsi_result, 0, 252);
545
546         saved_result = scmd->result;
547         scmd->request_buffer = scsi_result;
548         scmd->request_bufflen = 252;
549         scmd->use_sg = 0;
550         scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
551         scmd->sc_data_direction = DMA_FROM_DEVICE;
552         scmd->underflow = 0;
553
554         rtn = scsi_send_eh_cmnd(scmd, SENSE_TIMEOUT);
555
556         /* last chance to have valid sense data */
557         if(!SCSI_SENSE_VALID(scmd)) {
558                 memcpy(scmd->sense_buffer, scmd->request_buffer,
559                        sizeof(scmd->sense_buffer));
560         }
561
562         kfree(scsi_result);
563
564         /*
565          * when we eventually call scsi_finish, we really wish to complete
566          * the original request, so let's restore the original data. (db)
567          */
568         scsi_setup_cmd_retry(scmd);
569         scmd->result = saved_result;
570         return rtn;
571 }
572
573 /**
574  * scsi_eh_finish_cmd - Handle a cmd that eh is finished with.
575  * @scmd:       Original SCSI cmd that eh has finished.
576  * @done_q:     Queue for processed commands.
577  *
578  * Notes:
579  *    We don't want to use the normal command completion while we are are
580  *    still handling errors - it may cause other commands to be queued,
581  *    and that would disturb what we are doing.  thus we really want to
582  *    keep a list of pending commands for final completion, and once we
583  *    are ready to leave error handling we handle completion for real.
584  **/
585 void scsi_eh_finish_cmd(struct scsi_cmnd *scmd, struct list_head *done_q)
586 {
587         scmd->device->host->host_failed--;
588         scmd->eh_eflags = 0;
589
590         /*
591          * set this back so that the upper level can correctly free up
592          * things.
593          */
594         scsi_setup_cmd_retry(scmd);
595         list_move_tail(&scmd->eh_entry, done_q);
596 }
597 EXPORT_SYMBOL(scsi_eh_finish_cmd);
598
599 /**
600  * scsi_eh_get_sense - Get device sense data.
601  * @work_q:     Queue of commands to process.
602  * @done_q:     Queue of proccessed commands..
603  *
604  * Description:
605  *    See if we need to request sense information.  if so, then get it
606  *    now, so we have a better idea of what to do.  
607  *
608  * Notes:
609  *    This has the unfortunate side effect that if a shost adapter does
610  *    not automatically request sense information, that we end up shutting
611  *    it down before we request it.
612  *
613  *    All drivers should request sense information internally these days,
614  *    so for now all I have to say is tough noogies if you end up in here.
615  *
616  *    XXX: Long term this code should go away, but that needs an audit of
617  *         all LLDDs first.
618  **/
619 static int scsi_eh_get_sense(struct list_head *work_q,
620                              struct list_head *done_q)
621 {
622         struct scsi_cmnd *scmd, *next;
623         int rtn;
624
625         list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
626                 if ((scmd->eh_eflags & SCSI_EH_CANCEL_CMD) ||
627                     SCSI_SENSE_VALID(scmd))
628                         continue;
629
630                 SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd,
631                                                   "%s: requesting sense\n",
632                                                   current->comm));
633                 rtn = scsi_request_sense(scmd);
634                 if (rtn != SUCCESS)
635                         continue;
636
637                 SCSI_LOG_ERROR_RECOVERY(3, printk("sense requested for %p"
638                                                   " result %x\n", scmd,
639                                                   scmd->result));
640                 SCSI_LOG_ERROR_RECOVERY(3, scsi_print_sense("bh", scmd));
641
642                 rtn = scsi_decide_disposition(scmd);
643
644                 /*
645                  * if the result was normal, then just pass it along to the
646                  * upper level.
647                  */
648                 if (rtn == SUCCESS)
649                         /* we don't want this command reissued, just
650                          * finished with the sense data, so set
651                          * retries to the max allowed to ensure it
652                          * won't get reissued */
653                         scmd->retries = scmd->allowed;
654                 else if (rtn != NEEDS_RETRY)
655                         continue;
656
657                 scsi_eh_finish_cmd(scmd, done_q);
658         }
659
660         return list_empty(work_q);
661 }
662
663 /**
664  * scsi_try_to_abort_cmd - Ask host to abort a running command.
665  * @scmd:       SCSI cmd to abort from Lower Level.
666  *
667  * Notes:
668  *    This function will not return until the user's completion function
669  *    has been called.  there is no timeout on this operation.  if the
670  *    author of the low-level driver wishes this operation to be timed,
671  *    they can provide this facility themselves.  helper functions in
672  *    scsi_error.c can be supplied to make this easier to do.
673  **/
674 static int scsi_try_to_abort_cmd(struct scsi_cmnd *scmd)
675 {
676         if (!scmd->device->host->hostt->eh_abort_handler)
677                 return FAILED;
678
679         /*
680          * scsi_done was called just after the command timed out and before
681          * we had a chance to process it. (db)
682          */
683         if (scmd->serial_number == 0)
684                 return SUCCESS;
685         return scmd->device->host->hostt->eh_abort_handler(scmd);
686 }
687
688 /**
689  * scsi_eh_tur - Send TUR to device.
690  * @scmd:       Scsi cmd to send TUR
691  *
692  * Return value:
693  *    0 - Device is ready. 1 - Device NOT ready.
694  **/
695 static int scsi_eh_tur(struct scsi_cmnd *scmd)
696 {
697         static unsigned char tur_command[6] = {TEST_UNIT_READY, 0, 0, 0, 0, 0};
698         int retry_cnt = 1, rtn;
699         int saved_result;
700
701 retry_tur:
702         memcpy(scmd->cmnd, tur_command, sizeof(tur_command));
703
704         /*
705          * zero the sense buffer.  the scsi spec mandates that any
706          * untransferred sense data should be interpreted as being zero.
707          */
708         memset(scmd->sense_buffer, 0, sizeof(scmd->sense_buffer));
709
710         saved_result = scmd->result;
711         scmd->request_buffer = NULL;
712         scmd->request_bufflen = 0;
713         scmd->use_sg = 0;
714         scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
715         scmd->underflow = 0;
716         scmd->sc_data_direction = DMA_NONE;
717
718         rtn = scsi_send_eh_cmnd(scmd, SENSE_TIMEOUT);
719
720         /*
721          * when we eventually call scsi_finish, we really wish to complete
722          * the original request, so let's restore the original data. (db)
723          */
724         scsi_setup_cmd_retry(scmd);
725         scmd->result = saved_result;
726
727         /*
728          * hey, we are done.  let's look to see what happened.
729          */
730         SCSI_LOG_ERROR_RECOVERY(3, printk("%s: scmd %p rtn %x\n",
731                 __FUNCTION__, scmd, rtn));
732         if (rtn == SUCCESS)
733                 return 0;
734         else if (rtn == NEEDS_RETRY) {
735                 if (retry_cnt--)
736                         goto retry_tur;
737                 return 0;
738         }
739         return 1;
740 }
741
742 /**
743  * scsi_eh_abort_cmds - abort canceled commands.
744  * @shost:      scsi host being recovered.
745  * @eh_done_q:  list_head for processed commands.
746  *
747  * Decription:
748  *    Try and see whether or not it makes sense to try and abort the
749  *    running command.  this only works out to be the case if we have one
750  *    command that has timed out.  if the command simply failed, it makes
751  *    no sense to try and abort the command, since as far as the shost
752  *    adapter is concerned, it isn't running.
753  **/
754 static int scsi_eh_abort_cmds(struct list_head *work_q,
755                               struct list_head *done_q)
756 {
757         struct scsi_cmnd *scmd, *next;
758         int rtn;
759
760         list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
761                 if (!(scmd->eh_eflags & SCSI_EH_CANCEL_CMD))
762                         continue;
763                 SCSI_LOG_ERROR_RECOVERY(3, printk("%s: aborting cmd:"
764                                                   "0x%p\n", current->comm,
765                                                   scmd));
766                 rtn = scsi_try_to_abort_cmd(scmd);
767                 if (rtn == SUCCESS) {
768                         scmd->eh_eflags &= ~SCSI_EH_CANCEL_CMD;
769                         if (!scsi_device_online(scmd->device) ||
770                             !scsi_eh_tur(scmd)) {
771                                 scsi_eh_finish_cmd(scmd, done_q);
772                         }
773                                 
774                 } else
775                         SCSI_LOG_ERROR_RECOVERY(3, printk("%s: aborting"
776                                                           " cmd failed:"
777                                                           "0x%p\n",
778                                                           current->comm,
779                                                           scmd));
780         }
781
782         return list_empty(work_q);
783 }
784
785 /**
786  * scsi_try_bus_device_reset - Ask host to perform a BDR on a dev
787  * @scmd:       SCSI cmd used to send BDR       
788  *
789  * Notes:
790  *    There is no timeout for this operation.  if this operation is
791  *    unreliable for a given host, then the host itself needs to put a
792  *    timer on it, and set the host back to a consistent state prior to
793  *    returning.
794  **/
795 static int scsi_try_bus_device_reset(struct scsi_cmnd *scmd)
796 {
797         int rtn;
798
799         if (!scmd->device->host->hostt->eh_device_reset_handler)
800                 return FAILED;
801
802         rtn = scmd->device->host->hostt->eh_device_reset_handler(scmd);
803         if (rtn == SUCCESS) {
804                 scmd->device->was_reset = 1;
805                 scmd->device->expecting_cc_ua = 1;
806         }
807
808         return rtn;
809 }
810
811 /**
812  * scsi_eh_try_stu - Send START_UNIT to device.
813  * @scmd:       Scsi cmd to send START_UNIT
814  *
815  * Return value:
816  *    0 - Device is ready. 1 - Device NOT ready.
817  **/
818 static int scsi_eh_try_stu(struct scsi_cmnd *scmd)
819 {
820         static unsigned char stu_command[6] = {START_STOP, 0, 0, 0, 1, 0};
821         int rtn;
822         int saved_result;
823
824         if (!scmd->device->allow_restart)
825                 return 1;
826
827         memcpy(scmd->cmnd, stu_command, sizeof(stu_command));
828
829         /*
830          * zero the sense buffer.  the scsi spec mandates that any
831          * untransferred sense data should be interpreted as being zero.
832          */
833         memset(scmd->sense_buffer, 0, sizeof(scmd->sense_buffer));
834
835         saved_result = scmd->result;
836         scmd->request_buffer = NULL;
837         scmd->request_bufflen = 0;
838         scmd->use_sg = 0;
839         scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
840         scmd->underflow = 0;
841         scmd->sc_data_direction = DMA_NONE;
842
843         rtn = scsi_send_eh_cmnd(scmd, START_UNIT_TIMEOUT);
844
845         /*
846          * when we eventually call scsi_finish, we really wish to complete
847          * the original request, so let's restore the original data. (db)
848          */
849         scsi_setup_cmd_retry(scmd);
850         scmd->result = saved_result;
851
852         /*
853          * hey, we are done.  let's look to see what happened.
854          */
855         SCSI_LOG_ERROR_RECOVERY(3, printk("%s: scmd %p rtn %x\n",
856                 __FUNCTION__, scmd, rtn));
857         if (rtn == SUCCESS)
858                 return 0;
859         return 1;
860 }
861
862  /**
863  * scsi_eh_stu - send START_UNIT if needed
864  * @shost:      scsi host being recovered.
865  * @eh_done_q:  list_head for processed commands.
866  *
867  * Notes:
868  *    If commands are failing due to not ready, initializing command required,
869  *      try revalidating the device, which will end up sending a start unit. 
870  **/
871 static int scsi_eh_stu(struct Scsi_Host *shost,
872                               struct list_head *work_q,
873                               struct list_head *done_q)
874 {
875         struct scsi_cmnd *scmd, *stu_scmd, *next;
876         struct scsi_device *sdev;
877
878         shost_for_each_device(sdev, shost) {
879                 stu_scmd = NULL;
880                 list_for_each_entry(scmd, work_q, eh_entry)
881                         if (scmd->device == sdev && SCSI_SENSE_VALID(scmd) &&
882                             scsi_check_sense(scmd) == FAILED ) {
883                                 stu_scmd = scmd;
884                                 break;
885                         }
886
887                 if (!stu_scmd)
888                         continue;
889
890                 SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Sending START_UNIT to sdev:"
891                                                   " 0x%p\n", current->comm, sdev));
892
893                 if (!scsi_eh_try_stu(stu_scmd)) {
894                         if (!scsi_device_online(sdev) ||
895                             !scsi_eh_tur(stu_scmd)) {
896                                 list_for_each_entry_safe(scmd, next,
897                                                           work_q, eh_entry) {
898                                         if (scmd->device == sdev)
899                                                 scsi_eh_finish_cmd(scmd, done_q);
900                                 }
901                         }
902                 } else {
903                         SCSI_LOG_ERROR_RECOVERY(3,
904                                                 printk("%s: START_UNIT failed to sdev:"
905                                                        " 0x%p\n", current->comm, sdev));
906                 }
907         }
908
909         return list_empty(work_q);
910 }
911
912
913 /**
914  * scsi_eh_bus_device_reset - send bdr if needed
915  * @shost:      scsi host being recovered.
916  * @eh_done_q:  list_head for processed commands.
917  *
918  * Notes:
919  *    Try a bus device reset.  still, look to see whether we have multiple
920  *    devices that are jammed or not - if we have multiple devices, it
921  *    makes no sense to try bus_device_reset - we really would need to try
922  *    a bus_reset instead. 
923  **/
924 static int scsi_eh_bus_device_reset(struct Scsi_Host *shost,
925                                     struct list_head *work_q,
926                                     struct list_head *done_q)
927 {
928         struct scsi_cmnd *scmd, *bdr_scmd, *next;
929         struct scsi_device *sdev;
930         int rtn;
931
932         shost_for_each_device(sdev, shost) {
933                 bdr_scmd = NULL;
934                 list_for_each_entry(scmd, work_q, eh_entry)
935                         if (scmd->device == sdev) {
936                                 bdr_scmd = scmd;
937                                 break;
938                         }
939
940                 if (!bdr_scmd)
941                         continue;
942
943                 SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Sending BDR sdev:"
944                                                   " 0x%p\n", current->comm,
945                                                   sdev));
946                 rtn = scsi_try_bus_device_reset(bdr_scmd);
947                 if (rtn == SUCCESS) {
948                         if (!scsi_device_online(sdev) ||
949                             !scsi_eh_tur(bdr_scmd)) {
950                                 list_for_each_entry_safe(scmd, next,
951                                                          work_q, eh_entry) {
952                                         if (scmd->device == sdev)
953                                                 scsi_eh_finish_cmd(scmd,
954                                                                    done_q);
955                                 }
956                         }
957                 } else {
958                         SCSI_LOG_ERROR_RECOVERY(3, printk("%s: BDR"
959                                                           " failed sdev:"
960                                                           "0x%p\n",
961                                                           current->comm,
962                                                            sdev));
963                 }
964         }
965
966         return list_empty(work_q);
967 }
968
969 /**
970  * scsi_try_bus_reset - ask host to perform a bus reset
971  * @scmd:       SCSI cmd to send bus reset.
972  **/
973 static int scsi_try_bus_reset(struct scsi_cmnd *scmd)
974 {
975         unsigned long flags;
976         int rtn;
977
978         SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Snd Bus RST\n",
979                                           __FUNCTION__));
980
981         if (!scmd->device->host->hostt->eh_bus_reset_handler)
982                 return FAILED;
983
984         rtn = scmd->device->host->hostt->eh_bus_reset_handler(scmd);
985
986         if (rtn == SUCCESS) {
987                 if (!scmd->device->host->hostt->skip_settle_delay)
988                         ssleep(BUS_RESET_SETTLE_TIME);
989                 spin_lock_irqsave(scmd->device->host->host_lock, flags);
990                 scsi_report_bus_reset(scmd->device->host,
991                                       scmd_channel(scmd));
992                 spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
993         }
994
995         return rtn;
996 }
997
998 /**
999  * scsi_try_host_reset - ask host adapter to reset itself
1000  * @scmd:       SCSI cmd to send hsot reset.
1001  **/
1002 static int scsi_try_host_reset(struct scsi_cmnd *scmd)
1003 {
1004         unsigned long flags;
1005         int rtn;
1006
1007         SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Snd Host RST\n",
1008                                           __FUNCTION__));
1009
1010         if (!scmd->device->host->hostt->eh_host_reset_handler)
1011                 return FAILED;
1012
1013         rtn = scmd->device->host->hostt->eh_host_reset_handler(scmd);
1014
1015         if (rtn == SUCCESS) {
1016                 if (!scmd->device->host->hostt->skip_settle_delay)
1017                         ssleep(HOST_RESET_SETTLE_TIME);
1018                 spin_lock_irqsave(scmd->device->host->host_lock, flags);
1019                 scsi_report_bus_reset(scmd->device->host,
1020                                       scmd_channel(scmd));
1021                 spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
1022         }
1023
1024         return rtn;
1025 }
1026
1027 /**
1028  * scsi_eh_bus_reset - send a bus reset 
1029  * @shost:      scsi host being recovered.
1030  * @eh_done_q:  list_head for processed commands.
1031  **/
1032 static int scsi_eh_bus_reset(struct Scsi_Host *shost,
1033                              struct list_head *work_q,
1034                              struct list_head *done_q)
1035 {
1036         struct scsi_cmnd *scmd, *chan_scmd, *next;
1037         unsigned int channel;
1038         int rtn;
1039
1040         /*
1041          * we really want to loop over the various channels, and do this on
1042          * a channel by channel basis.  we should also check to see if any
1043          * of the failed commands are on soft_reset devices, and if so, skip
1044          * the reset.  
1045          */
1046
1047         for (channel = 0; channel <= shost->max_channel; channel++) {
1048                 chan_scmd = NULL;
1049                 list_for_each_entry(scmd, work_q, eh_entry) {
1050                         if (channel == scmd_channel(scmd)) {
1051                                 chan_scmd = scmd;
1052                                 break;
1053                                 /*
1054                                  * FIXME add back in some support for
1055                                  * soft_reset devices.
1056                                  */
1057                         }
1058                 }
1059
1060                 if (!chan_scmd)
1061                         continue;
1062                 SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Sending BRST chan:"
1063                                                   " %d\n", current->comm,
1064                                                   channel));
1065                 rtn = scsi_try_bus_reset(chan_scmd);
1066                 if (rtn == SUCCESS) {
1067                         list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1068                                 if (channel == scmd_channel(scmd))
1069                                         if (!scsi_device_online(scmd->device) ||
1070                                             !scsi_eh_tur(scmd))
1071                                                 scsi_eh_finish_cmd(scmd,
1072                                                                    done_q);
1073                         }
1074                 } else {
1075                         SCSI_LOG_ERROR_RECOVERY(3, printk("%s: BRST"
1076                                                           " failed chan: %d\n",
1077                                                           current->comm,
1078                                                           channel));
1079                 }
1080         }
1081         return list_empty(work_q);
1082 }
1083
1084 /**
1085  * scsi_eh_host_reset - send a host reset 
1086  * @work_q:     list_head for processed commands.
1087  * @done_q:     list_head for processed commands.
1088  **/
1089 static int scsi_eh_host_reset(struct list_head *work_q,
1090                               struct list_head *done_q)
1091 {
1092         struct scsi_cmnd *scmd, *next;
1093         int rtn;
1094
1095         if (!list_empty(work_q)) {
1096                 scmd = list_entry(work_q->next,
1097                                   struct scsi_cmnd, eh_entry);
1098
1099                 SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Sending HRST\n"
1100                                                   , current->comm));
1101
1102                 rtn = scsi_try_host_reset(scmd);
1103                 if (rtn == SUCCESS) {
1104                         list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1105                                 if (!scsi_device_online(scmd->device) ||
1106                                     (!scsi_eh_try_stu(scmd) && !scsi_eh_tur(scmd)) ||
1107                                     !scsi_eh_tur(scmd))
1108                                         scsi_eh_finish_cmd(scmd, done_q);
1109                         }
1110                 } else {
1111                         SCSI_LOG_ERROR_RECOVERY(3, printk("%s: HRST"
1112                                                           " failed\n",
1113                                                           current->comm));
1114                 }
1115         }
1116         return list_empty(work_q);
1117 }
1118
1119 /**
1120  * scsi_eh_offline_sdevs - offline scsi devices that fail to recover
1121  * @work_q:     list_head for processed commands.
1122  * @done_q:     list_head for processed commands.
1123  *
1124  **/
1125 static void scsi_eh_offline_sdevs(struct list_head *work_q,
1126                                   struct list_head *done_q)
1127 {
1128         struct scsi_cmnd *scmd, *next;
1129
1130         list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
1131                 sdev_printk(KERN_INFO, scmd->device,
1132                             "scsi: Device offlined - not"
1133                             " ready after error recovery\n");
1134                 scsi_device_set_state(scmd->device, SDEV_OFFLINE);
1135                 if (scmd->eh_eflags & SCSI_EH_CANCEL_CMD) {
1136                         /*
1137                          * FIXME: Handle lost cmds.
1138                          */
1139                 }
1140                 scsi_eh_finish_cmd(scmd, done_q);
1141         }
1142         return;
1143 }
1144
1145 /**
1146  * scsi_decide_disposition - Disposition a cmd on return from LLD.
1147  * @scmd:       SCSI cmd to examine.
1148  *
1149  * Notes:
1150  *    This is *only* called when we are examining the status after sending
1151  *    out the actual data command.  any commands that are queued for error
1152  *    recovery (e.g. test_unit_ready) do *not* come through here.
1153  *
1154  *    When this routine returns failed, it means the error handler thread
1155  *    is woken.  In cases where the error code indicates an error that
1156  *    doesn't require the error handler read (i.e. we don't need to
1157  *    abort/reset), this function should return SUCCESS.
1158  **/
1159 int scsi_decide_disposition(struct scsi_cmnd *scmd)
1160 {
1161         int rtn;
1162
1163         /*
1164          * if the device is offline, then we clearly just pass the result back
1165          * up to the top level.
1166          */
1167         if (!scsi_device_online(scmd->device)) {
1168                 SCSI_LOG_ERROR_RECOVERY(5, printk("%s: device offline - report"
1169                                                   " as SUCCESS\n",
1170                                                   __FUNCTION__));
1171                 return SUCCESS;
1172         }
1173
1174         /*
1175          * first check the host byte, to see if there is anything in there
1176          * that would indicate what we need to do.
1177          */
1178         switch (host_byte(scmd->result)) {
1179         case DID_PASSTHROUGH:
1180                 /*
1181                  * no matter what, pass this through to the upper layer.
1182                  * nuke this special code so that it looks like we are saying
1183                  * did_ok.
1184                  */
1185                 scmd->result &= 0xff00ffff;
1186                 return SUCCESS;
1187         case DID_OK:
1188                 /*
1189                  * looks good.  drop through, and check the next byte.
1190                  */
1191                 break;
1192         case DID_NO_CONNECT:
1193         case DID_BAD_TARGET:
1194         case DID_ABORT:
1195                 /*
1196                  * note - this means that we just report the status back
1197                  * to the top level driver, not that we actually think
1198                  * that it indicates SUCCESS.
1199                  */
1200                 return SUCCESS;
1201                 /*
1202                  * when the low level driver returns did_soft_error,
1203                  * it is responsible for keeping an internal retry counter 
1204                  * in order to avoid endless loops (db)
1205                  *
1206                  * actually this is a bug in this function here.  we should
1207                  * be mindful of the maximum number of retries specified
1208                  * and not get stuck in a loop.
1209                  */
1210         case DID_SOFT_ERROR:
1211                 goto maybe_retry;
1212         case DID_IMM_RETRY:
1213                 return NEEDS_RETRY;
1214
1215         case DID_REQUEUE:
1216                 return ADD_TO_MLQUEUE;
1217
1218         case DID_ERROR:
1219                 if (msg_byte(scmd->result) == COMMAND_COMPLETE &&
1220                     status_byte(scmd->result) == RESERVATION_CONFLICT)
1221                         /*
1222                          * execute reservation conflict processing code
1223                          * lower down
1224                          */
1225                         break;
1226                 /* fallthrough */
1227
1228         case DID_BUS_BUSY:
1229         case DID_PARITY:
1230                 goto maybe_retry;
1231         case DID_TIME_OUT:
1232                 /*
1233                  * when we scan the bus, we get timeout messages for
1234                  * these commands if there is no device available.
1235                  * other hosts report did_no_connect for the same thing.
1236                  */
1237                 if ((scmd->cmnd[0] == TEST_UNIT_READY ||
1238                      scmd->cmnd[0] == INQUIRY)) {
1239                         return SUCCESS;
1240                 } else {
1241                         return FAILED;
1242                 }
1243         case DID_RESET:
1244                 return SUCCESS;
1245         default:
1246                 return FAILED;
1247         }
1248
1249         /*
1250          * next, check the message byte.
1251          */
1252         if (msg_byte(scmd->result) != COMMAND_COMPLETE)
1253                 return FAILED;
1254
1255         /*
1256          * check the status byte to see if this indicates anything special.
1257          */
1258         switch (status_byte(scmd->result)) {
1259         case QUEUE_FULL:
1260                 /*
1261                  * the case of trying to send too many commands to a
1262                  * tagged queueing device.
1263                  */
1264         case BUSY:
1265                 /*
1266                  * device can't talk to us at the moment.  Should only
1267                  * occur (SAM-3) when the task queue is empty, so will cause
1268                  * the empty queue handling to trigger a stall in the
1269                  * device.
1270                  */
1271                 return ADD_TO_MLQUEUE;
1272         case GOOD:
1273         case COMMAND_TERMINATED:
1274         case TASK_ABORTED:
1275                 return SUCCESS;
1276         case CHECK_CONDITION:
1277                 rtn = scsi_check_sense(scmd);
1278                 if (rtn == NEEDS_RETRY)
1279                         goto maybe_retry;
1280                 /* if rtn == FAILED, we have no sense information;
1281                  * returning FAILED will wake the error handler thread
1282                  * to collect the sense and redo the decide
1283                  * disposition */
1284                 return rtn;
1285         case CONDITION_GOOD:
1286         case INTERMEDIATE_GOOD:
1287         case INTERMEDIATE_C_GOOD:
1288         case ACA_ACTIVE:
1289                 /*
1290                  * who knows?  FIXME(eric)
1291                  */
1292                 return SUCCESS;
1293
1294         case RESERVATION_CONFLICT:
1295                 sdev_printk(KERN_INFO, scmd->device,
1296                             "reservation conflict\n");
1297                 return SUCCESS; /* causes immediate i/o error */
1298         default:
1299                 return FAILED;
1300         }
1301         return FAILED;
1302
1303       maybe_retry:
1304
1305         /* we requeue for retry because the error was retryable, and
1306          * the request was not marked fast fail.  Note that above,
1307          * even if the request is marked fast fail, we still requeue
1308          * for queue congestion conditions (QUEUE_FULL or BUSY) */
1309         if ((++scmd->retries) <= scmd->allowed
1310             && !blk_noretry_request(scmd->request)) {
1311                 return NEEDS_RETRY;
1312         } else {
1313                 /*
1314                  * no more retries - report this one back to upper level.
1315                  */
1316                 return SUCCESS;
1317         }
1318 }
1319
1320 /**
1321  * scsi_eh_lock_door - Prevent medium removal for the specified device
1322  * @sdev:       SCSI device to prevent medium removal
1323  *
1324  * Locking:
1325  *      We must be called from process context; scsi_allocate_request()
1326  *      may sleep.
1327  *
1328  * Notes:
1329  *      We queue up an asynchronous "ALLOW MEDIUM REMOVAL" request on the
1330  *      head of the devices request queue, and continue.
1331  *
1332  * Bugs:
1333  *      scsi_allocate_request() may sleep waiting for existing requests to
1334  *      be processed.  However, since we haven't kicked off any request
1335  *      processing for this host, this may deadlock.
1336  *
1337  *      If scsi_allocate_request() fails for what ever reason, we
1338  *      completely forget to lock the door.
1339  **/
1340 static void scsi_eh_lock_door(struct scsi_device *sdev)
1341 {
1342         unsigned char cmnd[MAX_COMMAND_SIZE];
1343
1344         cmnd[0] = ALLOW_MEDIUM_REMOVAL;
1345         cmnd[1] = 0;
1346         cmnd[2] = 0;
1347         cmnd[3] = 0;
1348         cmnd[4] = SCSI_REMOVAL_PREVENT;
1349         cmnd[5] = 0;
1350
1351         scsi_execute_async(sdev, cmnd, 6, DMA_NONE, NULL, 0, 0, 10 * HZ,
1352                            5, NULL, NULL, GFP_KERNEL);
1353 }
1354
1355
1356 /**
1357  * scsi_restart_operations - restart io operations to the specified host.
1358  * @shost:      Host we are restarting.
1359  *
1360  * Notes:
1361  *    When we entered the error handler, we blocked all further i/o to
1362  *    this device.  we need to 'reverse' this process.
1363  **/
1364 static void scsi_restart_operations(struct Scsi_Host *shost)
1365 {
1366         struct scsi_device *sdev;
1367         unsigned long flags;
1368
1369         /*
1370          * If the door was locked, we need to insert a door lock request
1371          * onto the head of the SCSI request queue for the device.  There
1372          * is no point trying to lock the door of an off-line device.
1373          */
1374         shost_for_each_device(sdev, shost) {
1375                 if (scsi_device_online(sdev) && sdev->locked)
1376                         scsi_eh_lock_door(sdev);
1377         }
1378
1379         /*
1380          * next free up anything directly waiting upon the host.  this
1381          * will be requests for character device operations, and also for
1382          * ioctls to queued block devices.
1383          */
1384         SCSI_LOG_ERROR_RECOVERY(3, printk("%s: waking up host to restart\n",
1385                                           __FUNCTION__));
1386
1387         spin_lock_irqsave(shost->host_lock, flags);
1388         if (scsi_host_set_state(shost, SHOST_RUNNING))
1389                 if (scsi_host_set_state(shost, SHOST_CANCEL))
1390                         BUG_ON(scsi_host_set_state(shost, SHOST_DEL));
1391         spin_unlock_irqrestore(shost->host_lock, flags);
1392
1393         wake_up(&shost->host_wait);
1394
1395         /*
1396          * finally we need to re-initiate requests that may be pending.  we will
1397          * have had everything blocked while error handling is taking place, and
1398          * now that error recovery is done, we will need to ensure that these
1399          * requests are started.
1400          */
1401         scsi_run_host_queues(shost);
1402 }
1403
1404 /**
1405  * scsi_eh_ready_devs - check device ready state and recover if not.
1406  * @shost:      host to be recovered.
1407  * @eh_done_q:  list_head for processed commands.
1408  *
1409  **/
1410 static void scsi_eh_ready_devs(struct Scsi_Host *shost,
1411                                struct list_head *work_q,
1412                                struct list_head *done_q)
1413 {
1414         if (!scsi_eh_stu(shost, work_q, done_q))
1415                 if (!scsi_eh_bus_device_reset(shost, work_q, done_q))
1416                         if (!scsi_eh_bus_reset(shost, work_q, done_q))
1417                                 if (!scsi_eh_host_reset(work_q, done_q))
1418                                         scsi_eh_offline_sdevs(work_q, done_q);
1419 }
1420
1421 /**
1422  * scsi_eh_flush_done_q - finish processed commands or retry them.
1423  * @done_q:     list_head of processed commands.
1424  *
1425  **/
1426 void scsi_eh_flush_done_q(struct list_head *done_q)
1427 {
1428         struct scsi_cmnd *scmd, *next;
1429
1430         list_for_each_entry_safe(scmd, next, done_q, eh_entry) {
1431                 list_del_init(&scmd->eh_entry);
1432                 if (scsi_device_online(scmd->device) &&
1433                     !blk_noretry_request(scmd->request) &&
1434                     (++scmd->retries <= scmd->allowed)) {
1435                         SCSI_LOG_ERROR_RECOVERY(3, printk("%s: flush"
1436                                                           " retry cmd: %p\n",
1437                                                           current->comm,
1438                                                           scmd));
1439                                 scsi_queue_insert(scmd, SCSI_MLQUEUE_EH_RETRY);
1440                 } else {
1441                         /*
1442                          * If just we got sense for the device (called
1443                          * scsi_eh_get_sense), scmd->result is already
1444                          * set, do not set DRIVER_TIMEOUT.
1445                          */
1446                         if (!scmd->result)
1447                                 scmd->result |= (DRIVER_TIMEOUT << 24);
1448                         SCSI_LOG_ERROR_RECOVERY(3, printk("%s: flush finish"
1449                                                         " cmd: %p\n",
1450                                                         current->comm, scmd));
1451                         scsi_finish_command(scmd);
1452                 }
1453         }
1454 }
1455 EXPORT_SYMBOL(scsi_eh_flush_done_q);
1456
1457 /**
1458  * scsi_unjam_host - Attempt to fix a host which has a cmd that failed.
1459  * @shost:      Host to unjam.
1460  *
1461  * Notes:
1462  *    When we come in here, we *know* that all commands on the bus have
1463  *    either completed, failed or timed out.  we also know that no further
1464  *    commands are being sent to the host, so things are relatively quiet
1465  *    and we have freedom to fiddle with things as we wish.
1466  *
1467  *    This is only the *default* implementation.  it is possible for
1468  *    individual drivers to supply their own version of this function, and
1469  *    if the maintainer wishes to do this, it is strongly suggested that
1470  *    this function be taken as a template and modified.  this function
1471  *    was designed to correctly handle problems for about 95% of the
1472  *    different cases out there, and it should always provide at least a
1473  *    reasonable amount of error recovery.
1474  *
1475  *    Any command marked 'failed' or 'timeout' must eventually have
1476  *    scsi_finish_cmd() called for it.  we do all of the retry stuff
1477  *    here, so when we restart the host after we return it should have an
1478  *    empty queue.
1479  **/
1480 static void scsi_unjam_host(struct Scsi_Host *shost)
1481 {
1482         unsigned long flags;
1483         LIST_HEAD(eh_work_q);
1484         LIST_HEAD(eh_done_q);
1485
1486         spin_lock_irqsave(shost->host_lock, flags);
1487         list_splice_init(&shost->eh_cmd_q, &eh_work_q);
1488         spin_unlock_irqrestore(shost->host_lock, flags);
1489
1490         SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, &eh_work_q));
1491
1492         if (!scsi_eh_get_sense(&eh_work_q, &eh_done_q))
1493                 if (!scsi_eh_abort_cmds(&eh_work_q, &eh_done_q))
1494                         scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q);
1495
1496         scsi_eh_flush_done_q(&eh_done_q);
1497 }
1498
1499 /**
1500  * scsi_error_handler - SCSI error handler thread
1501  * @data:       Host for which we are running.
1502  *
1503  * Notes:
1504  *    This is the main error handling loop.  This is run as a kernel thread
1505  *    for every SCSI host and handles all error handling activity.
1506  **/
1507 int scsi_error_handler(void *data)
1508 {
1509         struct Scsi_Host *shost = data;
1510
1511         current->flags |= PF_NOFREEZE;
1512
1513         /*
1514          * We use TASK_INTERRUPTIBLE so that the thread is not
1515          * counted against the load average as a running process.
1516          * We never actually get interrupted because kthread_run
1517          * disables singal delivery for the created thread.
1518          */
1519         set_current_state(TASK_INTERRUPTIBLE);
1520         while (!kthread_should_stop()) {
1521                 if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) ||
1522                     shost->host_failed != shost->host_busy) {
1523                         SCSI_LOG_ERROR_RECOVERY(1,
1524                                 printk("Error handler scsi_eh_%d sleeping\n",
1525                                         shost->host_no));
1526                         schedule();
1527                         set_current_state(TASK_INTERRUPTIBLE);
1528                         continue;
1529                 }
1530
1531                 __set_current_state(TASK_RUNNING);
1532                 SCSI_LOG_ERROR_RECOVERY(1,
1533                         printk("Error handler scsi_eh_%d waking up\n",
1534                                 shost->host_no));
1535
1536                 /*
1537                  * We have a host that is failing for some reason.  Figure out
1538                  * what we need to do to get it up and online again (if we can).
1539                  * If we fail, we end up taking the thing offline.
1540                  */
1541                 if (shost->transportt->eh_strategy_handler)
1542                         shost->transportt->eh_strategy_handler(shost);
1543                 else
1544                         scsi_unjam_host(shost);
1545
1546                 /*
1547                  * Note - if the above fails completely, the action is to take
1548                  * individual devices offline and flush the queue of any
1549                  * outstanding requests that may have been pending.  When we
1550                  * restart, we restart any I/O to any other devices on the bus
1551                  * which are still online.
1552                  */
1553                 scsi_restart_operations(shost);
1554                 set_current_state(TASK_INTERRUPTIBLE);
1555         }
1556         __set_current_state(TASK_RUNNING);
1557
1558         SCSI_LOG_ERROR_RECOVERY(1,
1559                 printk("Error handler scsi_eh_%d exiting\n", shost->host_no));
1560         shost->ehandler = NULL;
1561         return 0;
1562 }
1563
1564 /*
1565  * Function:    scsi_report_bus_reset()
1566  *
1567  * Purpose:     Utility function used by low-level drivers to report that
1568  *              they have observed a bus reset on the bus being handled.
1569  *
1570  * Arguments:   shost       - Host in question
1571  *              channel     - channel on which reset was observed.
1572  *
1573  * Returns:     Nothing
1574  *
1575  * Lock status: Host lock must be held.
1576  *
1577  * Notes:       This only needs to be called if the reset is one which
1578  *              originates from an unknown location.  Resets originated
1579  *              by the mid-level itself don't need to call this, but there
1580  *              should be no harm.
1581  *
1582  *              The main purpose of this is to make sure that a CHECK_CONDITION
1583  *              is properly treated.
1584  */
1585 void scsi_report_bus_reset(struct Scsi_Host *shost, int channel)
1586 {
1587         struct scsi_device *sdev;
1588
1589         __shost_for_each_device(sdev, shost) {
1590                 if (channel == sdev_channel(sdev)) {
1591                         sdev->was_reset = 1;
1592                         sdev->expecting_cc_ua = 1;
1593                 }
1594         }
1595 }
1596 EXPORT_SYMBOL(scsi_report_bus_reset);
1597
1598 /*
1599  * Function:    scsi_report_device_reset()
1600  *
1601  * Purpose:     Utility function used by low-level drivers to report that
1602  *              they have observed a device reset on the device being handled.
1603  *
1604  * Arguments:   shost       - Host in question
1605  *              channel     - channel on which reset was observed
1606  *              target      - target on which reset was observed
1607  *
1608  * Returns:     Nothing
1609  *
1610  * Lock status: Host lock must be held
1611  *
1612  * Notes:       This only needs to be called if the reset is one which
1613  *              originates from an unknown location.  Resets originated
1614  *              by the mid-level itself don't need to call this, but there
1615  *              should be no harm.
1616  *
1617  *              The main purpose of this is to make sure that a CHECK_CONDITION
1618  *              is properly treated.
1619  */
1620 void scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target)
1621 {
1622         struct scsi_device *sdev;
1623
1624         __shost_for_each_device(sdev, shost) {
1625                 if (channel == sdev_channel(sdev) &&
1626                     target == sdev_id(sdev)) {
1627                         sdev->was_reset = 1;
1628                         sdev->expecting_cc_ua = 1;
1629                 }
1630         }
1631 }
1632 EXPORT_SYMBOL(scsi_report_device_reset);
1633
1634 static void
1635 scsi_reset_provider_done_command(struct scsi_cmnd *scmd)
1636 {
1637 }
1638
1639 /*
1640  * Function:    scsi_reset_provider
1641  *
1642  * Purpose:     Send requested reset to a bus or device at any phase.
1643  *
1644  * Arguments:   device  - device to send reset to
1645  *              flag - reset type (see scsi.h)
1646  *
1647  * Returns:     SUCCESS/FAILURE.
1648  *
1649  * Notes:       This is used by the SCSI Generic driver to provide
1650  *              Bus/Device reset capability.
1651  */
1652 int
1653 scsi_reset_provider(struct scsi_device *dev, int flag)
1654 {
1655         struct scsi_cmnd *scmd = scsi_get_command(dev, GFP_KERNEL);
1656         struct request req;
1657         int rtn;
1658
1659         scmd->request = &req;
1660         memset(&scmd->eh_timeout, 0, sizeof(scmd->eh_timeout));
1661         scmd->request->rq_status        = RQ_SCSI_BUSY;
1662
1663         memset(&scmd->cmnd, '\0', sizeof(scmd->cmnd));
1664     
1665         scmd->scsi_done         = scsi_reset_provider_done_command;
1666         scmd->done                      = NULL;
1667         scmd->buffer                    = NULL;
1668         scmd->bufflen                   = 0;
1669         scmd->request_buffer            = NULL;
1670         scmd->request_bufflen           = 0;
1671
1672         scmd->cmd_len                   = 0;
1673
1674         scmd->sc_data_direction         = DMA_BIDIRECTIONAL;
1675         scmd->sc_request                = NULL;
1676         scmd->sc_magic                  = SCSI_CMND_MAGIC;
1677
1678         init_timer(&scmd->eh_timeout);
1679
1680         /*
1681          * Sometimes the command can get back into the timer chain,
1682          * so use the pid as an identifier.
1683          */
1684         scmd->pid                       = 0;
1685
1686         switch (flag) {
1687         case SCSI_TRY_RESET_DEVICE:
1688                 rtn = scsi_try_bus_device_reset(scmd);
1689                 if (rtn == SUCCESS)
1690                         break;
1691                 /* FALLTHROUGH */
1692         case SCSI_TRY_RESET_BUS:
1693                 rtn = scsi_try_bus_reset(scmd);
1694                 if (rtn == SUCCESS)
1695                         break;
1696                 /* FALLTHROUGH */
1697         case SCSI_TRY_RESET_HOST:
1698                 rtn = scsi_try_host_reset(scmd);
1699                 break;
1700         default:
1701                 rtn = FAILED;
1702         }
1703
1704         scsi_next_command(scmd);
1705         return rtn;
1706 }
1707 EXPORT_SYMBOL(scsi_reset_provider);
1708
1709 /**
1710  * scsi_normalize_sense - normalize main elements from either fixed or
1711  *                      descriptor sense data format into a common format.
1712  *
1713  * @sense_buffer:       byte array containing sense data returned by device
1714  * @sb_len:             number of valid bytes in sense_buffer
1715  * @sshdr:              pointer to instance of structure that common
1716  *                      elements are written to.
1717  *
1718  * Notes:
1719  *      The "main elements" from sense data are: response_code, sense_key,
1720  *      asc, ascq and additional_length (only for descriptor format).
1721  *
1722  *      Typically this function can be called after a device has
1723  *      responded to a SCSI command with the CHECK_CONDITION status.
1724  *
1725  * Return value:
1726  *      1 if valid sense data information found, else 0;
1727  **/
1728 int scsi_normalize_sense(const u8 *sense_buffer, int sb_len,
1729                          struct scsi_sense_hdr *sshdr)
1730 {
1731         if (!sense_buffer || !sb_len)
1732                 return 0;
1733
1734         memset(sshdr, 0, sizeof(struct scsi_sense_hdr));
1735
1736         sshdr->response_code = (sense_buffer[0] & 0x7f);
1737
1738         if (!scsi_sense_valid(sshdr))
1739                 return 0;
1740
1741         if (sshdr->response_code >= 0x72) {
1742                 /*
1743                  * descriptor format
1744                  */
1745                 if (sb_len > 1)
1746                         sshdr->sense_key = (sense_buffer[1] & 0xf);
1747                 if (sb_len > 2)
1748                         sshdr->asc = sense_buffer[2];
1749                 if (sb_len > 3)
1750                         sshdr->ascq = sense_buffer[3];
1751                 if (sb_len > 7)
1752                         sshdr->additional_length = sense_buffer[7];
1753         } else {
1754                 /* 
1755                  * fixed format
1756                  */
1757                 if (sb_len > 2)
1758                         sshdr->sense_key = (sense_buffer[2] & 0xf);
1759                 if (sb_len > 7) {
1760                         sb_len = (sb_len < (sense_buffer[7] + 8)) ?
1761                                          sb_len : (sense_buffer[7] + 8);
1762                         if (sb_len > 12)
1763                                 sshdr->asc = sense_buffer[12];
1764                         if (sb_len > 13)
1765                                 sshdr->ascq = sense_buffer[13];
1766                 }
1767         }
1768
1769         return 1;
1770 }
1771 EXPORT_SYMBOL(scsi_normalize_sense);
1772
1773 int scsi_request_normalize_sense(struct scsi_request *sreq,
1774                                  struct scsi_sense_hdr *sshdr)
1775 {
1776         return scsi_normalize_sense(sreq->sr_sense_buffer,
1777                         sizeof(sreq->sr_sense_buffer), sshdr);
1778 }
1779 EXPORT_SYMBOL(scsi_request_normalize_sense);
1780
1781 int scsi_command_normalize_sense(struct scsi_cmnd *cmd,
1782                                  struct scsi_sense_hdr *sshdr)
1783 {
1784         return scsi_normalize_sense(cmd->sense_buffer,
1785                         sizeof(cmd->sense_buffer), sshdr);
1786 }
1787 EXPORT_SYMBOL(scsi_command_normalize_sense);
1788
1789 /**
1790  * scsi_sense_desc_find - search for a given descriptor type in
1791  *                      descriptor sense data format.
1792  *
1793  * @sense_buffer:       byte array of descriptor format sense data
1794  * @sb_len:             number of valid bytes in sense_buffer
1795  * @desc_type:          value of descriptor type to find
1796  *                      (e.g. 0 -> information)
1797  *
1798  * Notes:
1799  *      only valid when sense data is in descriptor format
1800  *
1801  * Return value:
1802  *      pointer to start of (first) descriptor if found else NULL
1803  **/
1804 const u8 * scsi_sense_desc_find(const u8 * sense_buffer, int sb_len,
1805                                 int desc_type)
1806 {
1807         int add_sen_len, add_len, desc_len, k;
1808         const u8 * descp;
1809
1810         if ((sb_len < 8) || (0 == (add_sen_len = sense_buffer[7])))
1811                 return NULL;
1812         if ((sense_buffer[0] < 0x72) || (sense_buffer[0] > 0x73))
1813                 return NULL;
1814         add_sen_len = (add_sen_len < (sb_len - 8)) ?
1815                         add_sen_len : (sb_len - 8);
1816         descp = &sense_buffer[8];
1817         for (desc_len = 0, k = 0; k < add_sen_len; k += desc_len) {
1818                 descp += desc_len;
1819                 add_len = (k < (add_sen_len - 1)) ? descp[1]: -1;
1820                 desc_len = add_len + 2;
1821                 if (descp[0] == desc_type)
1822                         return descp;
1823                 if (add_len < 0) // short descriptor ??
1824                         break;
1825         }
1826         return NULL;
1827 }
1828 EXPORT_SYMBOL(scsi_sense_desc_find);
1829
1830 /**
1831  * scsi_get_sense_info_fld - attempts to get information field from
1832  *                      sense data (either fixed or descriptor format)
1833  *
1834  * @sense_buffer:       byte array of sense data
1835  * @sb_len:             number of valid bytes in sense_buffer
1836  * @info_out:           pointer to 64 integer where 8 or 4 byte information
1837  *                      field will be placed if found.
1838  *
1839  * Return value:
1840  *      1 if information field found, 0 if not found.
1841  **/
1842 int scsi_get_sense_info_fld(const u8 * sense_buffer, int sb_len,
1843                             u64 * info_out)
1844 {
1845         int j;
1846         const u8 * ucp;
1847         u64 ull;
1848
1849         if (sb_len < 7)
1850                 return 0;
1851         switch (sense_buffer[0] & 0x7f) {
1852         case 0x70:
1853         case 0x71:
1854                 if (sense_buffer[0] & 0x80) {
1855                         *info_out = (sense_buffer[3] << 24) +
1856                                     (sense_buffer[4] << 16) +
1857                                     (sense_buffer[5] << 8) + sense_buffer[6];
1858                         return 1;
1859                 } else
1860                         return 0;
1861         case 0x72:
1862         case 0x73:
1863                 ucp = scsi_sense_desc_find(sense_buffer, sb_len,
1864                                            0 /* info desc */);
1865                 if (ucp && (0xa == ucp[1])) {
1866                         ull = 0;
1867                         for (j = 0; j < 8; ++j) {
1868                                 if (j > 0)
1869                                         ull <<= 8;
1870                                 ull |= ucp[4 + j];
1871                         }
1872                         *info_out = ull;
1873                         return 1;
1874                 } else
1875                         return 0;
1876         default:
1877                 return 0;
1878         }
1879 }
1880 EXPORT_SYMBOL(scsi_get_sense_info_fld);