*参照元 [#saf84e55] #backlinks *説明 [#pc928cf8] -パス: [[linux-2.6.33/block/blk-core.c]] -FIXME: これは何? -スラブアロケータからキュー用の領域を確保する。 --スラブアロケータを使うための準備は blk_dev_init() で行う。 --[[linux-2.6.33/blk_dev_init()]] --[[linux-2.6/スラブアロケータ]] **引数 [#a315a6cf] -gfp_t gfp_mask -- --[[linux-2.6.33/gfp_t]] -int node_id -- **返り値 [#hc4fd82a] -struct request_queue * -- --[[linux-2.6.33/request_queue]] **参考 [#e1c50788] *実装 [#aea54076] struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id) { struct request_queue *q; int err; q = kmem_cache_alloc_node(blk_requestq_cachep, gfp_mask | __GFP_ZERO, node_id); if (!q) return NULL; -blk_requestq_cachep は static 変数、kmem_cache 型 --[[linux-2.6.33/kmem_cache]] - --[[linux-2.6.33/__GFP_ZERO]] - --[[linux-2.6.33/kmem_cache_alloc_node()]] q->backing_dev_info.unplug_io_fn = blk_backing_dev_unplug; q->backing_dev_info.unplug_io_data = q; 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; q->backing_dev_info.name = "block"; - --[[linux-2.6.33/VM_MAX_READAHEAD]] - --[[linux-2.6.33/PAGE_CACHE_SIZE]] - --[[linux-2.6.33/BDI_CAP_MAP_COPY]] -q->backing_dev_info は、backing_dev_info 型 --[[linux-2.6.33/backing_dev_info]] - --[[linux-2.6.33/blk_backing_dev_unplug()]] err = bdi_init(&q->backing_dev_info); if (err) { kmem_cache_free(blk_requestq_cachep, q); return NULL; } - --[[linux-2.6.33/bdi_init()]] - --[[linux-2.6.33/kmem_cache_free()]] init_timer(&q->unplug_timer); setup_timer(&q->timeout, blk_rq_timed_out_timer, (unsigned long) q); INIT_LIST_HEAD(&q->timeout_list); INIT_WORK(&q->unplug_work, blk_unplug_work); - --[[linux-2.6.33/init_timer()]] - --[[linux-2.6.33/setup_timer()]] - --[[linux-2.6.33/blk_rq_timed_out_timer()]] - --[[linux-2.6.33/INIT_LIST_HEAD()]] - --[[linux-2.6.33/INIT_WORK()]] - --[[linux-2.6.33/blk_unplug_work()]] kobject_init(&q->kobj, &blk_queue_ktype); - --[[linux-2.6.33/kobject_init()]] mutex_init(&q->sysfs_lock); spin_lock_init(&q->__queue_lock); - --[[linux-2.6.33/mutex_init()]] - --[[linux-2.6.33/spin_lock_init()]] return q; } EXPORT_SYMBOL(blk_alloc_queue_node); -ライセンスに関係なくシンボルを公開する。 --[[linux-2.6.33/EXPORT_SYMOBOL()]] --[[linux-2.6.33/EXPORT_SYMBOL()]] *コメント [#v500307f]