免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2622 | 回复: 6
打印 上一主题 下一主题

[文件系统] page_cache_async_readahead的page lock是在哪里做的? [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-01-26 14:36 |只看该作者 |倒序浏览
page_cache_async_readahead最后会调用blk_finish_plug将request提交给内核

request执行完之后我看到在mpage_end_io回调里面会unlock_page

那么开始执行这个request之前,lock_page是在什么地方做的?
我找了很久都没找到

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
2 [报告]
发表于 2015-01-26 15:20 |只看该作者
应该是在调用者函数中,比如:do_generic_file_read中

论坛徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
3 [报告]
发表于 2015-01-26 22:29 |只看该作者
刚才跟了下代码:
do_generic_file_read中如果要读的数据不在page cache中,会page_cache_sync_readahead,直到调用add_to_page_cache_lru,里面就会lock page,当set page writeback后,会unlock page。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
4 [报告]
发表于 2015-01-27 12:19 |只看该作者
回复 3# 镇水铁牛


    非常感谢,原来这么早就就lock了,我原来还以为要等到从request_queue里取出request时才会lock

论坛徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
5 [报告]
发表于 2015-01-27 21:53 |只看该作者
回复 4# arm-linux-gcc


    我上面回复的后半句是针对IO写流程的。page的写流程中,会在两个地方lock,第一次lock的时机确实很靠前。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
6 [报告]
发表于 2015-01-27 23:08 |只看该作者
回复 5# 镇水铁牛


    请问另外一次是在那里呢?

论坛徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
7 [报告]
发表于 2015-01-27 23:21 |只看该作者
在blcok层:
        以buffer io为例,常规的写需要执行3步:write_begin---copy_data---write_end
        write_begin主要是在address_space查找该page,如果找到则lock,没找到则分配一个page,并lock。   
        copy_data为常规的用户态数据copy到内核中,访问page时需要kmap。
        write_end则目的是更新buffer_head,page, inode的状态(主要是标脏),并unlock该page.
        然后**pdflush,此时,异步IO就返回了。
在scsi层:
        当dirty page数量大于阈值、或者dirty page在内存中存在过长时间,pdflush会被激活。
        首先遍历所有dirty的inode,然后依次回写mapping中的数据到设备中。
        在write_cache_pages中,lock page后,直到调用__block_write_full_page,遍历出脏缓冲区,set_page_writeback。
        之后submit_bh,unlock page,但此时bh已经被lock,设置回调end_bio_bh_io_sync。
        之后submit_bio,将bio提交到磁盘驱动维护的请求队列中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP