如果没有待处理的请求,则激活设备,启动定时器,到点之后触发硬件传输
blk_plug_device
=>test_and_set_bit(QUEUE_FLAG_PLUGGED, &q->queue_flags)
=>mod_timer(&q->unplug_timer, jiffies + q->unplug_delay)
=>blk_unplug_timeout //q->unplug_timer.function = blk_unplug_timeout;到点之后激活blk_unplug_timeout
=>kblockd_schedule_work(&q->unplug_work);
=>blk_unplug_work //INIT_WORK(&q->unplug_work, blk_unplug_work)
=>q->unplug_fn(q);
=>generic_unplug_device //q->unplug_fn = generic_unplug_device;
=>__generic_unplug_device(q);
=>q->request_fn(q); //对应scsi_request_fn
定时器到时批量提交有点像图书馆代理处或者银行。
图书还书或者借书不必去图书馆,可以在社区附近的代理点排队办理。例如排队还书,代理处将书分门别类。每天定点会有人将书运回图书馆。
银行也是一样,大家排队存取钱。银行下班时将钱放到银行小金库。
块设备的读流程分析
http://blog.youkuaiyun.com/chenyu105/article/details/8604149
https://www.cnblogs.com/wuchanming/p/3835713.html //这位仁兄的博客不少关于文件系统和块设备驱动
kernel 3.10内核源码分析–块设备层request plug/unplug机制
http://blog.chinaunix.net/uid-30282771-id-5755244.html
1446

被折叠的 条评论
为什么被折叠?



