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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  scsi_lib.c Copyright (C) 1999 Eric Youngdale
  3.  *
  4.  *  SCSI queueing library.
  5.  *      Initial versions: Eric Youngdale (eric@andante.org).
  6.  *                        Based upon conversations with large numbers
  7.  *                        of people at Linux Expo.
  8.  */
  9. /*
  10.  * The fundamental purpose of this file is to contain a library of utility
  11.  * routines that can be used by low-level drivers.   Ultimately the idea
  12.  * is that there should be a sufficiently rich number of functions that it
  13.  * would be possible for a driver author to fashion a queueing function for
  14.  * a low-level driver if they wished.   Note however that this file also
  15.  * contains the "default" versions of these functions, as we don't want to
  16.  * go through and retrofit queueing functions into all 30 some-odd drivers.
  17.  */
  18. #define __NO_VERSION__
  19. #include <linux/module.h>
  20. #include <linux/sched.h>
  21. #include <linux/timer.h>
  22. #include <linux/string.h>
  23. #include <linux/slab.h>
  24. #include <linux/ioport.h>
  25. #include <linux/kernel.h>
  26. #include <linux/stat.h>
  27. #include <linux/blk.h>
  28. #include <linux/interrupt.h>
  29. #include <linux/delay.h>
  30. #include <linux/smp_lock.h>
  31. #include <linux/completion.h>
  32. #define __KERNEL_SYSCALLS__
  33. #include <linux/unistd.h>
  34. #include <asm/system.h>
  35. #include <asm/irq.h>
  36. #include <asm/dma.h>
  37. #include "scsi.h"
  38. #include "hosts.h"
  39. #include "constants.h"
  40. #include <scsi/scsi_ioctl.h>
  41. /*
  42.  * This entire source file deals with the new queueing code.
  43.  */
  44. /*
  45.  * Function: __scsi_insert_special()
  46.  *
  47.  * Purpose: worker for scsi_insert_special_*()
  48.  *
  49.  * Arguments: q - request queue where request should be inserted
  50.  * rq - request to be inserted
  51.  *  data - private data
  52.  * at_head - insert request at head or tail of queue
  53.  *
  54.  * Lock status: Assumed that io_request_lock is not held upon entry.
  55.  *
  56.  * Returns: Nothing
  57.  */
  58. static void __scsi_insert_special(request_queue_t *q, struct request *rq,
  59.   void *data, int at_head)
  60. {
  61. unsigned long flags;
  62. ASSERT_LOCK(&io_request_lock, 0);
  63. rq->cmd = SPECIAL;
  64. rq->special = data;
  65. rq->q = NULL;
  66. rq->nr_segments = 0;
  67. rq->elevator_sequence = 0;
  68. /*
  69.  * We have the option of inserting the head or the tail of the queue.
  70.  * Typically we use the tail for new ioctls and so forth.  We use the
  71.  * head of the queue for things like a QUEUE_FULL message from a
  72.  * device, or a host that is unable to accept a particular command.
  73.  */
  74. spin_lock_irqsave(&io_request_lock, flags);
  75. if (at_head)
  76. list_add(&rq->queue, &q->queue_head);
  77. else
  78. list_add_tail(&rq->queue, &q->queue_head);
  79. q->request_fn(q);
  80. spin_unlock_irqrestore(&io_request_lock, flags);
  81. }
  82. /*
  83.  * Function:    scsi_insert_special_cmd()
  84.  *
  85.  * Purpose:     Insert pre-formed command into request queue.
  86.  *
  87.  * Arguments:   SCpnt   - command that is ready to be queued.
  88.  *              at_head - boolean.  True if we should insert at head
  89.  *                        of queue, false if we should insert at tail.
  90.  *
  91.  * Lock status: Assumed that lock is not held upon entry.
  92.  *
  93.  * Returns:     Nothing
  94.  *
  95.  * Notes:       This function is called from character device and from
  96.  *              ioctl types of functions where the caller knows exactly
  97.  *              what SCSI command needs to be issued.   The idea is that
  98.  *              we merely inject the command into the queue (at the head
  99.  *              for now), and then call the queue request function to actually
  100.  *              process it.
  101.  */
  102. int scsi_insert_special_cmd(Scsi_Cmnd * SCpnt, int at_head)
  103. {
  104. request_queue_t *q = &SCpnt->device->request_queue;
  105. __scsi_insert_special(q, &SCpnt->request, SCpnt, at_head);
  106. return 0;
  107. }
  108. /*
  109.  * Function:    scsi_insert_special_req()
  110.  *
  111.  * Purpose:     Insert pre-formed request into request queue.
  112.  *
  113.  * Arguments:   SRpnt   - request that is ready to be queued.
  114.  *              at_head - boolean.  True if we should insert at head
  115.  *                        of queue, false if we should insert at tail.
  116.  *
  117.  * Lock status: Assumed that lock is not held upon entry.
  118.  *
  119.  * Returns:     Nothing
  120.  *
  121.  * Notes:       This function is called from character device and from
  122.  *              ioctl types of functions where the caller knows exactly
  123.  *              what SCSI command needs to be issued.   The idea is that
  124.  *              we merely inject the command into the queue (at the head
  125.  *              for now), and then call the queue request function to actually
  126.  *              process it.
  127.  */
  128. int scsi_insert_special_req(Scsi_Request * SRpnt, int at_head)
  129. {
  130. request_queue_t *q = &SRpnt->sr_device->request_queue;
  131. __scsi_insert_special(q, &SRpnt->sr_request, SRpnt, at_head);
  132. return 0;
  133. }
  134. /*
  135.  * Function:    scsi_init_cmd_errh()
  136.  *
  137.  * Purpose:     Initialize SCpnt fields related to error handling.
  138.  *
  139.  * Arguments:   SCpnt   - command that is ready to be queued.
  140.  *
  141.  * Returns:     Nothing
  142.  *
  143.  * Notes:       This function has the job of initializing a number of
  144.  *              fields related to error handling.   Typically this will
  145.  *              be called once for each command, as required.
  146.  */
  147. int scsi_init_cmd_errh(Scsi_Cmnd * SCpnt)
  148. {
  149. ASSERT_LOCK(&io_request_lock, 0);
  150. SCpnt->owner = SCSI_OWNER_MIDLEVEL;
  151. SCpnt->reset_chain = NULL;
  152. SCpnt->serial_number = 0;
  153. SCpnt->serial_number_at_timeout = 0;
  154. SCpnt->flags = 0;
  155. SCpnt->retries = 0;
  156. SCpnt->abort_reason = 0;
  157. memset((void *) SCpnt->sense_buffer, 0, sizeof SCpnt->sense_buffer);
  158. if (SCpnt->cmd_len == 0)
  159. SCpnt->cmd_len = COMMAND_SIZE(SCpnt->cmnd[0]);
  160. /*
  161.  * We need saved copies of a number of fields - this is because
  162.  * error handling may need to overwrite these with different values
  163.  * to run different commands, and once error handling is complete,
  164.  * we will need to restore these values prior to running the actual
  165.  * command.
  166.  */
  167. SCpnt->old_use_sg = SCpnt->use_sg;
  168. SCpnt->old_cmd_len = SCpnt->cmd_len;
  169. SCpnt->sc_old_data_direction = SCpnt->sc_data_direction;
  170. SCpnt->old_underflow = SCpnt->underflow;
  171. memcpy((void *) SCpnt->data_cmnd,
  172.        (const void *) SCpnt->cmnd, sizeof(SCpnt->cmnd));
  173. SCpnt->buffer = SCpnt->request_buffer;
  174. SCpnt->bufflen = SCpnt->request_bufflen;
  175. SCpnt->reset_chain = NULL;
  176. SCpnt->internal_timeout = NORMAL_TIMEOUT;
  177. SCpnt->abort_reason = 0;
  178. return 1;
  179. }
  180. /*
  181.  * Function:    scsi_queue_next_request()
  182.  *
  183.  * Purpose:     Handle post-processing of completed commands.
  184.  *
  185.  * Arguments:   SCpnt   - command that may need to be requeued.
  186.  *
  187.  * Returns:     Nothing
  188.  *
  189.  * Notes:       After command completion, there may be blocks left
  190.  *              over which weren't finished by the previous command
  191.  *              this can be for a number of reasons - the main one is
  192.  *              that a medium error occurred, and the sectors after
  193.  *              the bad block need to be re-read.
  194.  *
  195.  *              If SCpnt is NULL, it means that the previous command
  196.  *              was completely finished, and we should simply start
  197.  *              a new command, if possible.
  198.  *
  199.  * This is where a lot of special case code has begun to
  200.  * accumulate.  It doesn't really affect readability or
  201.  * anything, but it might be considered architecturally
  202.  * inelegant.  If more of these special cases start to
  203.  * accumulate, I am thinking along the lines of implementing
  204.  * an atexit() like technology that gets run when commands
  205.  * complete.  I am not convinced that it is worth the
  206.  * added overhead, however.  Right now as things stand,
  207.  * there are simple conditional checks, and most hosts
  208.  * would skip past.
  209.  *
  210.  * Another possible solution would be to tailor different
  211.  * handler functions, sort of like what we did in scsi_merge.c.
  212.  * This is probably a better solution, but the number of different
  213.  * permutations grows as 2**N, and if too many more special cases
  214.  * get added, we start to get screwed.
  215.  */
  216. void scsi_queue_next_request(request_queue_t * q, Scsi_Cmnd * SCpnt)
  217. {
  218. int all_clear;
  219. unsigned long flags;
  220. Scsi_Device *SDpnt;
  221. struct Scsi_Host *SHpnt;
  222. ASSERT_LOCK(&io_request_lock, 0);
  223. spin_lock_irqsave(&io_request_lock, flags);
  224. if (SCpnt != NULL) {
  225. /*
  226.  * For some reason, we are not done with this request.
  227.  * This happens for I/O errors in the middle of the request,
  228.  * in which case we need to request the blocks that come after
  229.  * the bad sector.
  230.  */
  231. SCpnt->request.special = (void *) SCpnt;
  232. list_add(&SCpnt->request.queue, &q->queue_head);
  233. }
  234. /*
  235.  * Just hit the requeue function for the queue.
  236.  */
  237. q->request_fn(q);
  238. SDpnt = (Scsi_Device *) q->queuedata;
  239. SHpnt = SDpnt->host;
  240. /*
  241.  * If this is a single-lun device, and we are currently finished
  242.  * with this device, then see if we need to get another device
  243.  * started.  FIXME(eric) - if this function gets too cluttered
  244.  * with special case code, then spin off separate versions and
  245.  * use function pointers to pick the right one.
  246.  */
  247. if (SDpnt->single_lun
  248.     && list_empty(&q->queue_head)
  249.     && SDpnt->device_busy == 0) {
  250. request_queue_t *q;
  251. for (SDpnt = SHpnt->host_queue;
  252.      SDpnt;
  253.      SDpnt = SDpnt->next) {
  254. if (((SHpnt->can_queue > 0)
  255.      && (SHpnt->host_busy >= SHpnt->can_queue))
  256.     || (SHpnt->host_blocked)
  257.     || (SHpnt->host_self_blocked)
  258.     || (SDpnt->device_blocked)) {
  259. break;
  260. }
  261. q = &SDpnt->request_queue;
  262. q->request_fn(q);
  263. }
  264. }
  265. /*
  266.  * Now see whether there are other devices on the bus which
  267.  * might be starved.  If so, hit the request function.  If we
  268.  * don't find any, then it is safe to reset the flag.  If we
  269.  * find any device that it is starved, it isn't safe to reset the
  270.  * flag as the queue function releases the lock and thus some
  271.  * other device might have become starved along the way.
  272.  */
  273. all_clear = 1;
  274. if (SHpnt->some_device_starved) {
  275. for (SDpnt = SHpnt->host_queue; SDpnt; SDpnt = SDpnt->next) {
  276. request_queue_t *q;
  277. if ((SHpnt->can_queue > 0 && (SHpnt->host_busy >= SHpnt->can_queue))
  278.     || (SHpnt->host_blocked) 
  279.     || (SHpnt->host_self_blocked)) {
  280. break;
  281. }
  282. if (SDpnt->device_blocked || !SDpnt->starved) {
  283. continue;
  284. }
  285. q = &SDpnt->request_queue;
  286. q->request_fn(q);
  287. all_clear = 0;
  288. }
  289. if (SDpnt == NULL && all_clear) {
  290. SHpnt->some_device_starved = 0;
  291. }
  292. }
  293. spin_unlock_irqrestore(&io_request_lock, flags);
  294. }
  295. /*
  296.  * Function:    scsi_end_request()
  297.  *
  298.  * Purpose:     Post-processing of completed commands called from interrupt
  299.  *              handler or a bottom-half handler.
  300.  *
  301.  * Arguments:   SCpnt    - command that is complete.
  302.  *              uptodate - 1 if I/O indicates success, 0 for I/O error.
  303.  *              sectors  - number of sectors we want to mark.
  304.  * requeue  - indicates whether we should requeue leftovers.
  305.  * frequeue - indicates that if we release the command block
  306.  *    that the queue request function should be called.
  307.  *
  308.  * Lock status: Assumed that lock is not held upon entry.
  309.  *
  310.  * Returns:     Nothing
  311.  *
  312.  * Notes:       This is called for block device requests in order to
  313.  *              mark some number of sectors as complete.
  314.  * 
  315.  * We are guaranteeing that the request queue will be goosed
  316.  * at some point during this call.
  317.  */
  318. static Scsi_Cmnd *__scsi_end_request(Scsi_Cmnd * SCpnt, 
  319.      int uptodate, 
  320.      int sectors,
  321.      int requeue,
  322.      int frequeue)
  323. {
  324. struct request *req;
  325. struct buffer_head *bh;
  326.         Scsi_Device * SDpnt;
  327. int nsect;
  328. ASSERT_LOCK(&io_request_lock, 0);
  329. req = &SCpnt->request;
  330. req->errors = 0;
  331. if (!uptodate) {
  332. printk(" I/O error: dev %s, sector %lun",
  333.        kdevname(req->rq_dev), req->sector);
  334. }
  335. do {
  336. if ((bh = req->bh) != NULL) {
  337. nsect = bh->b_size >> 9;
  338. blk_finished_io(nsect);
  339. req->bh = bh->b_reqnext;
  340. bh->b_reqnext = NULL;
  341. sectors -= nsect;
  342. bh->b_end_io(bh, uptodate);
  343. if ((bh = req->bh) != NULL) {
  344. req->hard_sector += nsect;
  345. req->hard_nr_sectors -= nsect;
  346. req->sector += nsect;
  347. req->nr_sectors -= nsect;
  348. req->current_nr_sectors = bh->b_size >> 9;
  349. if (req->nr_sectors < req->current_nr_sectors) {
  350. req->nr_sectors = req->current_nr_sectors;
  351. printk("scsi_end_request: buffer-list destroyedn");
  352. }
  353. }
  354. }
  355. } while (sectors && bh);
  356. /*
  357.  * If there are blocks left over at the end, set up the command
  358.  * to queue the remainder of them.
  359.  */
  360. if (req->bh) {
  361.                 request_queue_t *q;
  362. if( !requeue )
  363. {
  364. return SCpnt;
  365. }
  366.                 q = &SCpnt->device->request_queue;
  367. req->buffer = bh->b_data;
  368. /*
  369.  * Bleah.  Leftovers again.  Stick the leftovers in
  370.  * the front of the queue, and goose the queue again.
  371.  */
  372. scsi_queue_next_request(q, SCpnt);
  373. return SCpnt;
  374. }
  375. /*
  376.  * This request is done.  If there is someone blocked waiting for this
  377.  * request, wake them up.  Typically used to wake up processes trying
  378.  * to swap a page into memory.
  379.  */
  380. if (req->waiting != NULL) {
  381. complete(req->waiting);
  382. }
  383. add_blkdev_randomness(MAJOR(req->rq_dev));
  384.         SDpnt = SCpnt->device;
  385. /*
  386.  * This will goose the queue request function at the end, so we don't
  387.  * need to worry about launching another command.
  388.  */
  389. __scsi_release_command(SCpnt);
  390. if( frequeue ) {
  391. request_queue_t *q;
  392. q = &SDpnt->request_queue;
  393. scsi_queue_next_request(q, NULL);                
  394. }
  395. return NULL;
  396. }
  397. /*
  398.  * Function:    scsi_end_request()
  399.  *
  400.  * Purpose:     Post-processing of completed commands called from interrupt
  401.  *              handler or a bottom-half handler.
  402.  *
  403.  * Arguments:   SCpnt    - command that is complete.
  404.  *              uptodate - 1 if I/O indicates success, 0 for I/O error.
  405.  *              sectors  - number of sectors we want to mark.
  406.  *
  407.  * Lock status: Assumed that lock is not held upon entry.
  408.  *
  409.  * Returns:     Nothing
  410.  *
  411.  * Notes:       This is called for block device requests in order to
  412.  *              mark some number of sectors as complete.
  413.  * 
  414.  * We are guaranteeing that the request queue will be goosed
  415.  * at some point during this call.
  416.  */
  417. Scsi_Cmnd *scsi_end_request(Scsi_Cmnd * SCpnt, int uptodate, int sectors)
  418. {
  419. return __scsi_end_request(SCpnt, uptodate, sectors, 1, 1);
  420. }
  421. /*
  422.  * Function:    scsi_release_buffers()
  423.  *
  424.  * Purpose:     Completion processing for block device I/O requests.
  425.  *
  426.  * Arguments:   SCpnt   - command that we are bailing.
  427.  *
  428.  * Lock status: Assumed that no lock is held upon entry.
  429.  *
  430.  * Returns:     Nothing
  431.  *
  432.  * Notes:       In the event that an upper level driver rejects a
  433.  * command, we must release resources allocated during
  434.  * the __init_io() function.  Primarily this would involve
  435.  * the scatter-gather table, and potentially any bounce
  436.  * buffers.
  437.  */
  438. static void scsi_release_buffers(Scsi_Cmnd * SCpnt)
  439. {
  440. ASSERT_LOCK(&io_request_lock, 0);
  441. /*
  442.  * Free up any indirection buffers we allocated for DMA purposes. 
  443.  */
  444. if (SCpnt->use_sg) {
  445. struct scatterlist *sgpnt;
  446. void **bbpnt;
  447. int i;
  448. sgpnt = (struct scatterlist *) SCpnt->request_buffer;
  449. bbpnt = SCpnt->bounce_buffers;
  450. if (bbpnt) {
  451. for (i = 0; i < SCpnt->use_sg; i++) {
  452. if (bbpnt[i])
  453. scsi_free(sgpnt[i].address, sgpnt[i].length);
  454. }
  455. }
  456. scsi_free(SCpnt->request_buffer, SCpnt->sglist_len);
  457. } else {
  458. if (SCpnt->request_buffer != SCpnt->request.buffer) {
  459. scsi_free(SCpnt->request_buffer, SCpnt->request_bufflen);
  460. }
  461. }
  462. /*
  463.  * Zero these out.  They now point to freed memory, and it is
  464.  * dangerous to hang onto the pointers.
  465.  */
  466. SCpnt->buffer  = NULL;
  467. SCpnt->bufflen = 0;
  468. SCpnt->request_buffer = NULL;
  469. SCpnt->request_bufflen = 0;
  470. }
  471. /*
  472.  * Function:    scsi_io_completion()
  473.  *
  474.  * Purpose:     Completion processing for block device I/O requests.
  475.  *
  476.  * Arguments:   SCpnt   - command that is finished.
  477.  *
  478.  * Lock status: Assumed that no lock is held upon entry.
  479.  *
  480.  * Returns:     Nothing
  481.  *
  482.  * Notes:       This function is matched in terms of capabilities to
  483.  *              the function that created the scatter-gather list.
  484.  *              In other words, if there are no bounce buffers
  485.  *              (the normal case for most drivers), we don't need
  486.  *              the logic to deal with cleaning up afterwards.
  487.  */
  488. void scsi_io_completion(Scsi_Cmnd * SCpnt, int good_sectors,
  489. int block_sectors)
  490. {
  491. int result = SCpnt->result;
  492. int this_count = SCpnt->bufflen >> 9;
  493. request_queue_t *q = &SCpnt->device->request_queue;
  494. /*
  495.  * We must do one of several things here:
  496.  *
  497.  * Call scsi_end_request.  This will finish off the specified
  498.  * number of sectors.  If we are done, the command block will
  499.  * be released, and the queue function will be goosed.  If we
  500.  * are not done, then scsi_end_request will directly goose
  501.  * the queue.
  502.  *
  503.  * We can just use scsi_queue_next_request() here.  This
  504.  * would be used if we just wanted to retry, for example.
  505.  *
  506.  */
  507. ASSERT_LOCK(&io_request_lock, 0);
  508. /*
  509.  * Free up any indirection buffers we allocated for DMA purposes. 
  510.  * For the case of a READ, we need to copy the data out of the
  511.  * bounce buffer and into the real buffer.
  512.  */
  513. if (SCpnt->use_sg) {
  514. struct scatterlist *sgpnt;
  515. void **bbpnt;
  516. int i;
  517. sgpnt = (struct scatterlist *) SCpnt->buffer;
  518. bbpnt = SCpnt->bounce_buffers;
  519. if (bbpnt) {
  520. for (i = 0; i < SCpnt->use_sg; i++) {
  521. if (bbpnt[i]) {
  522. if (SCpnt->request.cmd == READ) {
  523. memcpy(bbpnt[i],
  524.        sgpnt[i].address,
  525.        sgpnt[i].length);
  526. }
  527. scsi_free(sgpnt[i].address, sgpnt[i].length);
  528. }
  529. }
  530. }
  531. scsi_free(SCpnt->buffer, SCpnt->sglist_len);
  532. } else {
  533. if (SCpnt->buffer != SCpnt->request.buffer) {
  534. if (SCpnt->request.cmd == READ) {
  535. memcpy(SCpnt->request.buffer, SCpnt->buffer,
  536.        SCpnt->bufflen);
  537. }
  538. scsi_free(SCpnt->buffer, SCpnt->bufflen);
  539. }
  540. }
  541. /*
  542.  * Zero these out.  They now point to freed memory, and it is
  543.  * dangerous to hang onto the pointers.
  544.  */
  545. SCpnt->buffer  = NULL;
  546. SCpnt->bufflen = 0;
  547. SCpnt->request_buffer = NULL;
  548. SCpnt->request_bufflen = 0;
  549. /*
  550.  * Next deal with any sectors which we were able to correctly
  551.  * handle.
  552.  */
  553. if (good_sectors > 0) {
  554. SCSI_LOG_HLCOMPLETE(1, printk("%ld sectors total, %d sectors done.n",
  555.       SCpnt->request.nr_sectors,
  556.       good_sectors));
  557. SCSI_LOG_HLCOMPLETE(1, printk("use_sg is %dn ", SCpnt->use_sg));
  558. SCpnt->request.errors = 0;
  559. /*
  560.  * If multiple sectors are requested in one buffer, then
  561.  * they will have been finished off by the first command.
  562.  * If not, then we have a multi-buffer command.
  563.  *
  564.  * If block_sectors != 0, it means we had a medium error
  565.  * of some sort, and that we want to mark some number of
  566.  * sectors as not uptodate.  Thus we want to inhibit
  567.  * requeueing right here - we will requeue down below
  568.  * when we handle the bad sectors.
  569.  */
  570. SCpnt = __scsi_end_request(SCpnt, 
  571.    1, 
  572.    good_sectors,
  573.    result == 0,
  574.    1);
  575. /*
  576.  * If the command completed without error, then either finish off the
  577.  * rest of the command, or start a new one.
  578.  */
  579. if (result == 0 || SCpnt == NULL ) {
  580. return;
  581. }
  582. }
  583. /*
  584.  * Now, if we were good little boys and girls, Santa left us a request
  585.  * sense buffer.  We can extract information from this, so we
  586.  * can choose a block to remap, etc.
  587.  */
  588. if (driver_byte(result) != 0) {
  589. if (suggestion(result) == SUGGEST_REMAP) {
  590. #ifdef REMAP
  591. /*
  592.  * Not yet implemented.  A read will fail after being remapped,
  593.  * a write will call the strategy routine again.
  594.  */
  595. if (SCpnt->device->remap) {
  596. result = 0;
  597. }
  598. #endif
  599. }
  600. if ((SCpnt->sense_buffer[0] & 0x7f) == 0x70) {
  601. /*
  602.  * If the device is in the process of becoming ready,
  603.  * retry.
  604.  */
  605. if (SCpnt->sense_buffer[12] == 0x04 &&
  606.     SCpnt->sense_buffer[13] == 0x01) {
  607. scsi_queue_next_request(q, SCpnt);
  608. return;
  609. }
  610. if ((SCpnt->sense_buffer[2] & 0xf) == UNIT_ATTENTION) {
  611. if (SCpnt->device->removable) {
  612. /* detected disc change.  set a bit 
  613.  * and quietly refuse further access.
  614.    */
  615. SCpnt->device->changed = 1;
  616. SCpnt = scsi_end_request(SCpnt, 0, this_count);
  617. return;
  618. } else {
  619. /*
  620.   * Must have been a power glitch, or a
  621.   * bus reset.  Could not have been a
  622.   * media change, so we just retry the
  623.   * request and see what happens.  
  624.   */
  625. scsi_queue_next_request(q, SCpnt);
  626. return;
  627. }
  628. }
  629. }
  630. /* If we had an ILLEGAL REQUEST returned, then we may have
  631.  * performed an unsupported command.  The only thing this should be
  632.  * would be a ten byte read where only a six byte read was supported.
  633.  * Also, on a system where READ CAPACITY failed, we have have read
  634.  * past the end of the disk.
  635.  */
  636. switch (SCpnt->sense_buffer[2]) {
  637. case ILLEGAL_REQUEST:
  638. if (SCpnt->device->ten) {
  639. SCpnt->device->ten = 0;
  640. /*
  641.  * This will cause a retry with a 6-byte
  642.  * command.
  643.  */
  644. scsi_queue_next_request(q, SCpnt);
  645. result = 0;
  646. } else {
  647. SCpnt = scsi_end_request(SCpnt, 0, this_count);
  648. return;
  649. }
  650. break;
  651. case NOT_READY:
  652. printk(KERN_INFO "Device %s not ready.n",
  653.        kdevname(SCpnt->request.rq_dev));
  654. SCpnt = scsi_end_request(SCpnt, 0, this_count);
  655. return;
  656. break;
  657. case MEDIUM_ERROR:
  658. case VOLUME_OVERFLOW:
  659. printk("scsi%d: ERROR on channel %d, id %d, lun %d, CDB: ",
  660.        SCpnt->host->host_no, (int) SCpnt->channel,
  661.        (int) SCpnt->target, (int) SCpnt->lun);
  662. print_command(SCpnt->cmnd);
  663. print_sense("sd", SCpnt);
  664. SCpnt = scsi_end_request(SCpnt, 0, block_sectors);
  665. return;
  666. default:
  667. break;
  668. }
  669. } /* driver byte != 0 */
  670. if (host_byte(result) == DID_RESET) {
  671. /*
  672.  * Third party bus reset or reset for error
  673.  * recovery reasons.  Just retry the request
  674.  * and see what happens.  
  675.  */
  676. scsi_queue_next_request(q, SCpnt);
  677. return;
  678. }
  679. if (result) {
  680. struct Scsi_Device_Template *STpnt;
  681. STpnt = scsi_get_request_dev(&SCpnt->request);
  682. printk("SCSI %s error : host %d channel %d id %d lun %d return code = %xn",
  683.        (STpnt ? STpnt->name : "device"),
  684.        SCpnt->device->host->host_no,
  685.        SCpnt->device->channel,
  686.        SCpnt->device->id,
  687.        SCpnt->device->lun, result);
  688. if (driver_byte(result) & DRIVER_SENSE)
  689. print_sense("sd", SCpnt);
  690. /*
  691.  * Mark a single buffer as not uptodate.  Queue the remainder.
  692.  * We sometimes get this cruft in the event that a medium error
  693.  * isn't properly reported.
  694.  */
  695. SCpnt = scsi_end_request(SCpnt, 0, SCpnt->request.current_nr_sectors);
  696. return;
  697. }
  698. }
  699. /*
  700.  * Function:    scsi_get_request_dev()
  701.  *
  702.  * Purpose:     Find the upper-level driver that is responsible for this
  703.  *              request
  704.  *
  705.  * Arguments:   request   - I/O request we are preparing to queue.
  706.  *
  707.  * Lock status: No locks assumed to be held, but as it happens the
  708.  *              io_request_lock is held when this is called.
  709.  *
  710.  * Returns:     Nothing
  711.  *
  712.  * Notes:       The requests in the request queue may have originated
  713.  *              from any block device driver.  We need to find out which
  714.  *              one so that we can later form the appropriate command.
  715.  */
  716. struct Scsi_Device_Template *scsi_get_request_dev(struct request *req)
  717. {
  718. struct Scsi_Device_Template *spnt;
  719. kdev_t dev = req->rq_dev;
  720. int major = MAJOR(dev);
  721. ASSERT_LOCK(&io_request_lock, 1);
  722. for (spnt = scsi_devicelist; spnt; spnt = spnt->next) {
  723. /*
  724.  * Search for a block device driver that supports this
  725.  * major.
  726.  */
  727. if (spnt->blk && spnt->major == major) {
  728. return spnt;
  729. }
  730. /*
  731.  * I am still not entirely satisfied with this solution,
  732.  * but it is good enough for now.  Disks have a number of
  733.  * major numbers associated with them, the primary
  734.  * 8, which we test above, and a secondary range of 7
  735.  * different consecutive major numbers.   If this ever
  736.  * becomes insufficient, then we could add another function
  737.  * to the structure, and generalize this completely.
  738.  */
  739. if( spnt->min_major != 0 
  740.     && spnt->max_major != 0
  741.     && major >= spnt->min_major
  742.     && major <= spnt->max_major )
  743. {
  744. return spnt;
  745. }
  746. }
  747. return NULL;
  748. }
  749. /*
  750.  * Function:    scsi_request_fn()
  751.  *
  752.  * Purpose:     Generic version of request function for SCSI hosts.
  753.  *
  754.  * Arguments:   q       - Pointer to actual queue.
  755.  *
  756.  * Returns:     Nothing
  757.  *
  758.  * Lock status: IO request lock assumed to be held when called.
  759.  *
  760.  * Notes:       The theory is that this function is something which individual
  761.  *              drivers could also supply if they wished to.   The problem
  762.  *              is that we have 30 some odd low-level drivers in the kernel
  763.  *              tree already, and it would be most difficult to retrofit
  764.  *              this crap into all of them.   Thus this function has the job
  765.  *              of acting as a generic queue manager for all of those existing
  766.  *              drivers.
  767.  */
  768. void scsi_request_fn(request_queue_t * q)
  769. {
  770. struct request *req;
  771. Scsi_Cmnd *SCpnt;
  772. Scsi_Request *SRpnt;
  773. Scsi_Device *SDpnt;
  774. struct Scsi_Host *SHpnt;
  775. struct Scsi_Device_Template *STpnt;
  776. ASSERT_LOCK(&io_request_lock, 1);
  777. SDpnt = (Scsi_Device *) q->queuedata;
  778. if (!SDpnt) {
  779. panic("Missing device");
  780. }
  781. SHpnt = SDpnt->host;
  782. /*
  783.  * To start with, we keep looping until the queue is empty, or until
  784.  * the host is no longer able to accept any more requests.
  785.  */
  786. while (1 == 1) {
  787. /*
  788.  * Check this again - each time we loop through we will have
  789.  * released the lock and grabbed it again, so each time
  790.  * we need to check to see if the queue is plugged or not.
  791.  */
  792. if (SHpnt->in_recovery || q->plugged)
  793. return;
  794. /*
  795.  * If the device cannot accept another request, then quit.
  796.  */
  797. if (SDpnt->device_blocked) {
  798. break;
  799. }
  800. if ((SHpnt->can_queue > 0 && (SHpnt->host_busy >= SHpnt->can_queue))
  801.     || (SHpnt->host_blocked) 
  802.     || (SHpnt->host_self_blocked)) {
  803. /*
  804.  * If we are unable to process any commands at all for
  805.  * this device, then we consider it to be starved.
  806.  * What this means is that there are no outstanding
  807.  * commands for this device and hence we need a
  808.  * little help getting it started again
  809.  * once the host isn't quite so busy.
  810.  */
  811. if (SDpnt->device_busy == 0) {
  812. SDpnt->starved = 1;
  813. SHpnt->some_device_starved = 1;
  814. }
  815. break;
  816. } else {
  817. SDpnt->starved = 0;
  818. }
  819.   /*
  820.  * FIXME(eric)
  821.  * I am not sure where the best place to do this is.  We need
  822.  * to hook in a place where we are likely to come if in user
  823.  * space.   Technically the error handling thread should be
  824.  * doing this crap, but the error handler isn't used by
  825.  * most hosts.
  826.  */
  827. if (SDpnt->was_reset) {
  828. /*
  829.  * We need to relock the door, but we might
  830.  * be in an interrupt handler.  Only do this
  831.  * from user space, since we do not want to
  832.  * sleep from an interrupt.
  833.  *
  834.  * FIXME(eric) - have the error handler thread do
  835.  * this work.
  836.  */
  837. SDpnt->was_reset = 0;
  838. if (SDpnt->removable && !in_interrupt()) {
  839. spin_unlock_irq(&io_request_lock);
  840. scsi_ioctl(SDpnt, SCSI_IOCTL_DOORLOCK, 0);
  841. spin_lock_irq(&io_request_lock);
  842. continue;
  843. }
  844. }
  845. /*
  846.  * If we couldn't find a request that could be queued, then we
  847.  * can also quit.
  848.  */
  849. if (list_empty(&q->queue_head))
  850. break;
  851. /*
  852.  * Loop through all of the requests in this queue, and find
  853.  * one that is queueable.
  854.  */
  855. req = blkdev_entry_next_request(&q->queue_head);
  856. /*
  857.  * Find the actual device driver associated with this command.
  858.  * The SPECIAL requests are things like character device or
  859.  * ioctls, which did not originate from ll_rw_blk.  Note that
  860.  * the special field is also used to indicate the SCpnt for
  861.  * the remainder of a partially fulfilled request that can 
  862.  * come up when there is a medium error.  We have to treat
  863.  * these two cases differently.  We differentiate by looking
  864.  * at request.cmd, as this tells us the real story.
  865.  */
  866. if (req->cmd == SPECIAL) {
  867. STpnt = NULL;
  868. SCpnt = (Scsi_Cmnd *) req->special;
  869. SRpnt = (Scsi_Request *) req->special;
  870. if( SRpnt->sr_magic == SCSI_REQ_MAGIC ) {
  871. SCpnt = scsi_allocate_device(SRpnt->sr_device, 
  872.      FALSE, FALSE);
  873. if( !SCpnt ) {
  874. break;
  875. }
  876. scsi_init_cmd_from_req(SCpnt, SRpnt);
  877. }
  878. } else {
  879. SRpnt = NULL;
  880. STpnt = scsi_get_request_dev(req);
  881. if (!STpnt) {
  882. panic("Unable to find device associated with request");
  883. }
  884. /*
  885.  * Now try and find a command block that we can use.
  886.  */
  887. if( req->special != NULL ) {
  888. SCpnt = (Scsi_Cmnd *) req->special;
  889. /*
  890.  * We need to recount the number of
  891.  * scatter-gather segments here - the
  892.  * normal case code assumes this to be
  893.  * correct, as it would be a performance
  894.  * lose to always recount.  Handling
  895.  * errors is always unusual, of course.
  896.  */
  897. recount_segments(SCpnt);
  898. } else {
  899. SCpnt = scsi_allocate_device(SDpnt, FALSE, FALSE);
  900. }
  901. /*
  902.  * If so, we are ready to do something.  Bump the count
  903.  * while the queue is locked and then break out of the
  904.  * loop. Otherwise loop around and try another request.
  905.  */
  906. if (!SCpnt) {
  907. break;
  908. }
  909. }
  910. /*
  911.  * Now bump the usage count for both the host and the
  912.  * device.
  913.  */
  914. SHpnt->host_busy++;
  915. SDpnt->device_busy++;
  916. /*
  917.  * Finally, before we release the lock, we copy the
  918.  * request to the command block, and remove the
  919.  * request from the request list.   Note that we always
  920.  * operate on the queue head - there is absolutely no
  921.  * reason to search the list, because all of the commands
  922.  * in this queue are for the same device.
  923.  */
  924. blkdev_dequeue_request(req);
  925. if (req != &SCpnt->request && req != &SRpnt->sr_request ) {
  926. memcpy(&SCpnt->request, req, sizeof(struct request));
  927. /*
  928.  * We have copied the data out of the request block -
  929.  * it is now in a field in SCpnt.  Release the request
  930.  * block.
  931.  */
  932. blkdev_release_request(req);
  933. }
  934. /*
  935.  * Now it is finally safe to release the lock.  We are
  936.  * not going to noodle the request list until this
  937.  * request has been queued and we loop back to queue
  938.  * another.  
  939.  */
  940. req = NULL;
  941. spin_unlock_irq(&io_request_lock);
  942. if (SCpnt->request.cmd != SPECIAL) {
  943. /*
  944.  * This will do a couple of things:
  945.  *  1) Fill in the actual SCSI command.
  946.  *  2) Fill in any other upper-level specific fields
  947.  * (timeout).
  948.  *
  949.  * If this returns 0, it means that the request failed
  950.  * (reading past end of disk, reading offline device,
  951.  * etc).   This won't actually talk to the device, but
  952.  * some kinds of consistency checking may cause the
  953.  * request to be rejected immediately.
  954.  */
  955. if (STpnt == NULL) {
  956. STpnt = scsi_get_request_dev(req);
  957. }
  958. /* 
  959.  * This sets up the scatter-gather table (allocating if
  960.  * required).  Hosts that need bounce buffers will also
  961.  * get those allocated here.  
  962.  */
  963. if (!SDpnt->scsi_init_io_fn(SCpnt)) {
  964. SCpnt = __scsi_end_request(SCpnt, 0, 
  965.    SCpnt->request.nr_sectors, 0, 0);
  966. if( SCpnt != NULL )
  967. {
  968. panic("Should not have leftover blocksn");
  969. }
  970. spin_lock_irq(&io_request_lock);
  971. SHpnt->host_busy--;
  972. SDpnt->device_busy--;
  973. continue;
  974. }
  975. /*
  976.  * Initialize the actual SCSI command for this request.
  977.  */
  978. if (!STpnt->init_command(SCpnt)) {
  979. scsi_release_buffers(SCpnt);
  980. SCpnt = __scsi_end_request(SCpnt, 0, 
  981.    SCpnt->request.nr_sectors, 0, 0);
  982. if( SCpnt != NULL )
  983. {
  984. panic("Should not have leftover blocksn");
  985. }
  986. spin_lock_irq(&io_request_lock);
  987. SHpnt->host_busy--;
  988. SDpnt->device_busy--;
  989. continue;
  990. }
  991. }
  992. /*
  993.  * Finally, initialize any error handling parameters, and set up
  994.  * the timers for timeouts.
  995.  */
  996. scsi_init_cmd_errh(SCpnt);
  997. /*
  998.  * Dispatch the command to the low-level driver.
  999.  */
  1000. scsi_dispatch_cmd(SCpnt);
  1001. /*
  1002.  * Now we need to grab the lock again.  We are about to mess
  1003.  * with the request queue and try to find another command.
  1004.  */
  1005. spin_lock_irq(&io_request_lock);
  1006. }
  1007. }
  1008. /*
  1009.  * Function:    scsi_block_requests()
  1010.  *
  1011.  * Purpose:     Utility function used by low-level drivers to prevent further
  1012.  * commands from being queued to the device.
  1013.  *
  1014.  * Arguments:   SHpnt       - Host in question
  1015.  *
  1016.  * Returns:     Nothing
  1017.  *
  1018.  * Lock status: No locks are assumed held.
  1019.  *
  1020.  * Notes:       There is no timer nor any other means by which the requests
  1021.  * get unblocked other than the low-level driver calling
  1022.  * scsi_unblock_requests().
  1023.  */
  1024. void scsi_block_requests(struct Scsi_Host * SHpnt)
  1025. {
  1026. SHpnt->host_self_blocked = TRUE;
  1027. }
  1028. /*
  1029.  * Function:    scsi_unblock_requests()
  1030.  *
  1031.  * Purpose:     Utility function used by low-level drivers to allow further
  1032.  * commands from being queued to the device.
  1033.  *
  1034.  * Arguments:   SHpnt       - Host in question
  1035.  *
  1036.  * Returns:     Nothing
  1037.  *
  1038.  * Lock status: No locks are assumed held.
  1039.  *
  1040.  * Notes:       There is no timer nor any other means by which the requests
  1041.  * get unblocked other than the low-level driver calling
  1042.  * scsi_unblock_requests().
  1043.  *
  1044.  * This is done as an API function so that changes to the
  1045.  * internals of the scsi mid-layer won't require wholesale
  1046.  * changes to drivers that use this feature.
  1047.  */
  1048. void scsi_unblock_requests(struct Scsi_Host * SHpnt)
  1049. {
  1050. Scsi_Device *SDloop;
  1051. SHpnt->host_self_blocked = FALSE;
  1052. /* Now that we are unblocked, try to start the queues. */
  1053. for (SDloop = SHpnt->host_queue; SDloop; SDloop = SDloop->next)
  1054. scsi_queue_next_request(&SDloop->request_queue, NULL);
  1055. }
  1056. /*
  1057.  * Function:    scsi_report_bus_reset()
  1058.  *
  1059.  * Purpose:     Utility function used by low-level drivers to report that
  1060.  * they have observed a bus reset on the bus being handled.
  1061.  *
  1062.  * Arguments:   SHpnt       - Host in question
  1063.  * channel     - channel on which reset was observed.
  1064.  *
  1065.  * Returns:     Nothing
  1066.  *
  1067.  * Lock status: No locks are assumed held.
  1068.  *
  1069.  * Notes:       This only needs to be called if the reset is one which
  1070.  * originates from an unknown location.  Resets originated
  1071.  * by the mid-level itself don't need to call this, but there
  1072.  * should be no harm.
  1073.  *
  1074.  * The main purpose of this is to make sure that a CHECK_CONDITION
  1075.  * is properly treated.
  1076.  */
  1077. void scsi_report_bus_reset(struct Scsi_Host * SHpnt, int channel)
  1078. {
  1079. Scsi_Device *SDloop;
  1080. for (SDloop = SHpnt->host_queue; SDloop; SDloop = SDloop->next) {
  1081. if (channel == SDloop->channel) {
  1082. SDloop->was_reset = 1;
  1083. SDloop->expecting_cc_ua = 1;
  1084. }
  1085. }
  1086. }
  1087. /*
  1088.  * FIXME(eric) - these are empty stubs for the moment.  I need to re-implement
  1089.  * host blocking from scratch. The theory is that hosts that wish to block
  1090.  * will register/deregister using these functions instead of the old way
  1091.  * of setting the wish_block flag.
  1092.  *
  1093.  * The details of the implementation remain to be settled, however the
  1094.  * stubs are here now so that the actual drivers will properly compile.
  1095.  */
  1096. void scsi_register_blocked_host(struct Scsi_Host * SHpnt)
  1097. {
  1098. }
  1099. void scsi_deregister_blocked_host(struct Scsi_Host * SHpnt)
  1100. {
  1101. }