参照元†
返り値†
/*
* "plug" the device if there are no outstanding requests: this will
* force the transfer to start only after we have put all the requests
* on the list.
*
* This is called with interrupts off and no requests on the queue and
* with the queue lock held.
*/
void blk_plug_device(struct request_queue *q)
{
WARN_ON(!irqs_disabled());
/*
* don't plug a stopped queue, it must be paired with blk_start_queue()
* which will restart the queueing
*/
if (blk_queue_stopped(q))
return;
- キューが既に停止している場合は plug(塞ぐこと)しない。
if (!test_and_set_bit(QUEUE_FLAG_PLUGGED, &q->queue_flags)) {
- キューが既に plug(塞ぐこと)されていないことを確認する。
mod_timer(&q->unplug_timer, jiffies + q->unplug_delay);
- キューを unplug するタイマーの期限を再設定
(現在時刻から 3ms 以内)する。
- linux-2.6.25/mod_timer()
- unplug_timer の時間切れで呼び出される関数は、blk_unplug_timeout である。
- unplug_timer や、unplug_delay などの
メンバーは blk_queue_make_request にて設定される。
blk_add_trace_generic(q, NULL, 0, BLK_TA_PLUG);
}
}
EXPORT_SYMBOL(blk_plug_device);
コメント†