觀察 ext4 的行為,會發現 .
跟 ..
的 inode 數字分別是
當前的 directory 跟 parent directory.
從實作上可以參考這部分的程式碼
./namei.c:2842:struct ext4_dir_entry_2 *ext4_init_dot_dotdot(struct inode *inode,
用 trace-cmd (ftrace) 來測試 mkdir
$ sudo trace-cmd record -l ext4_* -p function_graph
$ trace-cmd report | less
可以知道 function call 的傳遞是
ext4_mkdir ->
ext4_init_new_dir ->
ext4_init_dot_dotdot
根據 ext4 的程式碼, dot dot 的實作是建立新的 directory 的時候,
同時建立兩個 dentry 分別 link 到 新建立的 inode 跟 parent inode,
然後再新增回 dentry.
換句話說,是新增兩個 dentry 分別處理 . 跟 ..