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 浅浅分析的更多相关文章

  1. SpringBoot的浅浅配置和小整合

    SpringBoot的浅浅配置和小整合 本文如题,就是浅浅记录一下学习的过程中一些过程,比较简单,并没有多少深度.谢谢! SpringBoot创建 从IDEA中新建项目或者模块.注意jdk版本,一般不 ...

  2. 浅谈分析表格布局与Div+CSS布局的区别

    (1)表格布局 表格布局容易掌握,布局方便.但表格布局需要通过表格的间距或者使用透明的gif图片来填充布局板块间的间距,这样布局的网页中表格会生成大量难以阅读和维护的代码:而且表格布局的网页要等整个表 ...

  3. BASE64编码乱码问题的浅层分析与解释

    本文由作者朱臻授权网易云社区发布. 1问题案例 曾在开发过程中,我们遇到了BASE64编码乱码的问题,该问题的场景如下: 当web前端,将带有中文字符的字符串base64编码后,传到后端.当后端将数据 ...

  4. 浅入分析Linux

    Linux 操作系统必须完成的两个主要目的 与硬件部分交互, 为包含在硬件平台上的所有底层可编程部件提供服务 为运行在计算机系统上的应用程序(即所谓的用户空间)提供执行环境 一些操作系统运行所有的用户 ...

  5. 浅入分析和Linux内核相关的文件夹/proc和/sys .

    近来文章被踩的厉害,我只想把自己从马哥学的知识自己总结下发到博客里,但是没想到昨天一篇文章刚发一上午被踩了9次...如果您真的觉得我的文章很烂,请告诉我原因,不胜感激. 这星期,马哥讲了关于Linux ...

  6. GoF 设计模式:浅浅印象

    23种设计模式,常常多个模式结合使用,主要是为了解决中大型软件项目"类和对象"膨胀的问题,进而有效组织类的结构而提出的.可划分为3类:创建型(关于类的创建),结构型(多个类的组织) ...

  7. Flex Cairngrom框架浅浅印象

    VO ↓ Model   ←  Delegate ← Command   ↓                                    ↑   ↓                      ...

  8. 浅浅地谈一下随机算法【poj2454】【poj3318】

    随机算法我也只是稍微接触了一下,就是想写篇博客自己稍微总结一下 其实随机算法也算是一个玄学吧,运气不好还是会wa.但是我们知道,计算机可以在短时间内计算大量的数据,所以碰到正确答案的概率还是挺大的. ...

  9. 浅尝Go语言GC

    大家好,我是小栈君,因为个人和工作的缘故,所以拖更了一点时间,但是关于拖更的内容小栈君会在后续的时间中补回来,还希望大家继续支持和关注小栈君.当然,在国内疫情稍微减缓的情况下,小栈君在这里也多说两句, ...

随机推荐

  1. Windows 2012 R2中安装SharePoint 2013 sp1参考

    之前介绍过在window 2012中安装SharePoint 2013,这次,借着SharePoint 2013 sp1补丁发布之际,介绍下在window 2012 r2中安装SharePoint 2 ...

  2. adb 的相关操作及遇到的问题

    一. 电脑连接你的手机 1.打开手机的开发者模式 并  开启调试工具 2.用手机连接上  你的电脑 3.在eclipse 中的DDMS 中查看是否 连接到 如图所示: 这时会发现 多了一个连接 :说明 ...

  3. android lsitview setOnItemLongClickListener 无效或不执行

    今天遇到了lsitview的setOnItemLongClickListener的方法不执行,我是在listview中的每一个ITEM都存放了不同的布局:给整个item布局设置了点击事件onClick ...

  4. 物联网网络编程、Web编程综述

    本文是基于嵌入式物联网研发工程师的视觉对网络编程和web编程进行阐述.对于专注J2EE后端服务开发的童鞋们来说,这篇文章可能稍显简单.但是网络编程和web编程对于绝大部分嵌入式物联网工程师来说是一块真 ...

  5. OC登陆界面登陆按钮动画

    1.原作者:@entotsu 1.1 原作者连接:https://github.com/entotsu/TKSubmitTransition 2.使用: import "HyTransiti ...

  6. 明明已经执行Log.i,偏偏打不出日志

    Android内打日志用的当然是Log.i(tag,string),调试时的日志输出可以很快的反映一些问题,方便我们跟进. 但是如果连日志都打不出来了怎么办呢,我今天就遇到了比较坑的问题.项目里别的日 ...

  7. iOS开发笔记5:多线程之NSThread、NSOperation及GCD

    这篇主要总结下iOS开发中多线程的使用,多线程开发一般使用NSThread.NSOperation及GCD三种方式,常用GCD及NSOperation. 1.NSThread 创建线程主要有以下三种方 ...

  8. (第五章)java面向对象之this的作用总结

    this关键字总是指向调用该方法的对象. this可以代表任何对象,当this出现在某个方法体中时,它所代表的对象是不确定的,但它的类型是确定的,它所代表的对象只能是当前类的(在那个类中就是那个类), ...

  9. 生命游戏/Game of Life的Java实现(转)

    首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死 ...

  10. nim2 取石头youxi

    a先把石头分堆,然后bababa的顺序取石头,只能取其中一堆中的若干颗(不能不取) 这种问题先考虑 先取者的胜态问题 (1,1)先取者必败, 所以(1,x),当x>1时可以转换为(1,1)使后取 ...