generic block layer io request processing

一般的基本request queue和io scheduler的bio请求处理

standard request handling

1.
generic_make_request -> make_request_fn (blk_queue_bio 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])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值