本文共 1017 字,大约阅读时间需要 3 分钟。
clear_page_dirty_for_io 在实际文件系统中大量存在,但是都是为了支持这些文件系统的一些特殊的特性,比如f2fs的垃圾回收.mm/page-writeback.c 2228行左右,发现在调用实际文件系统的writeback写回之前,会将文件的脏位取消掉,所以到真正的的write_back之前,其实page的dirty位已经没有了!同时,write_one_page函数中,在调用珍重的writeback函数之前也会把页的脏位去掉!Call trace:[] dump_backtrace+0x0/0x12c[ ] show_stack+0x10/0x1c[ ] do_write_data_page+0xa8/0x77c[ ] f2fs_write_data_page+0x3fc/0x5dc[ ] __f2fs_writepage+0x18/0x60[ ] write_cache_pages+0x1f0/0x5b4 会在该函数中将page的 dirty 标志 PG_dirty 清除. 然后进入write back 过程, 在写入之前设置write back标志,并在bio结束之后, 在bio的回调函数中将writeback标志位清除. [ ] f2fs_write_data_pages+0xf8/0x370[ ] do_writepages+0x20/0x44[ ] __writeback_single_inode+0xac/0xbb0[ ] writeback_sb_inodes+0x280/0x518[ ] __writeback_inodes_wb+0x98/0xe0[ ] wb_writeback+0x2b4/0x73c[ ] wb_workfn+0x3d8/0x98c[ ] process_one_work+0x218/0x7ec[ ] worker_thread+0x134/0x458[ ] kthread+0xd4/0xec
参考资料:
https://www.cnblogs.com/honpey/p/4926605.html