- 追加された行はこの色です。
- 削除された行はこの色です。
*参照元 [#we59b860]
#backlinks
*説明 [#e66c037e]
-パス: [[linux-2.6.25/block/blk-core.c]]
-unplug 用タイマーの期限が来ると呼び出される関数である。
--ブロックデバイス用のワークキューに、unplug 用の関数を
追加するだけ。
**引数 [#i2bf5ea8]
-unsigned long data
--タイマー作成時に渡したデータである。
このタイマーの場合は、struct request_queue へのポインタをキャストした値が
渡される。
--[[linux-2.6.25/request_queue]]
**返り値 [#beeca879]
-なし
**参考 [#g9a4fc28]
-タイマーに登録した関数はソフトウェア割り込みの
コンテキストで実行される。
--ユーザコンテキストは存在しない。
--スリープはできない。
--カレントプロセッサのソフトウェア割り込みは禁止されている。
--ハードウェア割り込みは許可されている。
*実装 [#v05c10b6]
void blk_unplug_timeout(unsigned long data)
{
struct request_queue *q = (struct request_queue *)data;
blk_add_trace_pdu_int(q, BLK_TA_UNPLUG_TIMER, NULL,
q->rq.count[READ] + q->rq.count[WRITE]);
-
--[[linux-2.6.25/blk_add_trace_pdu_int()]]
kblockd_schedule_work(&q->unplug_work);
-リクエストキューを unplug(栓を取り去る)する関数を
ワークキューにスケジュールする。
--通常の I/O スケジューラの場合は blk_unplug_work が呼び出される。
--CFQ(Completely Fair Queuing)を選択している場合、
cfq_kick_queue が呼び出される。
--[[linux-2.6.25/kblockd_schedule_work()]]
---[[linux-2.6.25/blk_unplug_work()]]
---[[linux-2.6.25/cfq_kick_queue()]]
---[[linux-memo/CFQ]]
}
*コメント [#nbc64a09]