*参照元 [#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 with the queue lock
  *    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, let the unplug
 	 * handling reinvoke the handler shortly if we already got there.
 	 */
 	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]

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