*参照元 [#rfb81cb8]
#backlinks

*説明 [#i60a40ee]
-パス: [[linux-2.6.25/block/blk-settings.c]]

-FIXME: これは何?
--説明


**引数 [#qf138592]
-struct request_queue *q
--
-make_request_fn *mfn
--

**返り値 [#y7b8359d]
-なし

**参考 [#xa2f08ef]
-なし


*実装 [#a31fb650]
 /**
  * blk_queue_make_request - define an alternate make_request function for a device
  * @q:  the request queue for the device to be affected
  * @mfn: the alternate make_request function
  *
  * Description:
  *    The normal way for &struct bios to be passed to a device
  *    driver is for them to be collected into requests on a request
  *    queue, and then to allow the device driver to select requests
  *    off that queue when it is ready.  This works well for many block
  *    devices. However some block devices (typically virtual devices
  *    such as md or lvm) do not benefit from the processing on the
  *    request queue, and are served best by having the requests passed
  *    directly to them.  This can be achieved by providing a function
  *    to blk_queue_make_request().
  *
  * Caveat:
  *    The driver that does this *must* be able to deal appropriately
  *    with buffers in "highmemory". This can be accomplished by either calling
  *    __bio_kmap_atomic() to get a temporary kernel mapping, or by calling
  *    blk_queue_bounce() to create a buffer in normal memory.
  **/
 void blk_queue_make_request(struct request_queue *q, make_request_fn *mfn)
 {
         /*
          * set defaults
          */
         q->nr_requests = BLKDEV_MAX_RQ;
         blk_queue_max_phys_segments(q, MAX_PHYS_SEGMENTS);
         blk_queue_max_hw_segments(q, MAX_HW_SEGMENTS);
         q->make_request_fn = mfn;
         q->backing_dev_info.ra_pages =
                         (VM_MAX_READAHEAD * 1024) / PAGE_CACHE_SIZE;
         q->backing_dev_info.state = 0;
         q->backing_dev_info.capabilities = BDI_CAP_MAP_COPY;
         blk_queue_max_sectors(q, SAFE_MAX_SECTORS);
         blk_queue_hardsect_size(q, 512);
         blk_queue_dma_alignment(q, 511);
         blk_queue_congestion_threshold(q);
         q->nr_batching = BLK_BATCH_REQ;
 
         q->unplug_thresh = 4;           /* hmm */
         q->unplug_delay = (3 * HZ) / 1000;      /* 3 milliseconds */
         if (q->unplug_delay == 0)
                 q->unplug_delay = 1;
 
         INIT_WORK(&q->unplug_work, blk_unplug_work);
 
         q->unplug_timer.function = blk_unplug_timeout;
         q->unplug_timer.data = (unsigned long)q;
 
         /*
          * by default assume old behaviour and bounce for any highmem page
          */
         blk_queue_bounce_limit(q, BLK_BOUNCE_HIGH);
 }
 EXPORT_SYMBOL(blk_queue_make_request);


*コメント [#t4788ee7]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS