linux-2.6.33/__blk_run_queue()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#v5011524]
#backlinks
*説明 [#baeb79cc]
-パス: [[linux-2.6.33/block/blk-core.c]]
-FIXME: これは何?
--説明
**引数 [#m55511ff]
-struct request_queue *q
--
--[[linux-2.6.33/request_queue]]
**返り値 [#df4d8d45]
-なし
**参考 [#d3c87d21]
-unplug_work の初期化をしている関数
--[[linux-2.6.33/blk_alloc_queue_node()]]
-unplug_work は blk_unplug_work() を実行するように初期化...
-FIXME: 特殊なケースもあるかもしれないので、あれば追加。
--[[linux-2.6.33/blk_unplug_work()]]
*実装 [#k3944f6f]
/**
* __blk_run_queue - run a single device queue
* @q: The queue to run
*
* Description:
* See @blk_run_queue. This variant must be called wi...
* held and interrupts disabled.
*
*/
void __blk_run_queue(struct request_queue *q)
{
blk_remove_plug(q);
-
--[[linux-2.6.33/blk_remove_plub()]]
if (unlikely(blk_queue_stopped(q)))
return;
-
--[[linux-2.6.33/unlikely()]]
-
--[[linux-2.6.33/blk_queue_stopped()]]
if (elv_queue_empty(q))
return;
-
--[[linux-2.6.33/elv_queue_empty()]]
/*
* Only recurse once to avoid overrunning the stack, le...
* handling reinvoke the handler shortly if we already ...
*/
if (!queue_flag_test_and_set(QUEUE_FLAG_REENTER, q)) {
q->request_fn(q);
queue_flag_clear(QUEUE_FLAG_REENTER, q);
-request_fn は request_fn_proc 型
-
--[[linux-2.6.33/request_fn_proc]]
-
--[[linux-2.6.33/QUEUE_FLAG_REENTER]]
-
--[[linux-2.6.33/queue_flag_test_and_set()]]
-
--[[linux-2.6.33/queue_flag_clear()]]
} else {
queue_flag_set(QUEUE_FLAG_PLUGGED, q);
kblockd_schedule_work(q, &q->unplug_work);
-unplug_work は work_struct 型
--[[linux-2.6.33/work_struct]]
-
--[[linux-2.6.33/QUEUE_FLAG_PLUGGED]]
-
--[[linux-2.6.33/queue_flag_set()]]
-
--[[linux-2.6.33/kblockd_schedule_work()]]
}
}
EXPORT_SYMBOL(__blk_run_queue);
-ライセンスに関係なくシンボルを公開する。
--[[linux-2.6.33/EXPORT_SYMBOL()]]
*コメント [#a92d7491]
終了行:
*参照元 [#v5011524]
#backlinks
*説明 [#baeb79cc]
-パス: [[linux-2.6.33/block/blk-core.c]]
-FIXME: これは何?
--説明
**引数 [#m55511ff]
-struct request_queue *q
--
--[[linux-2.6.33/request_queue]]
**返り値 [#df4d8d45]
-なし
**参考 [#d3c87d21]
-unplug_work の初期化をしている関数
--[[linux-2.6.33/blk_alloc_queue_node()]]
-unplug_work は blk_unplug_work() を実行するように初期化...
-FIXME: 特殊なケースもあるかもしれないので、あれば追加。
--[[linux-2.6.33/blk_unplug_work()]]
*実装 [#k3944f6f]
/**
* __blk_run_queue - run a single device queue
* @q: The queue to run
*
* Description:
* See @blk_run_queue. This variant must be called wi...
* held and interrupts disabled.
*
*/
void __blk_run_queue(struct request_queue *q)
{
blk_remove_plug(q);
-
--[[linux-2.6.33/blk_remove_plub()]]
if (unlikely(blk_queue_stopped(q)))
return;
-
--[[linux-2.6.33/unlikely()]]
-
--[[linux-2.6.33/blk_queue_stopped()]]
if (elv_queue_empty(q))
return;
-
--[[linux-2.6.33/elv_queue_empty()]]
/*
* Only recurse once to avoid overrunning the stack, le...
* handling reinvoke the handler shortly if we already ...
*/
if (!queue_flag_test_and_set(QUEUE_FLAG_REENTER, q)) {
q->request_fn(q);
queue_flag_clear(QUEUE_FLAG_REENTER, q);
-request_fn は request_fn_proc 型
-
--[[linux-2.6.33/request_fn_proc]]
-
--[[linux-2.6.33/QUEUE_FLAG_REENTER]]
-
--[[linux-2.6.33/queue_flag_test_and_set()]]
-
--[[linux-2.6.33/queue_flag_clear()]]
} else {
queue_flag_set(QUEUE_FLAG_PLUGGED, q);
kblockd_schedule_work(q, &q->unplug_work);
-unplug_work は work_struct 型
--[[linux-2.6.33/work_struct]]
-
--[[linux-2.6.33/QUEUE_FLAG_PLUGGED]]
-
--[[linux-2.6.33/queue_flag_set()]]
-
--[[linux-2.6.33/kblockd_schedule_work()]]
}
}
EXPORT_SYMBOL(__blk_run_queue);
-ライセンスに関係なくシンボルを公開する。
--[[linux-2.6.33/EXPORT_SYMBOL()]]
*コメント [#a92d7491]
ページ名: