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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/drivers/block/ll_rw_blk.c
  3.  *
  4.  * Copyright (C) 1991, 1992 Linus Torvalds
  5.  * Copyright (C) 1994,      Karl Keyte: Added support for disk statistics
  6.  * Elevator latency, (C) 2000  Andrea Arcangeli <andrea@suse.de> SuSE
  7.  * Queue request tables / lock, selectable elevator, Jens Axboe <axboe@suse.de>
  8.  * kernel-doc documentation started by NeilBrown <neilb@cse.unsw.edu.au> -  July2000
  9.  */
  10. /*
  11.  * This handles all read/write requests to block devices
  12.  */
  13. #include <linux/sched.h>
  14. #include <linux/kernel.h>
  15. #include <linux/kernel_stat.h>
  16. #include <linux/errno.h>
  17. #include <linux/string.h>
  18. #include <linux/config.h>
  19. #include <linux/locks.h>
  20. #include <linux/mm.h>
  21. #include <linux/swap.h>
  22. #include <linux/init.h>
  23. #include <linux/smp_lock.h>
  24. #include <linux/completion.h>
  25. #include <asm/system.h>
  26. #include <asm/io.h>
  27. #include <linux/blk.h>
  28. #include <linux/highmem.h>
  29. #include <linux/slab.h>
  30. #include <linux/module.h>
  31. /* Maybe something to cleanup in 2.3?
  32.  * We shouldn't touch 0x3f2 on machines which don't have a PC floppy controller
  33.  * - it may contain something else which could cause a system hang.  This is
  34.  * now selected by a configuration option, but maybe it ought to be in the
  35.  * floppy code itself? - rmk
  36.  */
  37. #if defined(__i386__) || (defined(__arm__) && defined(CONFIG_ARCH_ACORN))
  38. #define FLOPPY_BOOT_DISABLE
  39. #endif
  40. #ifdef CONFIG_BLK_DEV_FD
  41. #undef FLOPPY_BOOT_DISABLE
  42. #endif
  43. /*
  44.  * MAC Floppy IWM hooks
  45.  */
  46. #ifdef CONFIG_MAC_FLOPPY_IWM
  47. extern int mac_floppy_init(void);
  48. #endif
  49. /*
  50.  * For the allocated request tables
  51.  */
  52. static kmem_cache_t *request_cachep;
  53. /*
  54.  * The "disk" task queue is used to start the actual requests
  55.  * after a plug
  56.  */
  57. DECLARE_TASK_QUEUE(tq_disk);
  58. /*
  59.  * Protect the request list against multiple users..
  60.  *
  61.  * With this spinlock the Linux block IO subsystem is 100% SMP threaded
  62.  * from the IRQ event side, and almost 100% SMP threaded from the syscall
  63.  * side (we still have protect against block device array operations, and
  64.  * the do_request() side is casually still unsafe. The kernel lock protects
  65.  * this part currently.).
  66.  *
  67.  * there is a fair chance that things will work just OK if these functions
  68.  * are called with no global kernel lock held ...
  69.  */
  70. spinlock_t io_request_lock = SPIN_LOCK_UNLOCKED;
  71. /* This specifies how many sectors to read ahead on the disk. */
  72. int read_ahead[MAX_BLKDEV];
  73. /* blk_dev_struct is:
  74.  * *request_fn
  75.  * *current_request
  76.  */
  77. struct blk_dev_struct blk_dev[MAX_BLKDEV]; /* initialized by blk_dev_init() */
  78. /*
  79.  * blk_size contains the size of all block-devices in units of 1024 byte
  80.  * sectors:
  81.  *
  82.  * blk_size[MAJOR][MINOR]
  83.  *
  84.  * if (!blk_size[MAJOR]) then no minor size checking is done.
  85.  */
  86. int * blk_size[MAX_BLKDEV];
  87. /*
  88.  * blksize_size contains the size of all block-devices:
  89.  *
  90.  * blksize_size[MAJOR][MINOR]
  91.  *
  92.  * if (!blksize_size[MAJOR]) then 1024 bytes is assumed.
  93.  */
  94. int * blksize_size[MAX_BLKDEV];
  95. /*
  96.  * hardsect_size contains the size of the hardware sector of a device.
  97.  *
  98.  * hardsect_size[MAJOR][MINOR]
  99.  *
  100.  * if (!hardsect_size[MAJOR])
  101.  * then 512 bytes is assumed.
  102.  * else
  103.  * sector_size is hardsect_size[MAJOR][MINOR]
  104.  * This is currently set by some scsi devices and read by the msdos fs driver.
  105.  * Other uses may appear later.
  106.  */
  107. int * hardsect_size[MAX_BLKDEV];
  108. /*
  109.  * The following tunes the read-ahead algorithm in mm/filemap.c
  110.  */
  111. int * max_readahead[MAX_BLKDEV];
  112. /*
  113.  * Max number of sectors per request
  114.  */
  115. int * max_sectors[MAX_BLKDEV];
  116. /*
  117.  * How many reqeusts do we allocate per queue,
  118.  * and how many do we "batch" on freeing them?
  119.  */
  120. static int queue_nr_requests, batch_requests;
  121. static inline int get_max_sectors(kdev_t dev)
  122. {
  123. if (!max_sectors[MAJOR(dev)])
  124. return MAX_SECTORS;
  125. return max_sectors[MAJOR(dev)][MINOR(dev)];
  126. }
  127. inline request_queue_t *blk_get_queue(kdev_t dev)
  128. {
  129. struct blk_dev_struct *bdev = blk_dev + MAJOR(dev);
  130. if (bdev->queue)
  131. return bdev->queue(dev);
  132. else
  133. return &blk_dev[MAJOR(dev)].request_queue;
  134. }
  135. static int __blk_cleanup_queue(struct request_list *list)
  136. {
  137. struct list_head *head = &list->free;
  138. struct request *rq;
  139. int i = 0;
  140. while (!list_empty(head)) {
  141. rq = list_entry(head->next, struct request, queue);
  142. list_del(&rq->queue);
  143. kmem_cache_free(request_cachep, rq);
  144. i++;
  145. };
  146. if (i != list->count)
  147. printk("request list leak!n");
  148. list->count = 0;
  149. return i;
  150. }
  151. /**
  152.  * blk_cleanup_queue: - release a &request_queue_t when it is no longer needed
  153.  * @q:    the request queue to be released
  154.  *
  155.  * Description:
  156.  *     blk_cleanup_queue is the pair to blk_init_queue().  It should
  157.  *     be called when a request queue is being released; typically
  158.  *     when a block device is being de-registered.  Currently, its
  159.  *     primary task it to free all the &struct request structures that
  160.  *     were allocated to the queue.
  161.  * Caveat: 
  162.  *     Hopefully the low level driver will have finished any
  163.  *     outstanding requests first...
  164.  **/
  165. void blk_cleanup_queue(request_queue_t * q)
  166. {
  167. int count = queue_nr_requests;
  168. count -= __blk_cleanup_queue(&q->rq[READ]);
  169. count -= __blk_cleanup_queue(&q->rq[WRITE]);
  170. if (count)
  171. printk("blk_cleanup_queue: leaked requests (%d)n", count);
  172. memset(q, 0, sizeof(*q));
  173. }
  174. /**
  175.  * blk_queue_headactive - indicate whether head of request queue may be active
  176.  * @q:       The queue which this applies to.
  177.  * @active:  A flag indication where the head of the queue is active.
  178.  *
  179.  * Description:
  180.  *    The driver for a block device may choose to leave the currently active
  181.  *    request on the request queue, removing it only when it has completed.
  182.  *    The queue handling routines assume this by default for safety reasons
  183.  *    and will not involve the head of the request queue in any merging or
  184.  *    reordering of requests when the queue is unplugged (and thus may be
  185.  *    working on this particular request).
  186.  *
  187.  *    If a driver removes requests from the queue before processing them, then
  188.  *    it may indicate that it does so, there by allowing the head of the queue
  189.  *    to be involved in merging and reordering.  This is done be calling
  190.  *    blk_queue_headactive() with an @active flag of %0.
  191.  *
  192.  *    If a driver processes several requests at once, it must remove them (or
  193.  *    at least all but one of them) from the request queue.
  194.  *
  195.  *    When a queue is plugged the head will be assumed to be inactive.
  196.  **/
  197.  
  198. void blk_queue_headactive(request_queue_t * q, int active)
  199. {
  200. q->head_active = active;
  201. }
  202. /**
  203.  * blk_queue_make_request - define an alternate make_request function for a device
  204.  * @q:  the request queue for the device to be affected
  205.  * @mfn: the alternate make_request function
  206.  *
  207.  * Description:
  208.  *    The normal way for &struct buffer_heads to be passed to a device
  209.  *    driver is for them to be collected into requests on a request
  210.  *    queue, and then to allow the device driver to select requests
  211.  *    off that queue when it is ready.  This works well for many block
  212.  *    devices. However some block devices (typically virtual devices
  213.  *    such as md or lvm) do not benefit from the processing on the
  214.  *    request queue, and are served best by having the requests passed
  215.  *    directly to them.  This can be achieved by providing a function
  216.  *    to blk_queue_make_request().
  217.  *
  218.  * Caveat:
  219.  *    The driver that does this *must* be able to deal appropriately
  220.  *    with buffers in "highmemory", either by calling bh_kmap() to get
  221.  *    a kernel mapping, to by calling create_bounce() to create a
  222.  *    buffer in normal memory.
  223.  **/
  224. void blk_queue_make_request(request_queue_t * q, make_request_fn * mfn)
  225. {
  226. q->make_request_fn = mfn;
  227. }
  228. static inline int ll_new_segment(request_queue_t *q, struct request *req, int max_segments)
  229. {
  230. if (req->nr_segments < max_segments) {
  231. req->nr_segments++;
  232. return 1;
  233. }
  234. return 0;
  235. }
  236. static int ll_back_merge_fn(request_queue_t *q, struct request *req, 
  237.     struct buffer_head *bh, int max_segments)
  238. {
  239. if (req->bhtail->b_data + req->bhtail->b_size == bh->b_data)
  240. return 1;
  241. return ll_new_segment(q, req, max_segments);
  242. }
  243. static int ll_front_merge_fn(request_queue_t *q, struct request *req, 
  244.      struct buffer_head *bh, int max_segments)
  245. {
  246. if (bh->b_data + bh->b_size == req->bh->b_data)
  247. return 1;
  248. return ll_new_segment(q, req, max_segments);
  249. }
  250. static int ll_merge_requests_fn(request_queue_t *q, struct request *req,
  251. struct request *next, int max_segments)
  252. {
  253. int total_segments = req->nr_segments + next->nr_segments;
  254. if (req->bhtail->b_data + req->bhtail->b_size == next->bh->b_data)
  255. total_segments--;
  256.     
  257. if (total_segments > max_segments)
  258. return 0;
  259. req->nr_segments = total_segments;
  260. return 1;
  261. }
  262. /*
  263.  * "plug" the device if there are no outstanding requests: this will
  264.  * force the transfer to start only after we have put all the requests
  265.  * on the list.
  266.  *
  267.  * This is called with interrupts off and no requests on the queue.
  268.  * (and with the request spinlock acquired)
  269.  */
  270. static void generic_plug_device(request_queue_t *q, kdev_t dev)
  271. {
  272. /*
  273.  * no need to replug device
  274.  */
  275. if (!list_empty(&q->queue_head) || q->plugged)
  276. return;
  277. q->plugged = 1;
  278. queue_task(&q->plug_tq, &tq_disk);
  279. }
  280. /*
  281.  * remove the plug and let it rip..
  282.  */
  283. static inline void __generic_unplug_device(request_queue_t *q)
  284. {
  285. if (q->plugged) {
  286. q->plugged = 0;
  287. if (!list_empty(&q->queue_head))
  288. q->request_fn(q);
  289. }
  290. }
  291. void generic_unplug_device(void *data)
  292. {
  293. request_queue_t *q = (request_queue_t *) data;
  294. unsigned long flags;
  295. spin_lock_irqsave(&io_request_lock, flags);
  296. __generic_unplug_device(q);
  297. spin_unlock_irqrestore(&io_request_lock, flags);
  298. }
  299. static void blk_init_free_list(request_queue_t *q)
  300. {
  301. struct request *rq;
  302. int i;
  303. INIT_LIST_HEAD(&q->rq[READ].free);
  304. INIT_LIST_HEAD(&q->rq[WRITE].free);
  305. q->rq[READ].count = 0;
  306. q->rq[WRITE].count = 0;
  307. /*
  308.  * Divide requests in half between read and write
  309.  */
  310. for (i = 0; i < queue_nr_requests; i++) {
  311. rq = kmem_cache_alloc(request_cachep, SLAB_KERNEL);
  312. if (rq == NULL) {
  313. /* We'll get a `leaked requests' message from blk_cleanup_queue */
  314. printk(KERN_EMERG "blk_init_free_list: error allocating requestsn");
  315. break;
  316. }
  317. memset(rq, 0, sizeof(struct request));
  318. rq->rq_status = RQ_INACTIVE;
  319. list_add(&rq->queue, &q->rq[i&1].free);
  320. q->rq[i&1].count++;
  321. }
  322. init_waitqueue_head(&q->wait_for_request);
  323. spin_lock_init(&q->queue_lock);
  324. }
  325. static int __make_request(request_queue_t * q, int rw, struct buffer_head * bh);
  326. /**
  327.  * blk_init_queue  - prepare a request queue for use with a block device
  328.  * @q:    The &request_queue_t to be initialised
  329.  * @rfn:  The function to be called to process requests that have been
  330.  *        placed on the queue.
  331.  *
  332.  * Description:
  333.  *    If a block device wishes to use the standard request handling procedures,
  334.  *    which sorts requests and coalesces adjacent requests, then it must
  335.  *    call blk_init_queue().  The function @rfn will be called when there
  336.  *    are requests on the queue that need to be processed.  If the device
  337.  *    supports plugging, then @rfn may not be called immediately when requests
  338.  *    are available on the queue, but may be called at some time later instead.
  339.  *    Plugged queues are generally unplugged when a buffer belonging to one
  340.  *    of the requests on the queue is needed, or due to memory pressure.
  341.  *
  342.  *    @rfn is not required, or even expected, to remove all requests off the
  343.  *    queue, but only as many as it can handle at a time.  If it does leave
  344.  *    requests on the queue, it is responsible for arranging that the requests
  345.  *    get dealt with eventually.
  346.  *
  347.  *    A global spin lock $io_request_lock must be held while manipulating the
  348.  *    requests on the request queue.
  349.  *
  350.  *    The request on the head of the queue is by default assumed to be
  351.  *    potentially active, and it is not considered for re-ordering or merging
  352.  *    whenever the given queue is unplugged. This behaviour can be changed with
  353.  *    blk_queue_headactive().
  354.  *
  355.  * Note:
  356.  *    blk_init_queue() must be paired with a blk_cleanup_queue() call
  357.  *    when the block device is deactivated (such as at module unload).
  358.  **/
  359. void blk_init_queue(request_queue_t * q, request_fn_proc * rfn)
  360. {
  361. INIT_LIST_HEAD(&q->queue_head);
  362. elevator_init(&q->elevator, ELEVATOR_LINUS);
  363. blk_init_free_list(q);
  364. q->request_fn      = rfn;
  365. q->back_merge_fn = ll_back_merge_fn;
  366. q->front_merge_fn       = ll_front_merge_fn;
  367. q->merge_requests_fn = ll_merge_requests_fn;
  368. q->make_request_fn = __make_request;
  369. q->plug_tq.sync = 0;
  370. q->plug_tq.routine = &generic_unplug_device;
  371. q->plug_tq.data = q;
  372. q->plugged         = 0;
  373. /*
  374.  * These booleans describe the queue properties.  We set the
  375.  * default (and most common) values here.  Other drivers can
  376.  * use the appropriate functions to alter the queue properties.
  377.  * as appropriate.
  378.  */
  379. q->plug_device_fn  = generic_plug_device;
  380. q->head_active     = 1;
  381. }
  382. #define blkdev_free_rq(list) list_entry((list)->next, struct request, queue);
  383. /*
  384.  * Get a free request. io_request_lock must be held and interrupts
  385.  * disabled on the way in.
  386.  */
  387. static inline struct request *get_request(request_queue_t *q, int rw)
  388. {
  389. struct request *rq = NULL;
  390. struct request_list *rl = q->rq + rw;
  391. if (!list_empty(&rl->free)) {
  392. rq = blkdev_free_rq(&rl->free);
  393. list_del(&rq->queue);
  394. rl->count--;
  395. rq->rq_status = RQ_ACTIVE;
  396. rq->special = NULL;
  397. rq->q = q;
  398. }
  399. return rq;
  400. }
  401. /*
  402.  * No available requests for this queue, unplug the device.
  403.  */
  404. static struct request *__get_request_wait(request_queue_t *q, int rw)
  405. {
  406. register struct request *rq;
  407. DECLARE_WAITQUEUE(wait, current);
  408. generic_unplug_device(q);
  409. add_wait_queue(&q->wait_for_request, &wait);
  410. do {
  411. set_current_state(TASK_UNINTERRUPTIBLE);
  412. if (q->rq[rw].count < batch_requests)
  413. schedule();
  414. spin_lock_irq(&io_request_lock);
  415. rq = get_request(q,rw);
  416. spin_unlock_irq(&io_request_lock);
  417. } while (rq == NULL);
  418. remove_wait_queue(&q->wait_for_request, &wait);
  419. current->state = TASK_RUNNING;
  420. return rq;
  421. }
  422. static inline struct request *get_request_wait(request_queue_t *q, int rw)
  423. {
  424. register struct request *rq;
  425. spin_lock_irq(&io_request_lock);
  426. rq = get_request(q, rw);
  427. spin_unlock_irq(&io_request_lock);
  428. if (rq)
  429. return rq;
  430. return __get_request_wait(q, rw);
  431. }
  432. /* RO fail safe mechanism */
  433. static long ro_bits[MAX_BLKDEV][8];
  434. int is_read_only(kdev_t dev)
  435. {
  436. int minor,major;
  437. major = MAJOR(dev);
  438. minor = MINOR(dev);
  439. if (major < 0 || major >= MAX_BLKDEV) return 0;
  440. return ro_bits[major][minor >> 5] & (1 << (minor & 31));
  441. }
  442. void set_device_ro(kdev_t dev,int flag)
  443. {
  444. int minor,major;
  445. major = MAJOR(dev);
  446. minor = MINOR(dev);
  447. if (major < 0 || major >= MAX_BLKDEV) return;
  448. if (flag) ro_bits[major][minor >> 5] |= 1 << (minor & 31);
  449. else ro_bits[major][minor >> 5] &= ~(1 << (minor & 31));
  450. }
  451. inline void drive_stat_acct (kdev_t dev, int rw,
  452. unsigned long nr_sectors, int new_io)
  453. {
  454. unsigned int major = MAJOR(dev);
  455. unsigned int index;
  456. index = disk_index(dev);
  457. if ((index >= DK_MAX_DISK) || (major >= DK_MAX_MAJOR))
  458. return;
  459. kstat.dk_drive[major][index] += new_io;
  460. if (rw == READ) {
  461. kstat.dk_drive_rio[major][index] += new_io;
  462. kstat.dk_drive_rblk[major][index] += nr_sectors;
  463. } else if (rw == WRITE) {
  464. kstat.dk_drive_wio[major][index] += new_io;
  465. kstat.dk_drive_wblk[major][index] += nr_sectors;
  466. } else
  467. printk(KERN_ERR "drive_stat_acct: cmd not R/W?n");
  468. }
  469. /*
  470.  * add-request adds a request to the linked list.
  471.  * io_request_lock is held and interrupts disabled, as we muck with the
  472.  * request queue list.
  473.  *
  474.  * By this point, req->cmd is always either READ/WRITE, never READA,
  475.  * which is important for drive_stat_acct() above.
  476.  */
  477. static inline void add_request(request_queue_t * q, struct request * req,
  478.        struct list_head *insert_here)
  479. {
  480. drive_stat_acct(req->rq_dev, req->cmd, req->nr_sectors, 1);
  481. if (!q->plugged && q->head_active && insert_here == &q->queue_head) {
  482. spin_unlock_irq(&io_request_lock);
  483. BUG();
  484. }
  485. /*
  486.  * elevator indicated where it wants this request to be
  487.  * inserted at elevator_merge time
  488.  */
  489. list_add(&req->queue, insert_here);
  490. }
  491. /*
  492.  * Must be called with io_request_lock held and interrupts disabled
  493.  */
  494. inline void blkdev_release_request(struct request *req)
  495. {
  496. request_queue_t *q = req->q;
  497. int rw = req->cmd;
  498. req->rq_status = RQ_INACTIVE;
  499. req->q = NULL;
  500. /*
  501.  * Request may not have originated from ll_rw_blk. if not,
  502.  * assume it has free buffers and check waiters
  503.  */
  504. if (q) {
  505. list_add(&req->queue, &q->rq[rw].free);
  506. if (++q->rq[rw].count >= batch_requests && waitqueue_active(&q->wait_for_request))
  507. wake_up(&q->wait_for_request);
  508. }
  509. }
  510. /*
  511.  * Has to be called with the request spinlock acquired
  512.  */
  513. static void attempt_merge(request_queue_t * q,
  514.   struct request *req,
  515.   int max_sectors,
  516.   int max_segments)
  517. {
  518. struct request *next;
  519.   
  520. next = blkdev_next_request(req);
  521. if (req->sector + req->nr_sectors != next->sector)
  522. return;
  523. if (req->cmd != next->cmd
  524.     || req->rq_dev != next->rq_dev
  525.     || req->nr_sectors + next->nr_sectors > max_sectors
  526.     || next->waiting)
  527. return;
  528. /*
  529.  * If we are not allowed to merge these requests, then
  530.  * return.  If we are allowed to merge, then the count
  531.  * will have been updated to the appropriate number,
  532.  * and we shouldn't do it here too.
  533.  */
  534. if (!q->merge_requests_fn(q, req, next, max_segments))
  535. return;
  536. q->elevator.elevator_merge_req_fn(req, next);
  537. req->bhtail->b_reqnext = next->bh;
  538. req->bhtail = next->bhtail;
  539. req->nr_sectors = req->hard_nr_sectors += next->hard_nr_sectors;
  540. list_del(&next->queue);
  541. blkdev_release_request(next);
  542. }
  543. static inline void attempt_back_merge(request_queue_t * q,
  544.       struct request *req,
  545.       int max_sectors,
  546.       int max_segments)
  547. {
  548. if (&req->queue == q->queue_head.prev)
  549. return;
  550. attempt_merge(q, req, max_sectors, max_segments);
  551. }
  552. static inline void attempt_front_merge(request_queue_t * q,
  553.        struct list_head * head,
  554.        struct request *req,
  555.        int max_sectors,
  556.        int max_segments)
  557. {
  558. struct list_head * prev;
  559. prev = req->queue.prev;
  560. if (head == prev)
  561. return;
  562. attempt_merge(q, blkdev_entry_to_request(prev), max_sectors, max_segments);
  563. }
  564. static int __make_request(request_queue_t * q, int rw,
  565.   struct buffer_head * bh)
  566. {
  567. unsigned int sector, count;
  568. int max_segments = MAX_SEGMENTS;
  569. struct request * req, *freereq = NULL;
  570. int rw_ahead, max_sectors, el_ret;
  571. struct list_head *head, *insert_here;
  572. int latency;
  573. elevator_t *elevator = &q->elevator;
  574. count = bh->b_size >> 9;
  575. sector = bh->b_rsector;
  576. rw_ahead = 0; /* normal case; gets changed below for READA */
  577. switch (rw) {
  578. case READA:
  579. rw_ahead = 1;
  580. rw = READ; /* drop into READ */
  581. case READ:
  582. case WRITE:
  583. latency = elevator_request_latency(elevator, rw);
  584. break;
  585. default:
  586. BUG();
  587. goto end_io;
  588. }
  589. /* We'd better have a real physical mapping!
  590.    Check this bit only if the buffer was dirty and just locked
  591.    down by us so at this point flushpage will block and
  592.    won't clear the mapped bit under us. */
  593. if (!buffer_mapped(bh))
  594. BUG();
  595. /*
  596.  * Temporary solution - in 2.5 this will be done by the lowlevel
  597.  * driver. Create a bounce buffer if the buffer data points into
  598.  * high memory - keep the original buffer otherwise.
  599.  */
  600. #if CONFIG_HIGHMEM
  601. bh = create_bounce(rw, bh);
  602. #endif
  603. /* look for a free request. */
  604. /*
  605.  * Try to coalesce the new request with old requests
  606.  */
  607. max_sectors = get_max_sectors(bh->b_rdev);
  608. again:
  609. req = NULL;
  610. head = &q->queue_head;
  611. /*
  612.  * Now we acquire the request spinlock, we have to be mega careful
  613.  * not to schedule or do something nonatomic
  614.  */
  615. spin_lock_irq(&io_request_lock);
  616. insert_here = head->prev;
  617. if (list_empty(head)) {
  618. q->plug_device_fn(q, bh->b_rdev); /* is atomic */
  619. goto get_rq;
  620. } else if (q->head_active && !q->plugged)
  621. head = head->next;
  622. el_ret = elevator->elevator_merge_fn(q, &req, head, bh, rw,max_sectors);
  623. switch (el_ret) {
  624. case ELEVATOR_BACK_MERGE:
  625. if (!q->back_merge_fn(q, req, bh, max_segments)) {
  626. insert_here = &req->queue;
  627. break;
  628. }
  629. elevator->elevator_merge_cleanup_fn(q, req, count);
  630. req->bhtail->b_reqnext = bh;
  631. req->bhtail = bh;
  632. req->nr_sectors = req->hard_nr_sectors += count;
  633. blk_started_io(count);
  634. drive_stat_acct(req->rq_dev, req->cmd, count, 0);
  635. attempt_back_merge(q, req, max_sectors, max_segments);
  636. goto out;
  637. case ELEVATOR_FRONT_MERGE:
  638. if (!q->front_merge_fn(q, req, bh, max_segments)) {
  639. insert_here = req->queue.prev;
  640. break;
  641. }
  642. elevator->elevator_merge_cleanup_fn(q, req, count);
  643. bh->b_reqnext = req->bh;
  644. req->bh = bh;
  645. req->buffer = bh->b_data;
  646. req->current_nr_sectors = count;
  647. req->sector = req->hard_sector = sector;
  648. req->nr_sectors = req->hard_nr_sectors += count;
  649. blk_started_io(count);
  650. drive_stat_acct(req->rq_dev, req->cmd, count, 0);
  651. attempt_front_merge(q, head, req, max_sectors, max_segments);
  652. goto out;
  653. /*
  654.  * elevator says don't/can't merge. get new request
  655.  */
  656. case ELEVATOR_NO_MERGE:
  657. /*
  658.  * use elevator hints as to where to insert the
  659.  * request. if no hints, just add it to the back
  660.  * of the queue
  661.  */
  662. if (req)
  663. insert_here = &req->queue;
  664. break;
  665. default:
  666. printk("elevator returned crap (%d)n", el_ret);
  667. BUG();
  668. }
  669. /*
  670.  * Grab a free request from the freelist - if that is empty, check
  671.  * if we are doing read ahead and abort instead of blocking for
  672.  * a free slot.
  673.  */
  674. get_rq:
  675. if (freereq) {
  676. req = freereq;
  677. freereq = NULL;
  678. } else if ((req = get_request(q, rw)) == NULL) {
  679. spin_unlock_irq(&io_request_lock);
  680. if (rw_ahead)
  681. goto end_io;
  682. freereq = __get_request_wait(q, rw);
  683. goto again;
  684. }
  685. /* fill up the request-info, and add it to the queue */
  686. req->elevator_sequence = latency;
  687. req->cmd = rw;
  688. req->errors = 0;
  689. req->hard_sector = req->sector = sector;
  690. req->hard_nr_sectors = req->nr_sectors = count;
  691. req->current_nr_sectors = count;
  692. req->nr_segments = 1; /* Always 1 for a new request. */
  693. req->nr_hw_segments = 1; /* Always 1 for a new request. */
  694. req->buffer = bh->b_data;
  695. req->waiting = NULL;
  696. req->bh = bh;
  697. req->bhtail = bh;
  698. req->rq_dev = bh->b_rdev;
  699. blk_started_io(count);
  700. add_request(q, req, insert_here);
  701. out:
  702. if (freereq)
  703. blkdev_release_request(freereq);
  704. spin_unlock_irq(&io_request_lock);
  705. return 0;
  706. end_io:
  707. bh->b_end_io(bh, test_bit(BH_Uptodate, &bh->b_state));
  708. return 0;
  709. }
  710. /**
  711.  * generic_make_request: hand a buffer head to it's device driver for I/O
  712.  * @rw:  READ, WRITE, or READA - what sort of I/O is desired.
  713.  * @bh:  The buffer head describing the location in memory and on the device.
  714.  *
  715.  * generic_make_request() is used to make I/O requests of block
  716.  * devices. It is passed a &struct buffer_head and a &rw value.  The
  717.  * %READ and %WRITE options are (hopefully) obvious in meaning.  The
  718.  * %READA value means that a read is required, but that the driver is
  719.  * free to fail the request if, for example, it cannot get needed
  720.  * resources immediately.
  721.  *
  722.  * generic_make_request() does not return any status.  The
  723.  * success/failure status of the request, along with notification of
  724.  * completion, is delivered asynchronously through the bh->b_end_io
  725.  * function described (one day) else where.
  726.  *
  727.  * The caller of generic_make_request must make sure that b_page,
  728.  * b_addr, b_size are set to describe the memory buffer, that b_rdev
  729.  * and b_rsector are set to describe the device address, and the
  730.  * b_end_io and optionally b_private are set to describe how
  731.  * completion notification should be signaled.  BH_Mapped should also
  732.  * be set (to confirm that b_dev and b_blocknr are valid).
  733.  *
  734.  * generic_make_request and the drivers it calls may use b_reqnext,
  735.  * and may change b_rdev and b_rsector.  So the values of these fields
  736.  * should NOT be depended on after the call to generic_make_request.
  737.  * Because of this, the caller should record the device address
  738.  * information in b_dev and b_blocknr.
  739.  *
  740.  * Apart from those fields mentioned above, no other fields, and in
  741.  * particular, no other flags, are changed by generic_make_request or
  742.  * any lower level drivers.
  743.  * */
  744. void generic_make_request (int rw, struct buffer_head * bh)
  745. {
  746. int major = MAJOR(bh->b_rdev);
  747. int minorsize = 0;
  748. request_queue_t *q;
  749. if (!bh->b_end_io)
  750. BUG();
  751. /* Test device size, when known. */
  752. if (blk_size[major])
  753. minorsize = blk_size[major][MINOR(bh->b_rdev)];
  754. if (minorsize) {
  755. unsigned long maxsector = (minorsize << 1) + 1;
  756. unsigned long sector = bh->b_rsector;
  757. unsigned int count = bh->b_size >> 9;
  758. if (maxsector < count || maxsector - count < sector) {
  759. /* Yecch */
  760. bh->b_state &= (1 << BH_Lock) | (1 << BH_Mapped);
  761. /* This may well happen - the kernel calls bread()
  762.    without checking the size of the device, e.g.,
  763.    when mounting a device. */
  764. printk(KERN_INFO
  765.        "attempt to access beyond end of devicen");
  766. printk(KERN_INFO "%s: rw=%d, want=%ld, limit=%dn",
  767.        kdevname(bh->b_rdev), rw,
  768.        (sector + count)>>1, minorsize);
  769. /* Yecch again */
  770. bh->b_end_io(bh, 0);
  771. return;
  772. }
  773. }
  774. /*
  775.  * Resolve the mapping until finished. (drivers are
  776.  * still free to implement/resolve their own stacking
  777.  * by explicitly returning 0)
  778.  */
  779. /* NOTE: we don't repeat the blk_size check for each new device.
  780.  * Stacking drivers are expected to know what they are doing.
  781.  */
  782. do {
  783. q = blk_get_queue(bh->b_rdev);
  784. if (!q) {
  785. printk(KERN_ERR
  786.        "generic_make_request: Trying to access "
  787.        "nonexistent block-device %s (%ld)n",
  788.        kdevname(bh->b_rdev), bh->b_rsector);
  789. buffer_IO_error(bh);
  790. break;
  791. }
  792. } while (q->make_request_fn(q, rw, bh));
  793. }
  794. /**
  795.  * submit_bh: submit a buffer_head to the block device later for I/O
  796.  * @rw: whether to %READ or %WRITE, or maybe to %READA (read ahead)
  797.  * @bh: The &struct buffer_head which describes the I/O
  798.  *
  799.  * submit_bh() is very similar in purpose to generic_make_request(), and
  800.  * uses that function to do most of the work.
  801.  *
  802.  * The extra functionality provided by submit_bh is to determine
  803.  * b_rsector from b_blocknr and b_size, and to set b_rdev from b_dev.
  804.  * This is is appropriate for IO requests that come from the buffer
  805.  * cache and page cache which (currently) always use aligned blocks.
  806.  */
  807. void submit_bh(int rw, struct buffer_head * bh)
  808. {
  809. int count = bh->b_size >> 9;
  810. if (!test_bit(BH_Lock, &bh->b_state))
  811. BUG();
  812. set_bit(BH_Req, &bh->b_state);
  813. /*
  814.  * First step, 'identity mapping' - RAID or LVM might
  815.  * further remap this.
  816.  */
  817. bh->b_rdev = bh->b_dev;
  818. bh->b_rsector = bh->b_blocknr * count;
  819. generic_make_request(rw, bh);
  820. switch (rw) {
  821. case WRITE:
  822. kstat.pgpgout += count;
  823. break;
  824. default:
  825. kstat.pgpgin += count;
  826. break;
  827. }
  828. }
  829. /**
  830.  * ll_rw_block: low-level access to block devices
  831.  * @rw: whether to %READ or %WRITE or maybe %READA (readahead)
  832.  * @nr: number of &struct buffer_heads in the array
  833.  * @bhs: array of pointers to &struct buffer_head
  834.  *
  835.  * ll_rw_block() takes an array of pointers to &struct buffer_heads,
  836.  * and requests an I/O operation on them, either a %READ or a %WRITE.
  837.  * The third %READA option is described in the documentation for
  838.  * generic_make_request() which ll_rw_block() calls.
  839.  *
  840.  * This function provides extra functionality that is not in
  841.  * generic_make_request() that is relevant to buffers in the buffer
  842.  * cache or page cache.  In particular it drops any buffer that it
  843.  * cannot get a lock on (with the BH_Lock state bit), any buffer that
  844.  * appears to be clean when doing a write request, and any buffer that
  845.  * appears to be up-to-date when doing read request.  Further it marks
  846.  * as clean buffers that are processed for writing (the buffer cache
  847.  * wont assume that they are actually clean until the buffer gets
  848.  * unlocked).
  849.  *
  850.  * ll_rw_block sets b_end_io to simple completion handler that marks
  851.  * the buffer up-to-date (if approriate), unlocks the buffer and wakes
  852.  * any waiters.  As client that needs a more interesting completion
  853.  * routine should call submit_bh() (or generic_make_request())
  854.  * directly.
  855.  *
  856.  * Caveat:
  857.  *  All of the buffers must be for the same device, and must also be
  858.  *  of the current approved size for the device.  */
  859. void ll_rw_block(int rw, int nr, struct buffer_head * bhs[])
  860. {
  861. unsigned int major;
  862. int correct_size;
  863. int i;
  864. if (!nr)
  865. return;
  866. major = MAJOR(bhs[0]->b_dev);
  867. /* Determine correct block size for this device. */
  868. correct_size = get_hardsect_size(bhs[0]->b_dev);
  869. /* Verify requested block sizes. */
  870. for (i = 0; i < nr; i++) {
  871. struct buffer_head *bh = bhs[i];
  872. if (bh->b_size % correct_size) {
  873. printk(KERN_NOTICE "ll_rw_block: device %s: "
  874.        "only %d-char blocks implemented (%u)n",
  875.        kdevname(bhs[0]->b_dev),
  876.        correct_size, bh->b_size);
  877. goto sorry;
  878. }
  879. }
  880. if ((rw & WRITE) && is_read_only(bhs[0]->b_dev)) {
  881. printk(KERN_NOTICE "Can't write to read-only device %sn",
  882.        kdevname(bhs[0]->b_dev));
  883. goto sorry;
  884. }
  885. for (i = 0; i < nr; i++) {
  886. struct buffer_head *bh = bhs[i];
  887. /* Only one thread can actually submit the I/O. */
  888. if (test_and_set_bit(BH_Lock, &bh->b_state))
  889. continue;
  890. /* We have the buffer lock */
  891. atomic_inc(&bh->b_count);
  892. bh->b_end_io = end_buffer_io_sync;
  893. switch(rw) {
  894. case WRITE:
  895. if (!atomic_set_buffer_clean(bh))
  896. /* Hmmph! Nothing to write */
  897. goto end_io;
  898. __mark_buffer_clean(bh);
  899. break;
  900. case READA:
  901. case READ:
  902. if (buffer_uptodate(bh))
  903. /* Hmmph! Already have it */
  904. goto end_io;
  905. break;
  906. default:
  907. BUG();
  908. end_io:
  909. bh->b_end_io(bh, test_bit(BH_Uptodate, &bh->b_state));
  910. continue;
  911. }
  912. submit_bh(rw, bh);
  913. }
  914. return;
  915. sorry:
  916. /* Make sure we don't get infinite dirty retries.. */
  917. for (i = 0; i < nr; i++)
  918. mark_buffer_clean(bhs[i]);
  919. }
  920. #ifdef CONFIG_STRAM_SWAP
  921. extern int stram_device_init (void);
  922. #endif
  923. /**
  924.  * end_that_request_first - end I/O on one buffer.
  925.  * @req:      the request being processed
  926.  * @uptodate: 0 for I/O error
  927.  * @name:     the name printed for an I/O error
  928.  *
  929.  * Description:
  930.  *     Ends I/O on the first buffer attached to @req, and sets it up
  931.  *     for the next buffer_head (if any) in the cluster.
  932.  *     
  933.  * Return:
  934.  *     0 - we are done with this request, call end_that_request_last()
  935.  *     1 - still buffers pending for this request
  936.  *
  937.  * Caveat: 
  938.  *     Drivers implementing their own end_request handling must call
  939.  *     blk_finished_io() appropriately.
  940.  **/
  941. int end_that_request_first (struct request *req, int uptodate, char *name)
  942. {
  943. struct buffer_head * bh;
  944. int nsect;
  945. req->errors = 0;
  946. if (!uptodate)
  947. printk("end_request: I/O error, dev %s (%s), sector %lun",
  948. kdevname(req->rq_dev), name, req->sector);
  949. if ((bh = req->bh) != NULL) {
  950. nsect = bh->b_size >> 9;
  951. blk_finished_io(nsect);
  952. req->bh = bh->b_reqnext;
  953. bh->b_reqnext = NULL;
  954. bh->b_end_io(bh, uptodate);
  955. if ((bh = req->bh) != NULL) {
  956. req->hard_sector += nsect;
  957. req->hard_nr_sectors -= nsect;
  958. req->sector = req->hard_sector;
  959. req->nr_sectors = req->hard_nr_sectors;
  960. req->current_nr_sectors = bh->b_size >> 9;
  961. if (req->nr_sectors < req->current_nr_sectors) {
  962. req->nr_sectors = req->current_nr_sectors;
  963. printk("end_request: buffer-list destroyedn");
  964. }
  965. req->buffer = bh->b_data;
  966. return 1;
  967. }
  968. }
  969. return 0;
  970. }
  971. void end_that_request_last(struct request *req)
  972. {
  973. if (req->waiting != NULL)
  974. complete(req->waiting);
  975. blkdev_release_request(req);
  976. }
  977. #define MB(kb) ((kb) << 10)
  978. int __init blk_dev_init(void)
  979. {
  980. struct blk_dev_struct *dev;
  981. int total_ram;
  982. request_cachep = kmem_cache_create("blkdev_requests",
  983.    sizeof(struct request),
  984.    0, SLAB_HWCACHE_ALIGN, NULL, NULL);
  985. if (!request_cachep)
  986. panic("Can't create request pool slab cachen");
  987. for (dev = blk_dev + MAX_BLKDEV; dev-- != blk_dev;)
  988. dev->queue = NULL;
  989. memset(ro_bits,0,sizeof(ro_bits));
  990. memset(max_readahead, 0, sizeof(max_readahead));
  991. memset(max_sectors, 0, sizeof(max_sectors));
  992. total_ram = nr_free_pages() << (PAGE_SHIFT - 10);
  993. /*
  994.  * Free request slots per queue.
  995.  * (Half for reads, half for writes)
  996.  */
  997. queue_nr_requests = 64;
  998. if (total_ram > MB(32))
  999. queue_nr_requests = 128;
  1000. /*
  1001.  * Batch frees according to queue length
  1002.  */
  1003. batch_requests = queue_nr_requests/4;
  1004. printk("block: %d slots per queue, batch=%dn", queue_nr_requests, batch_requests);
  1005. #ifdef CONFIG_AMIGA_Z2RAM
  1006. z2_init();
  1007. #endif
  1008. #ifdef CONFIG_STRAM_SWAP
  1009. stram_device_init();
  1010. #endif
  1011. #ifdef CONFIG_BLK_DEV_RAM
  1012. rd_init();
  1013. #endif
  1014. #ifdef CONFIG_ISP16_CDI
  1015. isp16_init();
  1016. #endif
  1017. #if defined(CONFIG_IDE) && defined(CONFIG_BLK_DEV_IDE)
  1018. ide_init(); /* this MUST precede hd_init */
  1019. #endif
  1020. #if defined(CONFIG_IDE) && defined(CONFIG_BLK_DEV_HD)
  1021. hd_init();
  1022. #endif
  1023. #ifdef CONFIG_BLK_DEV_PS2
  1024. ps2esdi_init();
  1025. #endif
  1026. #ifdef CONFIG_BLK_DEV_XD
  1027. xd_init();
  1028. #endif
  1029. #ifdef CONFIG_BLK_DEV_MFM
  1030. mfm_init();
  1031. #endif
  1032. #ifdef CONFIG_PARIDE
  1033. { extern void paride_init(void); paride_init(); }
  1034. #endif
  1035. #ifdef CONFIG_MAC_FLOPPY
  1036. swim3_init();
  1037. #endif
  1038. #ifdef CONFIG_BLK_DEV_SWIM_IOP
  1039. swimiop_init();
  1040. #endif
  1041. #ifdef CONFIG_AMIGA_FLOPPY
  1042. amiga_floppy_init();
  1043. #endif
  1044. #ifdef CONFIG_ATARI_FLOPPY
  1045. atari_floppy_init();
  1046. #endif
  1047. #ifdef CONFIG_BLK_DEV_FD1772
  1048. fd1772_init();
  1049. #endif
  1050. #ifdef CONFIG_BLK_DEV_FD
  1051. floppy_init();
  1052. #endif
  1053. #ifdef FLOPPY_BOOT_DISABLE
  1054. outb_p(0xc, 0x3f2);
  1055. #endif
  1056. #ifdef CONFIG_CDU31A
  1057. cdu31a_init();
  1058. #endif
  1059. #ifdef CONFIG_ATARI_ACSI
  1060. acsi_init();
  1061. #endif
  1062. #ifdef CONFIG_MCD
  1063. mcd_init();
  1064. #endif
  1065. #ifdef CONFIG_MCDX
  1066. mcdx_init();
  1067. #endif
  1068. #ifdef CONFIG_SBPCD
  1069. sbpcd_init();
  1070. #endif
  1071. #ifdef CONFIG_AZTCD
  1072. aztcd_init();
  1073. #endif
  1074. #ifdef CONFIG_CDU535
  1075. sony535_init();
  1076. #endif
  1077. #ifdef CONFIG_GSCD
  1078. gscd_init();
  1079. #endif
  1080. #ifdef CONFIG_CM206
  1081. cm206_init();
  1082. #endif
  1083. #ifdef CONFIG_OPTCD
  1084. optcd_init();
  1085. #endif
  1086. #ifdef CONFIG_SJCD
  1087. sjcd_init();
  1088. #endif
  1089. #ifdef CONFIG_APBLOCK
  1090. ap_init();
  1091. #endif
  1092. #ifdef CONFIG_DDV
  1093. ddv_init();
  1094. #endif
  1095. #ifdef CONFIG_MDISK
  1096. mdisk_init();
  1097. #endif
  1098. #ifdef CONFIG_DASD
  1099. dasd_init();
  1100. #endif
  1101. #if defined(CONFIG_S390_TAPE) && defined(CONFIG_S390_TAPE_BLOCK)
  1102. tapeblock_init();
  1103. #endif
  1104. #ifdef CONFIG_BLK_DEV_XPRAM
  1105.         xpram_init();
  1106. #endif
  1107. #ifdef CONFIG_SUN_JSFLASH
  1108. jsfd_init();
  1109. #endif
  1110. return 0;
  1111. }
  1112. EXPORT_SYMBOL(io_request_lock);
  1113. EXPORT_SYMBOL(end_that_request_first);
  1114. EXPORT_SYMBOL(end_that_request_last);
  1115. EXPORT_SYMBOL(blk_init_queue);
  1116. EXPORT_SYMBOL(blk_get_queue);
  1117. EXPORT_SYMBOL(blk_cleanup_queue);
  1118. EXPORT_SYMBOL(blk_queue_headactive);
  1119. EXPORT_SYMBOL(blk_queue_make_request);
  1120. EXPORT_SYMBOL(generic_make_request);
  1121. EXPORT_SYMBOL(blkdev_release_request);
  1122. EXPORT_SYMBOL(generic_unplug_device);