write_back 浅浅分析
hon@hon:~/f2fs$ grep -i "clearpagedirty" . -nr
./mm/shmem.c:1240: ClearPageDirty(page);
./mm/memory-failure.c:717: ClearPageDirty(p);
./mm/vmscan.c:562: ClearPageDirty(page);
./mm/page-writeback.c:2612: if (TestClearPageDirty(page))
./mm/page-writeback.c:2618: ClearPageDirty(page);
./mm/page-writeback.c:2687: if (TestClearPageDirty(page)) {
./mm/page-writeback.c:2697: return TestClearPageDirty(page);
./fs/ext4/inline.c:746: ClearPageDirty(page);
./fs/nilfs2/page.c:496: return TestClearPageDirty(page);
./fs/btrfs/tests/extent-io-tests.c:229: ClearPageDirty(page);
./fs/hugetlbfs/inode.c:298: ClearPageDirty(page);
./fs/gfs2/ops_fstype.c:239: ClearPageDirty(page);
clear_page_dirty_for_io 在实际文件系统中大量存在,但是都是为了支持这些文件系统的一些特殊的特性,比如f2fs的垃圾回收.
mm/page-writeback.c 2228行左右,发现在调用实际文件系统的writeback写回之前,会将文件的脏位取消掉,所以到真正的的write_back之前,
其实page的dirty位已经没有了!
同时,write_one_page函数中,在调用珍重的writeback函数之前也会把页的脏位去掉!
Call trace:
[<ffffffc00008960c>] dump_backtrace+0x0/0x12c
[<ffffffc000089748>] show_stack+0x10/0x1c
[<ffffffc00034d97c>] do_write_data_page+0xa8/0x77c
[<ffffffc00034e44c>] f2fs_write_data_page+0x3fc/0x5dc
[<ffffffc00034761c>] __f2fs_writepage+0x18/0x60
[<ffffffc000180d70>] write_cache_pages+0x1f0/0x5b4 会在该函数中将page的 dirty 标志 PG_dirty 清除. 然后进入write back 过程, 在写入之前设置write back标志,并在bio结束之后, 在bio的回调函数中将writeback标志位清除.
[<ffffffc000348cbc>] f2fs_write_data_pages+0xf8/0x370
[<ffffffc000181bd4>] do_writepages+0x20/0x44
[<ffffffc000204e20>] __writeback_single_inode+0xac/0xbb0
[<ffffffc000205ba4>] writeback_sb_inodes+0x280/0x518
[<ffffffc000205ed4>] __writeback_inodes_wb+0x98/0xe0
[<ffffffc0002061d0>] wb_writeback+0x2b4/0x73c
[<ffffffc0002076c4>] wb_workfn+0x3d8/0x98c
[<ffffffc0000b505c>] process_one_work+0x218/0x7ec
[<ffffffc0000b5764>] worker_thread+0x134/0x458
[<ffffffc0000bc010>] kthread+0xd4/0xec
write_back 浅浅分析的更多相关文章
- SpringBoot的浅浅配置和小整合
SpringBoot的浅浅配置和小整合 本文如题,就是浅浅记录一下学习的过程中一些过程,比较简单,并没有多少深度.谢谢! SpringBoot创建 从IDEA中新建项目或者模块.注意jdk版本,一般不 ...
- 浅谈分析表格布局与Div+CSS布局的区别
(1)表格布局 表格布局容易掌握,布局方便.但表格布局需要通过表格的间距或者使用透明的gif图片来填充布局板块间的间距,这样布局的网页中表格会生成大量难以阅读和维护的代码:而且表格布局的网页要等整个表 ...
- BASE64编码乱码问题的浅层分析与解释
本文由作者朱臻授权网易云社区发布. 1问题案例 曾在开发过程中,我们遇到了BASE64编码乱码的问题,该问题的场景如下: 当web前端,将带有中文字符的字符串base64编码后,传到后端.当后端将数据 ...
- 浅入分析Linux
Linux 操作系统必须完成的两个主要目的 与硬件部分交互, 为包含在硬件平台上的所有底层可编程部件提供服务 为运行在计算机系统上的应用程序(即所谓的用户空间)提供执行环境 一些操作系统运行所有的用户 ...
- 浅入分析和Linux内核相关的文件夹/proc和/sys .
近来文章被踩的厉害,我只想把自己从马哥学的知识自己总结下发到博客里,但是没想到昨天一篇文章刚发一上午被踩了9次...如果您真的觉得我的文章很烂,请告诉我原因,不胜感激. 这星期,马哥讲了关于Linux ...
- GoF 设计模式:浅浅印象
23种设计模式,常常多个模式结合使用,主要是为了解决中大型软件项目"类和对象"膨胀的问题,进而有效组织类的结构而提出的.可划分为3类:创建型(关于类的创建),结构型(多个类的组织) ...
- Flex Cairngrom框架浅浅印象
VO ↓ Model ← Delegate ← Command ↓ ↑ ↓ ...
- 浅浅地谈一下随机算法【poj2454】【poj3318】
随机算法我也只是稍微接触了一下,就是想写篇博客自己稍微总结一下 其实随机算法也算是一个玄学吧,运气不好还是会wa.但是我们知道,计算机可以在短时间内计算大量的数据,所以碰到正确答案的概率还是挺大的. ...
- 浅尝Go语言GC
大家好,我是小栈君,因为个人和工作的缘故,所以拖更了一点时间,但是关于拖更的内容小栈君会在后续的时间中补回来,还希望大家继续支持和关注小栈君.当然,在国内疫情稍微减缓的情况下,小栈君在这里也多说两句, ...
随机推荐
- SQL Server join介绍
介绍Inner Join(可以省略Inner,平常经常inner,就是inner join), Full Out Join,Cross Join,Left Join, Right Join区别. )) ...
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q40-Q44)
Question 40You need to send a single value from a consumer Web Part to a provider Web Part.Which int ...
- virtualbox虚拟机迁移出现"connot find device eth0"错误
我在自己的机器上面配置virtualbox虚拟机完毕以后,移植到另外一台机器上面,登陆页面总是在检查network,并且最后网络加载失败,不论我是用桥接还是NAT方式连接.登陆系统以后,我尝试连接网络 ...
- Android 身份证号码查询、手机号码查询、天气查询
1.基本信息 身份证号码查询:http://apistore.baidu.com/apiworks/servicedetail/113.html 手机号码:http://apistore.baidu. ...
- Python: 关于nose
1. 使用rednose增强输出 pip install rednose nosetests --rednose tests 2. 使用coverage pip install coverage no ...
- Android logcat
logcat是Android中一个命令行工具,可以用于得到程序的log信息. 基本命令 logcat使用方法如下所示: [adb] logcat [<option>] ... [<f ...
- Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件
最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下 1.UI控件与布局 常用的主要 ...
- Android 之 2048 的游戏逻辑分析
继续学习了极客学院的实战路径课程,讲到了2048游戏的编写过程,我在这里作个总结分享给大家(结果会附源代码和我改写后的代码): 这里主要包括两个方面:1.2048界面的绘制 2.2048算法逻辑的 ...
- 使用APUE(UNIX高级编程)源代码
方法一:1.APUE源代码下载:http://www.apuebook.com/code3e.html2.我保存到了/root下.解压缩:tar -xzvf src.tar.gz3.cd apue.2 ...
- ubuntu 获取root权限
实验环境: ubuntu 13.04 背景:现在有一台装有 ubuntu 的电脑,如何获取root权限? 方案一:进入单用户维护模式,重置root密码. 方案二:U盘挂载原根分区,修改/etc/pas ...