scsi_error.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:59k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  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.  */
  10. #define __NO_VERSION__
  11. #include <linux/module.h>
  12. #include <linux/sched.h>
  13. #include <linux/timer.h>
  14. #include <linux/string.h>
  15. #include <linux/slab.h>
  16. #include <linux/ioport.h>
  17. #include <linux/kernel.h>
  18. #include <linux/stat.h>
  19. #include <linux/blk.h>
  20. #include <linux/interrupt.h>
  21. #include <linux/delay.h>
  22. #include <linux/smp_lock.h>
  23. #define __KERNEL_SYSCALLS__
  24. #include <linux/unistd.h>
  25. #include <asm/system.h>
  26. #include <asm/irq.h>
  27. #include <asm/dma.h>
  28. #include "scsi.h"
  29. #include "hosts.h"
  30. #include "constants.h"
  31. /*
  32.  * We must always allow SHUTDOWN_SIGS.  Even if we are not a module,
  33.  * the host drivers that we are using may be loaded as modules, and
  34.  * when we unload these,  we need to ensure that the error handler thread
  35.  * can be shut down.
  36.  *
  37.  * Note - when we unload a module, we send a SIGHUP.  We mustn't
  38.  * enable SIGTERM, as this is how the init shuts things down when you
  39.  * go to single-user mode.  For that matter, init also sends SIGKILL,
  40.  * so we mustn't enable that one either.  We use SIGHUP instead.  Other
  41.  * options would be SIGPWR, I suppose.
  42.  */
  43. #define SHUTDOWN_SIGS (sigmask(SIGHUP))
  44. #ifdef DEBUG
  45. #define SENSE_TIMEOUT SCSI_TIMEOUT
  46. #define ABORT_TIMEOUT SCSI_TIMEOUT
  47. #define RESET_TIMEOUT SCSI_TIMEOUT
  48. #else
  49. #define SENSE_TIMEOUT (10*HZ)
  50. #define RESET_TIMEOUT (2*HZ)
  51. #define ABORT_TIMEOUT (15*HZ)
  52. #endif
  53. #define STATIC
  54. /*
  55.  * These should *probably* be handled by the host itself.
  56.  * Since it is allowed to sleep, it probably should.
  57.  */
  58. #define BUS_RESET_SETTLE_TIME   5*HZ
  59. #define HOST_RESET_SETTLE_TIME  10*HZ
  60. static const char RCSid[] = "$Header: /mnt/ide/home/eric/CVSROOT/linux/drivers/scsi/scsi_error.c,v 1.10 1997/12/08 04:50:35 eric Exp $";
  61. STATIC int scsi_check_sense(Scsi_Cmnd * SCpnt);
  62. STATIC int scsi_request_sense(Scsi_Cmnd *);
  63. STATIC void scsi_send_eh_cmnd(Scsi_Cmnd * SCpnt, int timeout);
  64. STATIC int scsi_try_to_abort_command(Scsi_Cmnd *, int);
  65. STATIC int scsi_test_unit_ready(Scsi_Cmnd *);
  66. STATIC int scsi_try_bus_device_reset(Scsi_Cmnd *, int timeout);
  67. STATIC int scsi_try_bus_reset(Scsi_Cmnd *);
  68. STATIC int scsi_try_host_reset(Scsi_Cmnd *);
  69. STATIC int scsi_unit_is_ready(Scsi_Cmnd *);
  70. STATIC void scsi_eh_action_done(Scsi_Cmnd *, int);
  71. STATIC int scsi_eh_retry_command(Scsi_Cmnd *);
  72. STATIC int scsi_eh_completed_normally(Scsi_Cmnd * SCpnt);
  73. STATIC void scsi_restart_operations(struct Scsi_Host *);
  74. STATIC void scsi_eh_finish_command(Scsi_Cmnd ** SClist, Scsi_Cmnd * SCpnt);
  75. /*
  76.  * Function:    scsi_add_timer()
  77.  *
  78.  * Purpose:     Start timeout timer for a single scsi command.
  79.  *
  80.  * Arguments:   SCset   - command that is about to start running.
  81.  *              timeout - amount of time to allow this command to run.
  82.  *              complete - timeout function to call if timer isn't
  83.  *                      canceled.
  84.  *
  85.  * Returns:     Nothing
  86.  *
  87.  * Notes:       This should be turned into an inline function.
  88.  *
  89.  * More Notes:  Each scsi command has it's own timer, and as it is added to
  90.  *              the queue, we set up the timer.  When the command completes,
  91.  *              we cancel the timer.  Pretty simple, really, especially
  92.  *              compared to the old way of handling this crap.
  93.  */
  94. void scsi_add_timer(Scsi_Cmnd * SCset,
  95.     int timeout,
  96.     void (*complete) (Scsi_Cmnd *))
  97. {
  98. /*
  99.  * If the clock was already running for this command, then
  100.  * first delete the timer.  The timer handling code gets rather
  101.  * confused if we don't do this.
  102.  */
  103. if (SCset->eh_timeout.function != NULL) {
  104. del_timer(&SCset->eh_timeout);
  105. }
  106. SCset->eh_timeout.data = (unsigned long) SCset;
  107. SCset->eh_timeout.expires = jiffies + timeout;
  108. SCset->eh_timeout.function = (void (*)(unsigned long)) complete;
  109. SCset->done_late = 0;
  110. SCSI_LOG_ERROR_RECOVERY(5, printk("Adding timer for command %p at %d (%p)n", SCset, timeout, complete));
  111. add_timer(&SCset->eh_timeout);
  112. }
  113. /*
  114.  * Function:    scsi_delete_timer()
  115.  *
  116.  * Purpose:     Delete/cancel timer for a given function.
  117.  *
  118.  * Arguments:   SCset   - command that we are canceling timer for.
  119.  *
  120.  * Returns:     1 if we were able to detach the timer.  0 if we
  121.  *              blew it, and the timer function has already started
  122.  *              to run.
  123.  *
  124.  * Notes:       This should be turned into an inline function.
  125.  */
  126. int scsi_delete_timer(Scsi_Cmnd * SCset)
  127. {
  128. int rtn;
  129. rtn = del_timer(&SCset->eh_timeout);
  130. SCSI_LOG_ERROR_RECOVERY(5, printk("Clearing timer for command %p %dn", SCset, rtn));
  131. SCset->eh_timeout.data = (unsigned long) NULL;
  132. SCset->eh_timeout.function = NULL;
  133. return rtn;
  134. }
  135. /*
  136.  * Function:    scsi_times_out()
  137.  *
  138.  * Purpose:     Timeout function for normal scsi commands..
  139.  *
  140.  * Arguments:   SCpnt   - command that is timing out.
  141.  *
  142.  * Returns:     Nothing.
  143.  *
  144.  * Notes:       We do not need to lock this.  There is the potential for
  145.  *              a race only in that the normal completion handling might
  146.  *              run, but if the normal completion function determines
  147.  *              that the timer has already fired, then it mustn't do
  148.  *              anything.
  149.  */
  150. void scsi_times_out(Scsi_Cmnd * SCpnt)
  151. {
  152. /* 
  153.  * Notify the low-level code that this operation failed and we are
  154.  * reposessing the command.  
  155.  */
  156. #ifdef ERIC_neverdef
  157. /*
  158.  * FIXME(eric)
  159.  * Allow the host adapter to push a queue ordering tag
  160.  * out to the bus to force the command in question to complete.
  161.  * If the host wants to do this, then we just restart the timer
  162.  * for the command.  Before we really do this, some real thought
  163.  * as to the optimum way to handle this should be done.  We *do*
  164.  * need to force ordering every so often to ensure that all requests
  165.  * do eventually complete, but I am not sure if this is the best way
  166.  * to actually go about it.
  167.  *
  168.  * Better yet, force a sync here, but don't block since we are in an
  169.  * interrupt.
  170.  */
  171. if (SCpnt->host->hostt->eh_ordered_queue_tag) {
  172. if ((*SCpnt->host->hostt->eh_ordered_queue_tag) (SCpnt)) {
  173. scsi_add_timer(SCpnt, SCpnt->internal_timeout,
  174.        scsi_times_out);
  175. return;
  176. }
  177. }
  178. /*
  179.  * FIXME(eric) - add a second special interface to handle this
  180.  * case.  Ideally that interface can also be used to request
  181.  * a queu
  182.  */
  183. if (SCpnt->host->can_queue) {
  184. SCpnt->host->hostt->queuecommand(SCpnt, NULL);
  185. }
  186. #endif
  187. /* Set the serial_number_at_timeout to the current serial_number */
  188. SCpnt->serial_number_at_timeout = SCpnt->serial_number;
  189. SCpnt->eh_state = FAILED;
  190. SCpnt->state = SCSI_STATE_TIMEOUT;
  191. SCpnt->owner = SCSI_OWNER_ERROR_HANDLER;
  192. SCpnt->host->in_recovery = 1;
  193. SCpnt->host->host_failed++;
  194. SCSI_LOG_TIMEOUT(3, printk("Command timed out active=%d busy=%d failed=%dn",
  195.    atomic_read(&SCpnt->host->host_active),
  196.    SCpnt->host->host_busy,
  197.    SCpnt->host->host_failed));
  198. /*
  199.  * If the host is having troubles, then look to see if this was the last
  200.  * command that might have failed.  If so, wake up the error handler.
  201.  */
  202. if( SCpnt->host->eh_wait == NULL ) {
  203. panic("Error handler thread not present at %p %p %s %d", 
  204.       SCpnt, SCpnt->host, __FILE__, __LINE__);
  205. }
  206. if (SCpnt->host->host_busy == SCpnt->host->host_failed) {
  207. up(SCpnt->host->eh_wait);
  208. }
  209. }
  210. /*
  211.  * Function     scsi_block_when_processing_errors
  212.  *
  213.  * Purpose:     Prevent more commands from being queued while error recovery
  214.  *              is taking place.
  215.  *
  216.  * Arguments:   SDpnt - device on which we are performing recovery.
  217.  *
  218.  * Returns:     FALSE   The device was taken offline by error recovery.
  219.  *              TRUE    OK to proceed.
  220.  *
  221.  * Notes:       We block until the host is out of error recovery, and then
  222.  *              check to see whether the host or the device is offline.
  223.  */
  224. int scsi_block_when_processing_errors(Scsi_Device * SDpnt)
  225. {
  226. SCSI_SLEEP(&SDpnt->host->host_wait, SDpnt->host->in_recovery);
  227. SCSI_LOG_ERROR_RECOVERY(5, printk("Open returning %dn", SDpnt->online));
  228. return SDpnt->online;
  229. }
  230. /*
  231.  * Function:    scsi_eh_times_out()
  232.  *
  233.  * Purpose:     Timeout function for error handling.
  234.  *
  235.  * Arguments:   SCpnt   - command that is timing out.
  236.  *
  237.  * Returns:     Nothing.
  238.  *
  239.  * Notes:       During error handling, the kernel thread will be sleeping
  240.  *              waiting for some action to complete on the device.  Our only
  241.  *              job is to record that it timed out, and to wake up the
  242.  *              thread.
  243.  */
  244. STATIC
  245. void scsi_eh_times_out(Scsi_Cmnd * SCpnt)
  246. {
  247. SCpnt->eh_state = SCSI_STATE_TIMEOUT;
  248. SCSI_LOG_ERROR_RECOVERY(5, printk("In scsi_eh_times_out %pn", SCpnt));
  249. if (SCpnt->host->eh_action != NULL)
  250. up(SCpnt->host->eh_action);
  251. else
  252. printk("Missing scsi error handler threadn");
  253. }
  254. /*
  255.  * Function:    scsi_eh_done()
  256.  *
  257.  * Purpose:     Completion function for error handling.
  258.  *
  259.  * Arguments:   SCpnt   - command that is timing out.
  260.  *
  261.  * Returns:     Nothing.
  262.  *
  263.  * Notes:       During error handling, the kernel thread will be sleeping
  264.  *              waiting for some action to complete on the device.  Our only
  265.  *              job is to record that the action completed, and to wake up the
  266.  *              thread.
  267.  */
  268. STATIC
  269. void scsi_eh_done(Scsi_Cmnd * SCpnt)
  270. {
  271. int     rtn;
  272. /*
  273.  * If the timeout handler is already running, then just set the
  274.  * flag which says we finished late, and return.  We have no
  275.  * way of stopping the timeout handler from running, so we must
  276.  * always defer to it.
  277.  */
  278. rtn = del_timer(&SCpnt->eh_timeout);
  279. if (!rtn) {
  280. SCpnt->done_late = 1;
  281. return;
  282. }
  283. SCpnt->request.rq_status = RQ_SCSI_DONE;
  284. SCpnt->owner = SCSI_OWNER_ERROR_HANDLER;
  285. SCpnt->eh_state = SUCCESS;
  286. SCSI_LOG_ERROR_RECOVERY(5, printk("In eh_done %p result:%xn", SCpnt,
  287.   SCpnt->result));
  288. if (SCpnt->host->eh_action != NULL)
  289. up(SCpnt->host->eh_action);
  290. }
  291. /*
  292.  * Function:    scsi_eh_action_done()
  293.  *
  294.  * Purpose:     Completion function for error handling.
  295.  *
  296.  * Arguments:   SCpnt   - command that is timing out.
  297.  *              answer  - boolean that indicates whether operation succeeded.
  298.  *
  299.  * Returns:     Nothing.
  300.  *
  301.  * Notes:       This callback is only used for abort and reset operations.
  302.  */
  303. STATIC
  304. void scsi_eh_action_done(Scsi_Cmnd * SCpnt, int answer)
  305. {
  306. SCpnt->request.rq_status = RQ_SCSI_DONE;
  307. SCpnt->owner = SCSI_OWNER_ERROR_HANDLER;
  308. SCpnt->eh_state = (answer ? SUCCESS : FAILED);
  309. if (SCpnt->host->eh_action != NULL)
  310. up(SCpnt->host->eh_action);
  311. }
  312. /*
  313.  * Function:  scsi_sense_valid()
  314.  *
  315.  * Purpose:     Determine whether a host has automatically obtained sense
  316.  *              information or not.  If we have it, then give a recommendation
  317.  *              as to what we should do next.
  318.  */
  319. int scsi_sense_valid(Scsi_Cmnd * SCpnt)
  320. {
  321. if (((SCpnt->sense_buffer[0] & 0x70) >> 4) != 7) {
  322. return FALSE;
  323. }
  324. return TRUE;
  325. }
  326. /*
  327.  * Function:  scsi_eh_retry_command()
  328.  *
  329.  * Purpose:     Retry the original command
  330.  *
  331.  * Returns:     SUCCESS - we were able to get the sense data.
  332.  *              FAILED  - we were not able to get the sense data.
  333.  * 
  334.  * Notes:       This function will *NOT* return until the command either
  335.  *              times out, or it completes.
  336.  */
  337. STATIC int scsi_eh_retry_command(Scsi_Cmnd * SCpnt)
  338. {
  339. memcpy((void *) SCpnt->cmnd, (void *) SCpnt->data_cmnd,
  340.        sizeof(SCpnt->data_cmnd));
  341. SCpnt->request_buffer = SCpnt->buffer;
  342. SCpnt->request_bufflen = SCpnt->bufflen;
  343. SCpnt->use_sg = SCpnt->old_use_sg;
  344. SCpnt->cmd_len = SCpnt->old_cmd_len;
  345. SCpnt->sc_data_direction = SCpnt->sc_old_data_direction;
  346. SCpnt->underflow = SCpnt->old_underflow;
  347. scsi_send_eh_cmnd(SCpnt, SCpnt->timeout_per_command);
  348. /*
  349.  * Hey, we are done.  Let's look to see what happened.
  350.  */
  351. return SCpnt->eh_state;
  352. }
  353. /*
  354.  * Function:  scsi_request_sense()
  355.  *
  356.  * Purpose:     Request sense data from a particular target.
  357.  *
  358.  * Returns:     SUCCESS - we were able to get the sense data.
  359.  *              FAILED  - we were not able to get the sense data.
  360.  * 
  361.  * Notes:       Some hosts automatically obtain this information, others
  362.  *              require that we obtain it on our own.
  363.  *
  364.  *              This function will *NOT* return until the command either
  365.  *              times out, or it completes.
  366.  */
  367. STATIC int scsi_request_sense(Scsi_Cmnd * SCpnt)
  368. {
  369. static unsigned char generic_sense[6] =
  370. {REQUEST_SENSE, 0, 0, 0, 255, 0};
  371. unsigned char scsi_result0[256], *scsi_result = NULL;
  372. int saved_result;
  373. ASSERT_LOCK(&io_request_lock, 0);
  374. memcpy((void *) SCpnt->cmnd, (void *) generic_sense,
  375.        sizeof(generic_sense));
  376. if (SCpnt->device->scsi_level <= SCSI_2)
  377. SCpnt->cmnd[1] = SCpnt->lun << 5;
  378. scsi_result = (!SCpnt->host->hostt->unchecked_isa_dma)
  379.     ? &scsi_result0[0] : kmalloc(512, GFP_ATOMIC | GFP_DMA);
  380. if (scsi_result == NULL) {
  381. printk("cannot allocate scsi_result in scsi_request_sense.n");
  382. return FAILED;
  383. }
  384. /*
  385.  * Zero the sense buffer.  Some host adapters automatically always request
  386.  * sense, so it is not a good idea that SCpnt->request_buffer and
  387.  * SCpnt->sense_buffer point to the same address (DB).
  388.  * 0 is not a valid sense code. 
  389.  */
  390. memset((void *) SCpnt->sense_buffer, 0, sizeof(SCpnt->sense_buffer));
  391. memset((void *) scsi_result, 0, 256);
  392. saved_result = SCpnt->result;
  393. SCpnt->request_buffer = scsi_result;
  394. SCpnt->request_bufflen = 256;
  395. SCpnt->use_sg = 0;
  396. SCpnt->cmd_len = COMMAND_SIZE(SCpnt->cmnd[0]);
  397. SCpnt->sc_data_direction = SCSI_DATA_READ;
  398. SCpnt->underflow = 0;
  399. scsi_send_eh_cmnd(SCpnt, SENSE_TIMEOUT);
  400. /* Last chance to have valid sense data */
  401. if (!scsi_sense_valid(SCpnt))
  402. memcpy((void *) SCpnt->sense_buffer,
  403.        SCpnt->request_buffer,
  404.        sizeof(SCpnt->sense_buffer));
  405. if (scsi_result != &scsi_result0[0] && scsi_result != NULL)
  406. kfree(scsi_result);
  407. /*
  408.  * When we eventually call scsi_finish, we really wish to complete
  409.  * the original request, so let's restore the original data. (DB)
  410.  */
  411. memcpy((void *) SCpnt->cmnd, (void *) SCpnt->data_cmnd,
  412.        sizeof(SCpnt->data_cmnd));
  413. SCpnt->result = saved_result;
  414. SCpnt->request_buffer = SCpnt->buffer;
  415. SCpnt->request_bufflen = SCpnt->bufflen;
  416. SCpnt->use_sg = SCpnt->old_use_sg;
  417. SCpnt->cmd_len = SCpnt->old_cmd_len;
  418. SCpnt->sc_data_direction = SCpnt->sc_old_data_direction;
  419. SCpnt->underflow = SCpnt->old_underflow;
  420. /*
  421.  * Hey, we are done.  Let's look to see what happened.
  422.  */
  423. return SCpnt->eh_state;
  424. }
  425. /*
  426.  * Function:  scsi_test_unit_ready()
  427.  *
  428.  * Purpose:     Run test unit ready command to see if the device is talking to us or not.
  429.  *
  430.  */
  431. STATIC int scsi_test_unit_ready(Scsi_Cmnd * SCpnt)
  432. {
  433. static unsigned char tur_command[6] =
  434. {TEST_UNIT_READY, 0, 0, 0, 0, 0};
  435. memcpy((void *) SCpnt->cmnd, (void *) tur_command,
  436.        sizeof(tur_command));
  437. if (SCpnt->device->scsi_level <= SCSI_2)
  438. SCpnt->cmnd[1] = SCpnt->lun << 5;
  439. /*
  440.  * Zero the sense buffer.  The SCSI spec mandates that any
  441.  * untransferred sense data should be interpreted as being zero.
  442.  */
  443. memset((void *) SCpnt->sense_buffer, 0, sizeof(SCpnt->sense_buffer));
  444. SCpnt->request_buffer = NULL;
  445. SCpnt->request_bufflen = 0;
  446. SCpnt->use_sg = 0;
  447. SCpnt->cmd_len = COMMAND_SIZE(SCpnt->cmnd[0]);
  448. SCpnt->underflow = 0;
  449. SCpnt->sc_data_direction = SCSI_DATA_NONE;
  450. scsi_send_eh_cmnd(SCpnt, SENSE_TIMEOUT);
  451. /*
  452.  * When we eventually call scsi_finish, we really wish to complete
  453.  * the original request, so let's restore the original data. (DB)
  454.  */
  455. memcpy((void *) SCpnt->cmnd, (void *) SCpnt->data_cmnd,
  456.        sizeof(SCpnt->data_cmnd));
  457. SCpnt->request_buffer = SCpnt->buffer;
  458. SCpnt->request_bufflen = SCpnt->bufflen;
  459. SCpnt->use_sg = SCpnt->old_use_sg;
  460. SCpnt->cmd_len = SCpnt->old_cmd_len;
  461. SCpnt->sc_data_direction = SCpnt->sc_old_data_direction;
  462. SCpnt->underflow = SCpnt->old_underflow;
  463. /*
  464.  * Hey, we are done.  Let's look to see what happened.
  465.  */
  466. SCSI_LOG_ERROR_RECOVERY(3,
  467. printk("scsi_test_unit_ready: SCpnt %p eh_state %xn",
  468. SCpnt, SCpnt->eh_state));
  469. return SCpnt->eh_state;
  470. }
  471. /*
  472.  * This would normally need to get the IO request lock,
  473.  * but as it doesn't actually touch anything that needs
  474.  * to be locked we can avoid the lock here..
  475.  */
  476. STATIC
  477. void scsi_sleep_done(struct semaphore *sem)
  478. {
  479. if (sem != NULL) {
  480. up(sem);
  481. }
  482. }
  483. void scsi_sleep(int timeout)
  484. {
  485. DECLARE_MUTEX_LOCKED(sem);
  486. struct timer_list timer;
  487. init_timer(&timer);
  488. timer.data = (unsigned long) &sem;
  489. timer.expires = jiffies + timeout;
  490. timer.function = (void (*)(unsigned long)) scsi_sleep_done;
  491. SCSI_LOG_ERROR_RECOVERY(5, printk("Sleeping for timer tics %dn", timeout));
  492. add_timer(&timer);
  493. down(&sem);
  494. del_timer(&timer);
  495. }
  496. /*
  497.  * Function:  scsi_send_eh_cmnd
  498.  *
  499.  * Purpose:     Send a command out to a device as part of error recovery.
  500.  *
  501.  * Notes:       The initialization of the structures is quite a bit different
  502.  *              in this case, and furthermore, there is a different completion
  503.  *              handler.
  504.  */
  505. STATIC void scsi_send_eh_cmnd(Scsi_Cmnd * SCpnt, int timeout)
  506. {
  507. unsigned long flags;
  508. struct Scsi_Host *host;
  509. ASSERT_LOCK(&io_request_lock, 0);
  510. host = SCpnt->host;
  511.       retry:
  512. /*
  513.  * We will use a queued command if possible, otherwise we will emulate the
  514.  * queuing and calling of completion function ourselves.
  515.  */
  516. SCpnt->owner = SCSI_OWNER_LOWLEVEL;
  517. if (host->can_queue) {
  518. DECLARE_MUTEX_LOCKED(sem);
  519. SCpnt->eh_state = SCSI_STATE_QUEUED;
  520. scsi_add_timer(SCpnt, timeout, scsi_eh_times_out);
  521. /*
  522.  * Set up the semaphore so we wait for the command to complete.
  523.  */
  524. SCpnt->host->eh_action = &sem;
  525. SCpnt->request.rq_status = RQ_SCSI_BUSY;
  526. spin_lock_irqsave(&io_request_lock, flags);
  527. host->hostt->queuecommand(SCpnt, scsi_eh_done);
  528. spin_unlock_irqrestore(&io_request_lock, flags);
  529. down(&sem);
  530. SCpnt->host->eh_action = NULL;
  531. /*
  532.  * See if timeout.  If so, tell the host to forget about it.
  533.  * In other words, we don't want a callback any more.
  534.  */
  535. if (SCpnt->eh_state == SCSI_STATE_TIMEOUT) {
  536.                         SCpnt->owner = SCSI_OWNER_LOWLEVEL;
  537. /*
  538.  * As far as the low level driver is
  539.  * concerned, this command is still active, so
  540.  * we must give the low level driver a chance
  541.  * to abort it. (DB) 
  542.  *
  543.  * FIXME(eric) - we are not tracking whether we could
  544.  * abort a timed out command or not.  Not sure how
  545.  * we should treat them differently anyways.
  546.  */
  547. spin_lock_irqsave(&io_request_lock, flags);
  548. if (SCpnt->host->hostt->eh_abort_handler)
  549. SCpnt->host->hostt->eh_abort_handler(SCpnt);
  550. spin_unlock_irqrestore(&io_request_lock, flags);
  551. SCpnt->request.rq_status = RQ_SCSI_DONE;
  552. SCpnt->owner = SCSI_OWNER_ERROR_HANDLER;
  553. SCpnt->eh_state = FAILED;
  554. }
  555. SCSI_LOG_ERROR_RECOVERY(5, printk("send_eh_cmnd: %p eh_state:%xn",
  556. SCpnt, SCpnt->eh_state));
  557. } else {
  558. int temp;
  559. /*
  560.  * We damn well had better never use this code.  There is no timeout
  561.  * protection here, since we would end up waiting in the actual low
  562.  * level driver, we don't know how to wake it up.
  563.  */
  564. spin_lock_irqsave(&io_request_lock, flags);
  565. temp = host->hostt->command(SCpnt);
  566. spin_unlock_irqrestore(&io_request_lock, flags);
  567. SCpnt->result = temp;
  568. /* Fall through to code below to examine status. */
  569. SCpnt->eh_state = SUCCESS;
  570. }
  571. /*
  572.  * Now examine the actual status codes to see whether the command actually
  573.  * did complete normally.
  574.  */
  575. if (SCpnt->eh_state == SUCCESS) {
  576. int ret = scsi_eh_completed_normally(SCpnt);
  577. SCSI_LOG_ERROR_RECOVERY(3,
  578. printk("scsi_send_eh_cmnd: scsi_eh_completed_normally %xn", ret));
  579. switch (ret) {
  580. case SUCCESS:
  581. SCpnt->eh_state = SUCCESS;
  582. break;
  583. case NEEDS_RETRY:
  584. goto retry;
  585. case FAILED:
  586. default:
  587. SCpnt->eh_state = FAILED;
  588. break;
  589. }
  590. } else {
  591. SCpnt->eh_state = FAILED;
  592. }
  593. }
  594. /*
  595.  * Function:  scsi_unit_is_ready()
  596.  *
  597.  * Purpose:     Called after TEST_UNIT_READY is run, to test to see if
  598.  *              the unit responded in a way that indicates it is ready.
  599.  */
  600. STATIC int scsi_unit_is_ready(Scsi_Cmnd * SCpnt)
  601. {
  602. if (SCpnt->result) {
  603. if (((driver_byte(SCpnt->result) & DRIVER_SENSE) ||
  604.      (status_byte(SCpnt->result) & CHECK_CONDITION)) &&
  605.     ((SCpnt->sense_buffer[0] & 0x70) >> 4) == 7) {
  606. if (((SCpnt->sense_buffer[2] & 0xf) != NOT_READY) &&
  607.     ((SCpnt->sense_buffer[2] & 0xf) != UNIT_ATTENTION) &&
  608.     ((SCpnt->sense_buffer[2] & 0xf) != ILLEGAL_REQUEST)) {
  609. return 0;
  610. }
  611. }
  612. }
  613. return 1;
  614. }
  615. /*
  616.  * Function:    scsi_eh_finish_command
  617.  *
  618.  * Purpose:     Handle a command that we are finished with WRT error handling.
  619.  *
  620.  * Arguments:   SClist - pointer to list into which we are putting completed commands.
  621.  *              SCpnt  - command that is completing
  622.  *
  623.  * Notes:       We don't want to use the normal command completion while we are
  624.  *              are still handling errors - it may cause other commands to be queued,
  625.  *              and that would disturb what we are doing.  Thus we really want to keep
  626.  *              a list of pending commands for final completion, and once we
  627.  *              are ready to leave error handling we handle completion for real.
  628.  */
  629. STATIC void scsi_eh_finish_command(Scsi_Cmnd ** SClist, Scsi_Cmnd * SCpnt)
  630. {
  631. SCpnt->state = SCSI_STATE_BHQUEUE;
  632. SCpnt->bh_next = *SClist;
  633. /*
  634.  * Set this back so that the upper level can correctly free up
  635.  * things.
  636.  */
  637. SCpnt->use_sg = SCpnt->old_use_sg;
  638. SCpnt->sc_data_direction = SCpnt->sc_old_data_direction;
  639. SCpnt->underflow = SCpnt->old_underflow;
  640. *SClist = SCpnt;
  641. }
  642. /*
  643.  * Function:  scsi_try_to_abort_command
  644.  *
  645.  * Purpose:     Ask host adapter to abort a running command.
  646.  *
  647.  * Returns:     FAILED          Operation failed or not supported.
  648.  *              SUCCESS         Succeeded.
  649.  *
  650.  * Notes:       This function will not return until the user's completion
  651.  *              function has been called.  There is no timeout on this
  652.  *              operation.  If the author of the low-level driver wishes
  653.  *              this operation to be timed, they can provide this facility
  654.  *              themselves.  Helper functions in scsi_error.c can be supplied
  655.  *              to make this easier to do.
  656.  *
  657.  * Notes:       It may be possible to combine this with all of the reset
  658.  *              handling to eliminate a lot of code duplication.  I don't
  659.  *              know what makes more sense at the moment - this is just a
  660.  *              prototype.
  661.  */
  662. STATIC int scsi_try_to_abort_command(Scsi_Cmnd * SCpnt, int timeout)
  663. {
  664. int rtn;
  665. unsigned long flags;
  666. SCpnt->eh_state = FAILED; /* Until we come up with something better */
  667. if (SCpnt->host->hostt->eh_abort_handler == NULL) {
  668. return FAILED;
  669. }
  670. /* 
  671.  * scsi_done was called just after the command timed out and before
  672.  * we had a chance to process it. (DB)
  673.  */
  674. if (SCpnt->serial_number == 0)
  675. return SUCCESS;
  676. SCpnt->owner = SCSI_OWNER_LOWLEVEL;
  677. spin_lock_irqsave(&io_request_lock, flags);
  678. rtn = SCpnt->host->hostt->eh_abort_handler(SCpnt);
  679. spin_unlock_irqrestore(&io_request_lock, flags);
  680. return rtn;
  681. }
  682. /*
  683.  * Function:  scsi_try_bus_device_reset
  684.  *
  685.  * Purpose:     Ask host adapter to perform a bus device reset for a given
  686.  *              device.
  687.  *
  688.  * Returns:     FAILED          Operation failed or not supported.
  689.  *              SUCCESS         Succeeded.
  690.  *
  691.  * Notes:       There is no timeout for this operation.  If this operation is
  692.  *              unreliable for a given host, then the host itself needs to put a
  693.  *              timer on it, and set the host back to a consistent state prior
  694.  *              to returning.
  695.  */
  696. STATIC int scsi_try_bus_device_reset(Scsi_Cmnd * SCpnt, int timeout)
  697. {
  698. unsigned long flags;
  699. int rtn;
  700. SCpnt->eh_state = FAILED; /* Until we come up with something better */
  701. if (SCpnt->host->hostt->eh_device_reset_handler == NULL) {
  702. return FAILED;
  703. }
  704. SCpnt->owner = SCSI_OWNER_LOWLEVEL;
  705. spin_lock_irqsave(&io_request_lock, flags);
  706. rtn = SCpnt->host->hostt->eh_device_reset_handler(SCpnt);
  707. spin_unlock_irqrestore(&io_request_lock, flags);
  708. if (rtn == SUCCESS)
  709. SCpnt->eh_state = SUCCESS;
  710. return SCpnt->eh_state;
  711. }
  712. /*
  713.  * Function:  scsi_try_bus_reset
  714.  *
  715.  * Purpose:     Ask host adapter to perform a bus reset for a host.
  716.  *
  717.  * Returns:     FAILED          Operation failed or not supported.
  718.  *              SUCCESS         Succeeded.
  719.  *
  720.  * Notes:       
  721.  */
  722. STATIC int scsi_try_bus_reset(Scsi_Cmnd * SCpnt)
  723. {
  724. unsigned long flags;
  725. int rtn;
  726. SCpnt->eh_state = FAILED; /* Until we come up with something better */
  727. SCpnt->owner = SCSI_OWNER_LOWLEVEL;
  728. SCpnt->serial_number_at_timeout = SCpnt->serial_number;
  729. if (SCpnt->host->hostt->eh_bus_reset_handler == NULL) {
  730. return FAILED;
  731. }
  732. spin_lock_irqsave(&io_request_lock, flags);
  733. rtn = SCpnt->host->hostt->eh_bus_reset_handler(SCpnt);
  734. spin_unlock_irqrestore(&io_request_lock, flags);
  735. if (rtn == SUCCESS)
  736. SCpnt->eh_state = SUCCESS;
  737. /*
  738.  * If we had a successful bus reset, mark the command blocks to expect
  739.  * a condition code of unit attention.
  740.  */
  741. scsi_sleep(BUS_RESET_SETTLE_TIME);
  742. if (SCpnt->eh_state == SUCCESS) {
  743. Scsi_Device *SDloop;
  744. for (SDloop = SCpnt->host->host_queue; SDloop; SDloop = SDloop->next) {
  745. if (SCpnt->channel == SDloop->channel) {
  746. SDloop->was_reset = 1;
  747. SDloop->expecting_cc_ua = 1;
  748. }
  749. }
  750. }
  751. return SCpnt->eh_state;
  752. }
  753. /*
  754.  * Function:  scsi_try_host_reset
  755.  *
  756.  * Purpose:     Ask host adapter to reset itself, and the bus.
  757.  *
  758.  * Returns:     FAILED          Operation failed or not supported.
  759.  *              SUCCESS         Succeeded.
  760.  *
  761.  * Notes:
  762.  */
  763. STATIC int scsi_try_host_reset(Scsi_Cmnd * SCpnt)
  764. {
  765. unsigned long flags;
  766. int rtn;
  767. SCpnt->eh_state = FAILED; /* Until we come up with something better */
  768. SCpnt->owner = SCSI_OWNER_LOWLEVEL;
  769. SCpnt->serial_number_at_timeout = SCpnt->serial_number;
  770. if (SCpnt->host->hostt->eh_host_reset_handler == NULL) {
  771. return FAILED;
  772. }
  773. spin_lock_irqsave(&io_request_lock, flags);
  774. rtn = SCpnt->host->hostt->eh_host_reset_handler(SCpnt);
  775. spin_unlock_irqrestore(&io_request_lock, flags);
  776. if (rtn == SUCCESS)
  777. SCpnt->eh_state = SUCCESS;
  778. /*
  779.  * If we had a successful host reset, mark the command blocks to expect
  780.  * a condition code of unit attention.
  781.  */
  782. scsi_sleep(HOST_RESET_SETTLE_TIME);
  783. if (SCpnt->eh_state == SUCCESS) {
  784. Scsi_Device *SDloop;
  785. for (SDloop = SCpnt->host->host_queue; SDloop; SDloop = SDloop->next) {
  786. SDloop->was_reset = 1;
  787. SDloop->expecting_cc_ua = 1;
  788. }
  789. }
  790. return SCpnt->eh_state;
  791. }
  792. /*
  793.  * Function:  scsi_decide_disposition
  794.  *
  795.  * Purpose:     Examine a command block that has come back from the low-level
  796.  *              and figure out what to do next.
  797.  *
  798.  * Returns:     SUCCESS         - pass on to upper level.
  799.  *              FAILED          - pass on to error handler thread.
  800.  *              RETRY           - command should be retried.
  801.  *              SOFTERR         - command succeeded, but we need to log
  802.  *                                a soft error.
  803.  *
  804.  * Notes:       This is *ONLY* called when we are examining the status
  805.  *              after sending out the actual data command.  Any commands
  806.  *              that are queued for error recovery (i.e. TEST_UNIT_READY)
  807.  *              do *NOT* come through here.
  808.  *
  809.  *              NOTE - When this routine returns FAILED, it means the error
  810.  *              handler thread is woken.  In cases where the error code
  811.  *              indicates an error that doesn't require the error handler
  812.  *              thread (i.e. we don't need to abort/reset), then this function
  813.  *              should return SUCCESS.
  814.  */
  815. int scsi_decide_disposition(Scsi_Cmnd * SCpnt)
  816. {
  817. int rtn;
  818. /*
  819.  * If the device is offline, then we clearly just pass the result back
  820.  * up to the top level.
  821.  */
  822. if (SCpnt->device->online == FALSE) {
  823. SCSI_LOG_ERROR_RECOVERY(5, printk("scsi_error.c: device offline - report as SUCCESSn"));
  824. return SUCCESS;
  825. }
  826. /*
  827.  * First check the host byte, to see if there is anything in there
  828.  * that would indicate what we need to do.
  829.  */
  830. switch (host_byte(SCpnt->result)) {
  831. case DID_PASSTHROUGH:
  832. /*
  833.  * No matter what, pass this through to the upper layer.
  834.  * Nuke this special code so that it looks like we are saying
  835.  * DID_OK.
  836.  */
  837. SCpnt->result &= 0xff00ffff;
  838. return SUCCESS;
  839. case DID_OK:
  840. /*
  841.  * Looks good.  Drop through, and check the next byte.
  842.  */
  843. break;
  844. case DID_NO_CONNECT:
  845. case DID_BAD_TARGET:
  846. case DID_ABORT:
  847. /*
  848.  * Note - this means that we just report the status back to the
  849.  * top level driver, not that we actually think that it indicates
  850.  * success.
  851.  */
  852. return SUCCESS;
  853. /*
  854.  * When the low level driver returns DID_SOFT_ERROR,
  855.  * it is responsible for keeping an internal retry counter 
  856.  * in order to avoid endless loops (DB)
  857.  *
  858.  * Actually this is a bug in this function here.  We should
  859.  * be mindful of the maximum number of retries specified
  860.  * and not get stuck in a loop.
  861.  */
  862. case DID_SOFT_ERROR:
  863. goto maybe_retry;
  864. case DID_BUS_BUSY:
  865. case DID_PARITY:
  866. case DID_ERROR:
  867. goto maybe_retry;
  868. case DID_TIME_OUT:
  869. /*
  870.    * When we scan the bus, we get timeout messages for
  871.    * these commands if there is no device available.
  872.    * Other hosts report DID_NO_CONNECT for the same thing.
  873.  */
  874. if ((SCpnt->cmnd[0] == TEST_UNIT_READY ||
  875.      SCpnt->cmnd[0] == INQUIRY)) {
  876. return SUCCESS;
  877. } else {
  878. return FAILED;
  879. }
  880. case DID_RESET:
  881. /*
  882.  * In the normal case where we haven't initiated a reset, this is
  883.  * a failure.
  884.  */
  885. if (SCpnt->flags & IS_RESETTING) {
  886. SCpnt->flags &= ~IS_RESETTING;
  887. goto maybe_retry;
  888. }
  889. /*
  890.  * Examine the sense data to figure out how to proceed from here.
  891.  * If there is no sense data, we will be forced into the error
  892.  * handler thread, where we get to examine the thing in a lot more
  893.  * detail.
  894.  */
  895. return scsi_check_sense(SCpnt);
  896. default:
  897. return FAILED;
  898. }
  899. /*
  900.  * Next, check the message byte.
  901.  */
  902. if (msg_byte(SCpnt->result) != COMMAND_COMPLETE) {
  903. return FAILED;
  904. }
  905. /*
  906.  * Now, check the status byte to see if this indicates anything special.
  907.  */
  908. switch (status_byte(SCpnt->result)) {
  909. case QUEUE_FULL:
  910. /*
  911.  * The case of trying to send too many commands to a tagged queueing
  912.  * device.
  913.  */
  914. return ADD_TO_MLQUEUE;
  915. case GOOD:
  916. case COMMAND_TERMINATED:
  917. return SUCCESS;
  918. case CHECK_CONDITION:
  919. rtn = scsi_check_sense(SCpnt);
  920. if (rtn == NEEDS_RETRY) {
  921. goto maybe_retry;
  922. }
  923. return rtn;
  924. case CONDITION_GOOD:
  925. case INTERMEDIATE_GOOD:
  926. case INTERMEDIATE_C_GOOD:
  927. /*
  928.  * Who knows?  FIXME(eric)
  929.  */
  930. return SUCCESS;
  931. case BUSY:
  932. case RESERVATION_CONFLICT:
  933. goto maybe_retry;
  934. default:
  935. return FAILED;
  936. }
  937. return FAILED;
  938.       maybe_retry:
  939. if ((++SCpnt->retries) < SCpnt->allowed) {
  940. return NEEDS_RETRY;
  941. } else {
  942.                 /*
  943.                  * No more retries - report this one back to upper level.
  944.                  */
  945. return SUCCESS;
  946. }
  947. }
  948. /*
  949.  * Function:  scsi_eh_completed_normally
  950.  *
  951.  * Purpose:     Examine a command block that has come back from the low-level
  952.  *              and figure out what to do next.
  953.  *
  954.  * Returns:     SUCCESS         - pass on to upper level.
  955.  *              FAILED          - pass on to error handler thread.
  956.  *              RETRY           - command should be retried.
  957.  *              SOFTERR         - command succeeded, but we need to log
  958.  *                                a soft error.
  959.  *
  960.  * Notes:       This is *ONLY* called when we are examining the status
  961.  *              of commands queued during error recovery.  The main
  962.  *              difference here is that we don't allow for the possibility
  963.  *              of retries here, and we are a lot more restrictive about what
  964.  *              we consider acceptable.
  965.  */
  966. STATIC int scsi_eh_completed_normally(Scsi_Cmnd * SCpnt)
  967. {
  968. /*
  969.  * First check the host byte, to see if there is anything in there
  970.  * that would indicate what we need to do.
  971.  */
  972. if (host_byte(SCpnt->result) == DID_RESET) {
  973. if (SCpnt->flags & IS_RESETTING) {
  974. /*
  975.  * OK, this is normal.  We don't know whether in fact the
  976.  * command in question really needs to be rerun or not - 
  977.  * if this was the original data command then the answer is yes,
  978.  * otherwise we just flag it as success.
  979.  */
  980. SCpnt->flags &= ~IS_RESETTING;
  981. return NEEDS_RETRY;
  982. }
  983. /*
  984.  * Rats.  We are already in the error handler, so we now get to try
  985.  * and figure out what to do next.  If the sense is valid, we have
  986.  * a pretty good idea of what to do.  If not, we mark it as failed.
  987.  */
  988. return scsi_check_sense(SCpnt);
  989. }
  990. if (host_byte(SCpnt->result) != DID_OK) {
  991. return FAILED;
  992. }
  993. /*
  994.  * Next, check the message byte.
  995.  */
  996. if (msg_byte(SCpnt->result) != COMMAND_COMPLETE) {
  997. return FAILED;
  998. }
  999. /*
  1000.  * Now, check the status byte to see if this indicates anything special.
  1001.  */
  1002. switch (status_byte(SCpnt->result)) {
  1003. case GOOD:
  1004. case COMMAND_TERMINATED:
  1005. return SUCCESS;
  1006. case CHECK_CONDITION:
  1007. return scsi_check_sense(SCpnt);
  1008. case CONDITION_GOOD:
  1009. case INTERMEDIATE_GOOD:
  1010. case INTERMEDIATE_C_GOOD:
  1011. /*
  1012.  * Who knows?  FIXME(eric)
  1013.  */
  1014. return SUCCESS;
  1015. case BUSY:
  1016. case QUEUE_FULL:
  1017. case RESERVATION_CONFLICT:
  1018. default:
  1019. return FAILED;
  1020. }
  1021. return FAILED;
  1022. }
  1023. /*
  1024.  * Function:  scsi_check_sense
  1025.  *
  1026.  * Purpose:     Examine sense information - give suggestion as to what
  1027.  *              we should do with it.
  1028.  */
  1029. STATIC int scsi_check_sense(Scsi_Cmnd * SCpnt)
  1030. {
  1031. if (!scsi_sense_valid(SCpnt)) {
  1032. return FAILED;
  1033. }
  1034. if (SCpnt->sense_buffer[2] & 0xe0)
  1035. return SUCCESS;
  1036. switch (SCpnt->sense_buffer[2] & 0xf) {
  1037. case NO_SENSE:
  1038. return SUCCESS;
  1039. case RECOVERED_ERROR:
  1040. return /* SOFT_ERROR */ SUCCESS;
  1041. case ABORTED_COMMAND:
  1042. return NEEDS_RETRY;
  1043. case NOT_READY:
  1044. case UNIT_ATTENTION:
  1045. /*
  1046.  * If we are expecting a CC/UA because of a bus reset that we
  1047.  * performed, treat this just as a retry.  Otherwise this is
  1048.  * information that we should pass up to the upper-level driver
  1049.  * so that we can deal with it there.
  1050.  */
  1051. if (SCpnt->device->expecting_cc_ua) {
  1052. SCpnt->device->expecting_cc_ua = 0;
  1053. return NEEDS_RETRY;
  1054. }
  1055. /*
  1056.  * If the device is in the process of becoming ready, we 
  1057.  * should retry.
  1058.  */
  1059. if ((SCpnt->sense_buffer[12] == 0x04) &&
  1060. (SCpnt->sense_buffer[13] == 0x01)) {
  1061. return NEEDS_RETRY;
  1062. }
  1063. return SUCCESS;
  1064. /* these three are not supported */
  1065. case COPY_ABORTED:
  1066. case VOLUME_OVERFLOW:
  1067. case MISCOMPARE:
  1068. return SUCCESS;
  1069. case MEDIUM_ERROR:
  1070. return NEEDS_RETRY;
  1071. case ILLEGAL_REQUEST:
  1072. case BLANK_CHECK:
  1073. case DATA_PROTECT:
  1074. case HARDWARE_ERROR:
  1075. default:
  1076. return SUCCESS;
  1077. }
  1078. }
  1079. /*
  1080.  * Function:  scsi_restart_operations
  1081.  *
  1082.  * Purpose:     Restart IO operations to the specified host.
  1083.  *
  1084.  * Arguments:   host  - host that we are restarting
  1085.  *
  1086.  * Lock status: Assumed that locks are not held upon entry.
  1087.  *
  1088.  * Returns:     Nothing
  1089.  *
  1090.  * Notes:       When we entered the error handler, we blocked all further
  1091.  *              I/O to this device.  We need to 'reverse' this process.
  1092.  */
  1093. STATIC void scsi_restart_operations(struct Scsi_Host *host)
  1094. {
  1095. Scsi_Device *SDpnt;
  1096. unsigned long flags;
  1097. ASSERT_LOCK(&io_request_lock, 0);
  1098. /*
  1099.  * Next free up anything directly waiting upon the host.  This will be
  1100.  * requests for character device operations, and also for ioctls to queued
  1101.  * block devices.
  1102.  */
  1103. SCSI_LOG_ERROR_RECOVERY(5, printk("scsi_error.c: Waking up host to restartn"));
  1104. wake_up(&host->host_wait);
  1105. /*
  1106.  * Finally we need to re-initiate requests that may be pending.  We will
  1107.  * have had everything blocked while error handling is taking place, and
  1108.  * now that error recovery is done, we will need to ensure that these
  1109.  * requests are started.
  1110.  */
  1111. spin_lock_irqsave(&io_request_lock, flags);
  1112. for (SDpnt = host->host_queue; SDpnt; SDpnt = SDpnt->next) {
  1113. request_queue_t *q;
  1114. if ((host->can_queue > 0 && (host->host_busy >= host->can_queue))
  1115.     || (host->host_blocked)
  1116.     || (host->host_self_blocked)
  1117.     || (SDpnt->device_blocked)) {
  1118. break;
  1119. }
  1120. q = &SDpnt->request_queue;
  1121. q->request_fn(q);
  1122. }
  1123. spin_unlock_irqrestore(&io_request_lock, flags);
  1124. }
  1125. /*
  1126.  * Function:  scsi_unjam_host
  1127.  *
  1128.  * Purpose:     Attempt to fix a host which has a command that failed for
  1129.  *              some reason.
  1130.  *
  1131.  * Arguments:   host    - host that needs unjamming.
  1132.  * 
  1133.  * Returns:     Nothing
  1134.  *
  1135.  * Notes:       When we come in here, we *know* that all commands on the
  1136.  *              bus have either completed, failed or timed out.  We also
  1137.  *              know that no further commands are being sent to the host,
  1138.  *              so things are relatively quiet and we have freedom to
  1139.  *              fiddle with things as we wish.
  1140.  *
  1141.  * Additional note:  This is only the *default* implementation.  It is possible
  1142.  *              for individual drivers to supply their own version of this
  1143.  *              function, and if the maintainer wishes to do this, it is
  1144.  *              strongly suggested that this function be taken as a template
  1145.  *              and modified.  This function was designed to correctly handle
  1146.  *              problems for about 95% of the different cases out there, and
  1147.  *              it should always provide at least a reasonable amount of error
  1148.  *              recovery.
  1149.  *
  1150.  * Note3:       Any command marked 'FAILED' or 'TIMEOUT' must eventually
  1151.  *              have scsi_finish_command() called for it.  We do all of
  1152.  *              the retry stuff here, so when we restart the host after we
  1153.  *              return it should have an empty queue.
  1154.  */
  1155. STATIC int scsi_unjam_host(struct Scsi_Host *host)
  1156. {
  1157. int devices_failed;
  1158. int numfailed;
  1159. int ourrtn;
  1160. int rtn = FALSE;
  1161. int result;
  1162. Scsi_Cmnd *SCloop;
  1163. Scsi_Cmnd *SCpnt;
  1164. Scsi_Device *SDpnt;
  1165. Scsi_Device *SDloop;
  1166. Scsi_Cmnd *SCdone;
  1167. int timed_out;
  1168. ASSERT_LOCK(&io_request_lock, 0);
  1169. SCdone = NULL;
  1170. /*
  1171.  * First, protect against any sort of race condition.  If any of the outstanding
  1172.  * commands are in states that indicate that we are not yet blocked (i.e. we are
  1173.  * not in a quiet state) then we got woken up in error.  If we ever end up here,
  1174.  * we need to re-examine some of the assumptions.
  1175.  */
  1176. for (SDpnt = host->host_queue; SDpnt; SDpnt = SDpnt->next) {
  1177. for (SCpnt = SDpnt->device_queue; SCpnt; SCpnt = SCpnt->next) {
  1178. if (SCpnt->state == SCSI_STATE_FAILED
  1179.     || SCpnt->state == SCSI_STATE_TIMEOUT
  1180.     || SCpnt->state == SCSI_STATE_INITIALIZING
  1181.     || SCpnt->state == SCSI_STATE_UNUSED) {
  1182. continue;
  1183. }
  1184. /*
  1185.  * Rats.  Something is still floating around out there.  This could
  1186.  * be the result of the fact that the upper level drivers are still frobbing
  1187.  * commands that might have succeeded.  There are two outcomes.  One is that
  1188.  * the command block will eventually be freed, and the other one is that
  1189.  * the command will be queued and will be finished along the way.
  1190.  */
  1191. SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler prematurely woken - commands still active (%p %x %d)n", SCpnt, SCpnt->state, SCpnt->target));
  1192. /*
  1193.  *        panic("SCSI Error handler woken too earlyn");
  1194.  *
  1195.  * This is no longer a problem, since now the code cares only about
  1196.  * SCSI_STATE_TIMEOUT and SCSI_STATE_FAILED.
  1197.  * Other states are useful only to release active commands when devices are
  1198.  * set offline. If (host->host_active == host->host_busy) we can safely assume
  1199.  * that there are no commands in state other then TIMEOUT od FAILED. (DB)
  1200.  *
  1201.  * FIXME:
  1202.  * It is not easy to release correctly commands according to their state when 
  1203.  * devices are set offline, when the state is neither TIMEOUT nor FAILED.
  1204.  * When a device is set offline, we can have some command with
  1205.  * rq_status=RQ_SCSY_BUSY, owner=SCSI_STATE_HIGHLEVEL, 
  1206.  * state=SCSI_STATE_INITIALIZING and the driver module cannot be released.
  1207.  * (DB, 17 May 1998)
  1208.  */
  1209. }
  1210. }
  1211. /*
  1212.  * Next, see if we need to request sense information.  if so,
  1213.  * then get it now, so we have a better idea of what to do.
  1214.  * FIXME(eric) this has the unfortunate side effect that if a host
  1215.  * adapter does not automatically request sense information, that we end
  1216.  * up shutting it down before we request it.  All hosts should be doing this
  1217.  * anyways, so for now all I have to say is tough noogies if you end up in here.
  1218.  * On second thought, this is probably a good idea.  We *really* want to give
  1219.  * authors an incentive to automatically request this.
  1220.  */
  1221. SCSI_LOG_ERROR_RECOVERY(3, printk("scsi_unjam_host: Checking to see if we need to request sensen"));
  1222. for (SDpnt = host->host_queue; SDpnt; SDpnt = SDpnt->next) {
  1223. for (SCpnt = SDpnt->device_queue; SCpnt; SCpnt = SCpnt->next) {
  1224. if (SCpnt->state != SCSI_STATE_FAILED || scsi_sense_valid(SCpnt)) {
  1225. continue;
  1226. }
  1227. SCSI_LOG_ERROR_RECOVERY(2, printk("scsi_unjam_host: Requesting sense for %dn",
  1228.   SCpnt->target));
  1229. rtn = scsi_request_sense(SCpnt);
  1230. if (rtn != SUCCESS) {
  1231. continue;
  1232. }
  1233. SCSI_LOG_ERROR_RECOVERY(3, printk("Sense requested for %p - result %xn",
  1234.   SCpnt, SCpnt->result));
  1235. SCSI_LOG_ERROR_RECOVERY(3, print_sense("bh", SCpnt));
  1236. result = scsi_decide_disposition(SCpnt);
  1237. /*
  1238.  * If the result was normal, then just pass it along to the
  1239.  * upper level.
  1240.  */
  1241. if (result == SUCCESS) {
  1242. SCpnt->host->host_failed--;
  1243. scsi_eh_finish_command(&SCdone, SCpnt);
  1244. }
  1245. if (result != NEEDS_RETRY) {
  1246. continue;
  1247. }
  1248. /* 
  1249.  * We only come in here if we want to retry a
  1250.  * command.  The test to see whether the command
  1251.  * should be retried should be keeping track of the
  1252.  * number of tries, so we don't end up looping, of
  1253.  * course.  
  1254.  */
  1255. SCpnt->state = NEEDS_RETRY;
  1256. rtn = scsi_eh_retry_command(SCpnt);
  1257. if (rtn != SUCCESS) {
  1258. continue;
  1259. }
  1260. /*
  1261.  * We eventually hand this one back to the top level.
  1262.  */
  1263. SCpnt->host->host_failed--;
  1264. scsi_eh_finish_command(&SCdone, SCpnt);
  1265. }
  1266. }
  1267. /*
  1268.  * Go through the list of commands and figure out where we stand and how bad things
  1269.  * really are.
  1270.  */
  1271. numfailed = 0;
  1272. timed_out = 0;
  1273. devices_failed = 0;
  1274. for (SDpnt = host->host_queue; SDpnt; SDpnt = SDpnt->next) {
  1275. unsigned int device_error = 0;
  1276. for (SCpnt = SDpnt->device_queue; SCpnt; SCpnt = SCpnt->next) {
  1277. if (SCpnt->state == SCSI_STATE_FAILED) {
  1278. SCSI_LOG_ERROR_RECOVERY(5, printk("Command to ID %d failedn",
  1279.  SCpnt->target));
  1280. numfailed++;
  1281. device_error++;
  1282. }
  1283. if (SCpnt->state == SCSI_STATE_TIMEOUT) {
  1284. SCSI_LOG_ERROR_RECOVERY(5, printk("Command to ID %d timedoutn",
  1285.  SCpnt->target));
  1286. timed_out++;
  1287. device_error++;
  1288. }
  1289. }
  1290. if (device_error > 0) {
  1291. devices_failed++;
  1292. }
  1293. }
  1294. SCSI_LOG_ERROR_RECOVERY(2, printk("Total of %d+%d commands on %d devices require eh workn",
  1295.   numfailed, timed_out, devices_failed));
  1296. if (host->host_failed == 0) {
  1297. ourrtn = TRUE;
  1298. goto leave;
  1299. }
  1300. /*
  1301.  * Next, try and see whether or not it makes sense to try and abort
  1302.  * the running command.  This only works out to be the case if we have
  1303.  * one command that has timed out.  If the command simply failed, it
  1304.  * makes no sense to try and abort the command, since as far as the
  1305.  * host adapter is concerned, it isn't running.
  1306.  */
  1307. SCSI_LOG_ERROR_RECOVERY(3, printk("scsi_unjam_host: Checking to see if we want to try abortn"));
  1308. for (SDpnt = host->host_queue; SDpnt; SDpnt = SDpnt->next) {
  1309. for (SCloop = SDpnt->device_queue; SCloop; SCloop = SCloop->next) {
  1310. if (SCloop->state != SCSI_STATE_TIMEOUT) {
  1311. continue;
  1312. }
  1313. rtn = scsi_try_to_abort_command(SCloop, ABORT_TIMEOUT);
  1314. if (rtn == SUCCESS) {
  1315. rtn = scsi_test_unit_ready(SCloop);
  1316. if (rtn == SUCCESS && scsi_unit_is_ready(SCloop)) {
  1317. rtn = scsi_eh_retry_command(SCloop);
  1318. if (rtn == SUCCESS) {
  1319. SCloop->host->host_failed--;
  1320. scsi_eh_finish_command(&SCdone, SCloop);
  1321. }
  1322. }
  1323. }
  1324. }
  1325. }
  1326. /*
  1327.  * If we have corrected all of the problems, then we are done.
  1328.  */
  1329. if (host->host_failed == 0) {
  1330. ourrtn = TRUE;
  1331. goto leave;
  1332. }
  1333. /*
  1334.  * Either the abort wasn't appropriate, or it didn't succeed.
  1335.  * Now try a bus device reset.  Still, look to see whether we have
  1336.  * multiple devices that are jammed or not - if we have multiple devices,
  1337.  * it makes no sense to try BUS_DEVICE_RESET - we really would need
  1338.  * to try a BUS_RESET instead.
  1339.  *
  1340.  * Does this make sense - should we try BDR on each device individually?
  1341.  * Yes, definitely.
  1342.  */
  1343. SCSI_LOG_ERROR_RECOVERY(3, printk("scsi_unjam_host: Checking to see if we want to try BDRn"));
  1344. for (SDpnt = host->host_queue; SDpnt; SDpnt = SDpnt->next) {
  1345. for (SCloop = SDpnt->device_queue; SCloop; SCloop = SCloop->next) {
  1346. if (SCloop->state == SCSI_STATE_FAILED
  1347.     || SCloop->state == SCSI_STATE_TIMEOUT) {
  1348. break;
  1349. }
  1350. }
  1351. if (SCloop == NULL) {
  1352. continue;
  1353. }
  1354. /*
  1355.  * OK, we have a device that is having problems.  Try and send
  1356.  * a bus device reset to it.
  1357.  *
  1358.  * FIXME(eric) - make sure we handle the case where multiple
  1359.  * commands to the same device have failed. They all must
  1360.  * get properly restarted.
  1361.  */
  1362. rtn = scsi_try_bus_device_reset(SCloop, RESET_TIMEOUT);
  1363. if (rtn == SUCCESS) {
  1364. rtn = scsi_test_unit_ready(SCloop);
  1365. if (rtn == SUCCESS && scsi_unit_is_ready(SCloop)) {
  1366. rtn = scsi_eh_retry_command(SCloop);
  1367. if (rtn == SUCCESS) {
  1368. SCloop->host->host_failed--;
  1369. scsi_eh_finish_command(&SCdone, SCloop);
  1370. }
  1371. }
  1372. }
  1373. }
  1374. if (host->host_failed == 0) {
  1375. ourrtn = TRUE;
  1376. goto leave;
  1377. }
  1378. /*
  1379.  * If we ended up here, we have serious problems.  The only thing left
  1380.  * to try is a full bus reset.  If someone has grabbed the bus and isn't
  1381.  * letting go, then perhaps this will help.
  1382.  */
  1383. SCSI_LOG_ERROR_RECOVERY(3, printk("scsi_unjam_host: Try hard bus resetn"));
  1384. /* 
  1385.  * We really want to loop over the various channels, and do this on
  1386.  * a channel by channel basis.  We should also check to see if any
  1387.  * of the failed commands are on soft_reset devices, and if so, skip
  1388.  * the reset.  
  1389.  */
  1390. for (SDpnt = host->host_queue; SDpnt; SDpnt = SDpnt->next) {
  1391.       next_device:
  1392. for (SCpnt = SDpnt->device_queue; SCpnt; SCpnt = SCpnt->next) {
  1393. if (SCpnt->state != SCSI_STATE_FAILED
  1394.     && SCpnt->state != SCSI_STATE_TIMEOUT) {
  1395. continue;
  1396. }
  1397. /*
  1398.  * We have a failed command.  Make sure there are no other failed
  1399.  * commands on the same channel that are timed out and implement a
  1400.  * soft reset.
  1401.  */
  1402. for (SDloop = host->host_queue; SDloop; SDloop = SDloop->next) {
  1403. for (SCloop = SDloop->device_queue; SCloop; SCloop = SCloop->next) {
  1404. if (SCloop->channel != SCpnt->channel) {
  1405. continue;
  1406. }
  1407. if (SCloop->state != SCSI_STATE_FAILED
  1408.     && SCloop->state != SCSI_STATE_TIMEOUT) {
  1409. continue;
  1410. }
  1411. if (SDloop->soft_reset && SCloop->state == SCSI_STATE_TIMEOUT) {
  1412. /* 
  1413.  * If this device uses the soft reset option, and this
  1414.  * is one of the devices acting up, then our only
  1415.  * option is to wait a bit, since the command is
  1416.  * supposedly still running.  
  1417.  *
  1418.  * FIXME(eric) - right now we will just end up falling
  1419.  * through to the 'take device offline' case.
  1420.  *
  1421.  * FIXME(eric) - It is possible that the command completed
  1422.  * *after* the error recovery procedure started, and if this
  1423.  * is the case, we are worrying about nothing here.
  1424.  */
  1425. scsi_sleep(1 * HZ);
  1426. goto next_device;
  1427. }
  1428. }
  1429. }
  1430. /*
  1431.  * We now know that we are able to perform a reset for the
  1432.  * bus that SCpnt points to.  There are no soft-reset devices
  1433.  * with outstanding timed out commands.
  1434.  */
  1435. rtn = scsi_try_bus_reset(SCpnt);
  1436. if (rtn == SUCCESS) {
  1437. for (SDloop = host->host_queue; SDloop; SDloop = SDloop->next) {
  1438. for (SCloop = SDloop->device_queue; SCloop; SCloop = SCloop->next) {
  1439. if (SCloop->channel != SCpnt->channel) {
  1440. continue;
  1441. }
  1442. if (SCloop->state != SCSI_STATE_FAILED
  1443.     && SCloop->state != SCSI_STATE_TIMEOUT) {
  1444. continue;
  1445. }
  1446. rtn = scsi_test_unit_ready(SCloop);
  1447. if (rtn == SUCCESS && scsi_unit_is_ready(SCloop)) {
  1448. rtn = scsi_eh_retry_command(SCloop);
  1449. if (rtn == SUCCESS) {
  1450. SCpnt->host->host_failed--;
  1451. scsi_eh_finish_command(&SCdone, SCloop);
  1452. }
  1453. }
  1454. /*
  1455.  * If the bus reset worked, but we are still unable to
  1456.  * talk to the device, take it offline.
  1457.  * FIXME(eric) - is this really the correct thing to do?
  1458.  */
  1459. if (rtn != SUCCESS) {
  1460. printk(KERN_INFO "scsi: device set offline - not ready or command retry failed after bus reset: host %d channel %d id %d lun %dn", SDloop->host->host_no, SDloop->channel, SDloop->id, SDloop->lun);
  1461. SDloop->online = FALSE;
  1462. SDloop->host->host_failed--;
  1463. scsi_eh_finish_command(&SCdone, SCloop);
  1464. }
  1465. }
  1466. }
  1467. }
  1468. }
  1469. }
  1470. if (host->host_failed == 0) {
  1471. ourrtn = TRUE;
  1472. goto leave;
  1473. }
  1474. /*
  1475.  * If we ended up here, we have serious problems.  The only thing left
  1476.  * to try is a full host reset - perhaps the firmware on the device
  1477.  * crashed, or something like that.
  1478.  *
  1479.  * It is assumed that a succesful host reset will cause *all* information
  1480.  * about the command to be flushed from both the host adapter *and* the
  1481.  * device.
  1482.  *
  1483.  * FIXME(eric) - it isn't clear that devices that implement the soft reset
  1484.  * option can ever be cleared except via cycling the power.  The problem is
  1485.  * that sending the host reset command will cause the host to forget
  1486.  * about the pending command, but the device won't forget.  For now, we
  1487.  * skip the host reset option if any of the failed devices are configured
  1488.  * to use the soft reset option.
  1489.  */
  1490. for (SDpnt = host->host_queue; SDpnt; SDpnt = SDpnt->next) {
  1491.       next_device2:
  1492. for (SCpnt = SDpnt->device_queue; SCpnt; SCpnt = SCpnt->next) {
  1493. if (SCpnt->state != SCSI_STATE_FAILED
  1494.     && SCpnt->state != SCSI_STATE_TIMEOUT) {
  1495. continue;
  1496. }
  1497. if (SDpnt->soft_reset && SCpnt->state == SCSI_STATE_TIMEOUT) {
  1498. /* 
  1499.  * If this device uses the soft reset option, and this
  1500.  * is one of the devices acting up, then our only
  1501.  * option is to wait a bit, since the command is
  1502.  * supposedly still running.  
  1503.  *
  1504.  * FIXME(eric) - right now we will just end up falling
  1505.  * through to the 'take device offline' case.
  1506.  */
  1507. SCSI_LOG_ERROR_RECOVERY(3,
  1508. printk("scsi_unjam_host: Unable to try hard host resetn"));
  1509. /*
  1510.  * Due to the spinlock, we will never get out of this
  1511.  * loop without a proper wait. (DB)
  1512.  */
  1513. scsi_sleep(1 * HZ);
  1514. goto next_device2;
  1515. }
  1516. SCSI_LOG_ERROR_RECOVERY(3, printk("scsi_unjam_host: Try hard host resetn"));
  1517. /*
  1518.  * FIXME(eric) - we need to obtain a valid SCpnt to perform this call.
  1519.  */
  1520. rtn = scsi_try_host_reset(SCpnt);
  1521. if (rtn == SUCCESS) {
  1522. /*
  1523.  * FIXME(eric) we assume that all commands are flushed from the
  1524.  * controller.  We should get a DID_RESET for all of the commands
  1525.  * that were pending.  We should ignore these so that we can
  1526.  * guarantee that we are in a consistent state.
  1527.  *
  1528.  * I believe this to be the case right now, but this needs to be
  1529.  * tested.
  1530.  */
  1531. for (SDloop = host->host_queue; SDloop; SDloop = SDloop->next) {
  1532. for (SCloop = SDloop->device_queue; SCloop; SCloop = SCloop->next) {
  1533. if (SCloop->state != SCSI_STATE_FAILED
  1534.     && SCloop->state != SCSI_STATE_TIMEOUT) {
  1535. continue;
  1536. }
  1537. rtn = scsi_test_unit_ready(SCloop);
  1538. if (rtn == SUCCESS && scsi_unit_is_ready(SCloop)) {
  1539. rtn = scsi_eh_retry_command(SCloop);
  1540. if (rtn == SUCCESS) {
  1541. SCpnt->host->host_failed--;
  1542. scsi_eh_finish_command(&SCdone, SCloop);
  1543. }
  1544. }
  1545. if (rtn != SUCCESS) {
  1546. printk(KERN_INFO "scsi: device set offline - not ready or command retry failed after host reset: host %d channel %d id %d lun %dn", SDloop->host->host_no, SDloop->channel, SDloop->id, SDloop->lun);
  1547. SDloop->online = FALSE;
  1548. SDloop->host->host_failed--;
  1549. scsi_eh_finish_command(&SCdone, SCloop);
  1550. }
  1551. }
  1552. }
  1553. }
  1554. }
  1555. }
  1556. /*
  1557.  * If we solved all of the problems, then let's rev up the engines again.
  1558.  */
  1559. if (host->host_failed == 0) {
  1560. ourrtn = TRUE;
  1561. goto leave;
  1562. }
  1563. /*
  1564.  * If the HOST RESET failed, then for now we assume that the entire host
  1565.  * adapter is too hosed to be of any use.  For our purposes, however, it is
  1566.  * easier to simply take the devices offline that correspond to commands
  1567.  * that failed.
  1568.  */
  1569. SCSI_LOG_ERROR_RECOVERY(1, printk("scsi_unjam_host: Take device offlinen"));
  1570. for (SDpnt = host->host_queue; SDpnt; SDpnt = SDpnt->next) {
  1571. for (SCloop = SDpnt->device_queue; SCloop; SCloop = SCloop->next) {
  1572. if (SCloop->state == SCSI_STATE_FAILED || SCloop->state == SCSI_STATE_TIMEOUT) {
  1573. SDloop = SCloop->device;
  1574. if (SDloop->online == TRUE) {
  1575. printk(KERN_INFO "scsi: device set offline - command error recover failed: host %d channel %d id %d lun %dn", SDloop->host->host_no, SDloop->channel, SDloop->id, SDloop->lun);
  1576. SDloop->online = FALSE;
  1577. }
  1578. /*
  1579.  * This should pass the failure up to the top level driver, and
  1580.  * it will have to try and do something intelligent with it.
  1581.  */
  1582. SCloop->host->host_failed--;
  1583. if (SCloop->state == SCSI_STATE_TIMEOUT) {
  1584. SCloop->result |= (DRIVER_TIMEOUT << 24);
  1585. }
  1586. SCSI_LOG_ERROR_RECOVERY(3, printk("Finishing command for device %d %xn",
  1587.     SDloop->id, SCloop->result));
  1588. scsi_eh_finish_command(&SCdone, SCloop);
  1589. }
  1590. }
  1591. }
  1592. if (host->host_failed != 0) {
  1593. panic("scsi_unjam_host: Miscount of number of failed commands.n");
  1594. }
  1595. SCSI_LOG_ERROR_RECOVERY(3, printk("scsi_unjam_host: Returningn"));
  1596. ourrtn = FALSE;
  1597.       leave:
  1598. /*
  1599.  * We should have a list of commands that we 'finished' during the course of
  1600.  * error recovery.  This should be the same as the list of commands that timed out
  1601.  * or failed.  We are currently holding these things in a linked list - we didn't
  1602.  * put them in the bottom half queue because we wanted to keep things quiet while
  1603.  * we were working on recovery, and passing them up to the top level could easily
  1604.  * cause the top level to try and queue something else again.
  1605.  *
  1606.  * Start by marking that the host is no longer in error recovery.
  1607.  */
  1608. host->in_recovery = 0;
  1609. /*
  1610.  * Take the list of commands, and stick them in the bottom half queue.
  1611.  * The current implementation of scsi_done will do this for us - if need
  1612.  * be we can create a special version of this function to do the
  1613.  * same job for us.
  1614.  */
  1615. for (SCpnt = SCdone; SCpnt != NULL; SCpnt = SCdone) {
  1616. SCdone = SCpnt->bh_next;
  1617. SCpnt->bh_next = NULL;
  1618.                 /*
  1619.                  * Oh, this is a vile hack.  scsi_done() expects a timer
  1620.                  * to be running on the command.  If there isn't, it assumes
  1621.                  * that the command has actually timed out, and a timer
  1622.                  * handler is running.  That may well be how we got into
  1623.                  * this fix, but right now things are stable.  We add
  1624.                  * a timer back again so that we can report completion.
  1625.                  * scsi_done() will immediately remove said timer from
  1626.                  * the command, and then process it.
  1627.                  */
  1628. scsi_add_timer(SCpnt, 100, scsi_eh_times_out);
  1629. scsi_done(SCpnt);
  1630. }
  1631. return (ourrtn);
  1632. }
  1633. /*
  1634.  * Function:  scsi_error_handler
  1635.  *
  1636.  * Purpose:     Handle errors/timeouts of scsi commands, try and clean up
  1637.  *              and unjam the bus, and restart things.
  1638.  *
  1639.  * Arguments:   host    - host for which we are running.
  1640.  *
  1641.  * Returns:     Never returns.
  1642.  *
  1643.  * Notes:       This is always run in the context of a kernel thread.  The
  1644.  *              idea is that we start this thing up when the kernel starts
  1645.  *              up (one per host that we detect), and it immediately goes to
  1646.  *              sleep and waits for some event (i.e. failure).  When this
  1647.  *              takes place, we have the job of trying to unjam the bus
  1648.  *              and restarting things.
  1649.  *
  1650.  */
  1651. void scsi_error_handler(void *data)
  1652. {
  1653. struct Scsi_Host *host = (struct Scsi_Host *) data;
  1654. int rtn;
  1655. DECLARE_MUTEX_LOCKED(sem);
  1656.         /*
  1657.          * We only listen to signals if the HA was loaded as a module.
  1658.          * If the HA was compiled into the kernel, then we don't listen
  1659.          * to any signals.
  1660.          */
  1661.         if( host->loaded_as_module ) {
  1662. siginitsetinv(&current->blocked, SHUTDOWN_SIGS);
  1663. } else {
  1664. siginitsetinv(&current->blocked, 0);
  1665.         }
  1666. lock_kernel();
  1667. /*
  1668.  *    Flush resources
  1669.  */
  1670. daemonize();
  1671. /*
  1672.  * Set the name of this process.
  1673.  */
  1674. sprintf(current->comm, "scsi_eh_%d", host->host_no);
  1675. host->eh_wait = &sem;
  1676. host->ehandler = current;
  1677. unlock_kernel();
  1678. /*
  1679.  * Wake up the thread that created us.
  1680.  */
  1681. SCSI_LOG_ERROR_RECOVERY(3, printk("Wake up parent %dn", host->eh_notify->count.counter));
  1682. up(host->eh_notify);
  1683. while (1) {
  1684. /*
  1685.  * If we get a signal, it means we are supposed to go
  1686.  * away and die.  This typically happens if the user is
  1687.  * trying to unload a module.
  1688.  */
  1689. SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler sleepingn"));
  1690. /*
  1691.  * Note - we always use down_interruptible with the semaphore
  1692.  * even if the module was loaded as part of the kernel.  The
  1693.  * reason is that down() will cause this thread to be counted
  1694.  * in the load average as a running process, and down
  1695.  * interruptible doesn't.  Given that we need to allow this
  1696.  * thread to die if the driver was loaded as a module, using
  1697.  * semaphores isn't unreasonable.
  1698.  */
  1699. down_interruptible(&sem);
  1700. if( host->loaded_as_module ) {
  1701. if (signal_pending(current))
  1702. break;
  1703.                 }
  1704. SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler waking upn"));
  1705. host->eh_active = 1;
  1706. /*
  1707.  * We have a host that is failing for some reason.  Figure out
  1708.  * what we need to do to get it up and online again (if we can).
  1709.  * If we fail, we end up taking the thing offline.
  1710.  */
  1711. if (host->hostt->eh_strategy_handler != NULL) {
  1712. rtn = host->hostt->eh_strategy_handler(host);
  1713. } else {
  1714. rtn = scsi_unjam_host(host);
  1715. }
  1716. host->eh_active = 0;
  1717. /*
  1718.  * Note - if the above fails completely, the action is to take
  1719.  * individual devices offline and flush the queue of any
  1720.  * outstanding requests that may have been pending.  When we
  1721.  * restart, we restart any I/O to any other devices on the bus
  1722.  * which are still online.
  1723.  */
  1724. scsi_restart_operations(host);
  1725. }
  1726. SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler exitingn"));
  1727. /*
  1728.  * Make sure that nobody tries to wake us up again.
  1729.  */
  1730. host->eh_wait = NULL;
  1731. /*
  1732.  * Knock this down too.  From this point on, the host is flying
  1733.  * without a pilot.  If this is because the module is being unloaded,
  1734.  * that's fine.  If the user sent a signal to this thing, we are
  1735.  * potentially in real danger.
  1736.  */
  1737. host->in_recovery = 0;
  1738. host->eh_active = 0;
  1739. host->ehandler = NULL;
  1740. /*
  1741.  * If anyone is waiting for us to exit (i.e. someone trying to unload
  1742.  * a driver), then wake up that process to let them know we are on
  1743.  * the way out the door.  This may be overkill - I *think* that we
  1744.  * could probably just unload the driver and send the signal, and when
  1745.  * the error handling thread wakes up that it would just exit without
  1746.  * needing to touch any memory associated with the driver itself.
  1747.  */
  1748. if (host->eh_notify != NULL)
  1749. up(host->eh_notify);
  1750. }
  1751. /*
  1752.  * Overrides for Emacs so that we follow Linus's tabbing style.
  1753.  * Emacs will notice this stuff at the end of the file and automatically
  1754.  * adjust the settings for this buffer only.  This must remain at the end
  1755.  * of the file.
  1756.  * ---------------------------------------------------------------------------
  1757.  * Local variables:
  1758.  * c-indent-level: 4
  1759.  * c-brace-imaginary-offset: 0
  1760.  * c-brace-offset: -4
  1761.  * c-argdecl-indent: 4
  1762.  * c-label-offset: -4
  1763.  * c-continued-statement-offset: 4
  1764.  * c-continued-brace-offset: 0
  1765.  * indent-tabs-mode: nil
  1766.  * tab-width: 8
  1767.  * End:
  1768.  */