write back 淺淺分析

2022-04-14 00:46:22 字數 1778 閱讀 7287

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:

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

淺淺的分析下es6箭頭函式

箭頭函式作為es6重點的語法內容之一,很多開發者對其愛不釋手,當也要注意其可能存在的問題,其正確的使用場景,否則會引起不必要的bug。場景1 沒有引數,空的小括號,返回值不用加 return,也就是說支援單一表示式,如果加return 需要構成語句 vardemo 5675 場景2 只有乙個引數 小...

淺淺一談 設計模式

看軟體設計資料,走到設計模式這裡,一頭霧水。遂翻書學習,這裡簡單記錄一下,為以後複習用 1,簡單工廠 簡單工廠 寫乙個計算 加減乘除的運算 1 class program218 1920 21 運算類22 23 class operationclass 2430 set 31 32private d...

淺淺的理解git的使用

git clone 專案所屬位址的url4 設定你的身份命令 git config global user.name john doe git config global user.email johndoe example.com5 設定你的編輯器,如果沒有設定,那就使用系統預設的編輯器 git ...