generic block layer io request processing

来源:互联网 发布:淘宝返利群怎么赚钱 编辑:程序博客网 时间:2024/05/17 03:31
一般的基本request queue和io scheduler的bio请求处理

standard request handling

1.
generic_make_request -> make_request_fn (blk_queue_io calls io_scheduler to merge/append the request into the associated request queue)

2.
dirver unplug -> q->request_fn (driver registered while initing the queue) -> blk_fetch_request (return a request from queue and start a timer for it)  -> driver starts io


unplug from scheduler

1.
schedule -> sched_submit_work -> blk_schedule_flush_plug -> blk_flush_plug_list -> queue_unplugged -> blk_run_queue_async -> mod_delayed_work(kblockd_workqueue, &q->delay_work, 0)

2.
kblockd_workqueue scheduled -> blk_delay_work (q->delay_work) -> __blk_run_queue -> __blk_run_queue_uncond -> q->request_fn (driver registered)


job done & wake up request task

1.
driver dma done & irq arrived -> queue_work(driver_wq, <request_done>)

2.
driver_wq scheduled -> __blk_end_request -> __blk_end_bidi_request -> blk_finish_request -> __blk_put_request -> freed_request -> wake_up(&rl->wait[sync])
0 0
原创粉丝点击