2011-01-07 43 views
4

是否可以從給定的dentry和inode構造絕對路徑?Linux Kernel dentry和inode

感謝所有

+0

你可以反覆提升'd_parent'並跟蹤'd_name'嗎? – chrisaycock 2011-01-07 05:46:08

+0

是的,這是可能的,我已經這麼做了...... *但是*如果給定的dentry是一個已安裝的文件系統(來自USB,NFS或其他任何東西),則d_parent將停止,直到該文件系統的根目錄爲止......假設/ dev/sda1安裝在/ tmp/a/b/c/d/e /(* root的/ dev/sda1 *),最高的d_parent值將會*在*「e」目錄之後 – 2011-01-07 05:48:05

+1

@Billy您是否希望爲不同的解決方案? – chrisaycock 2011-01-07 05:50:10

回答

1

看看dentry_path()。它將填充一個緩衝區,直到達到根的路徑。要繼續過去,您需要遍歷文件的f_vfsmount和它的mnt_parent s,直到您到達文件系統的真實根目錄。

1

是的,只有一個dentry就足夠了,通過dentry-> parent返回。 當你遇到一個掛載點時要小心,對於linux支持「一個dentry掛載多個設備」......好吧,它很容易編碼,只需切換到vfsmnt-> mnt_parent。

順便說一句:我經常困惑,爲什麼linux建立一個字段「mnt_parent」而不是「mnt_child」的掛載點鏈接列表,當我寫這個答案時,我似乎猜測出了一些東西。