1 / 15

Linux Filesystem Pathname Lookup

Linux Filesystem Pathname Lookup. 2008/4/14. Pathname Lookup. 考慮以下兩種情形,傳入不同的 inode 作為參數 絕對路徑,以 ”/” 做為路徑開頭 current->fs->root Ex:/home/user/Desktop 相對路徑 current->fs->pwd Ex:Desktop Lookup 過程中,會先尋找 dentry cache 中的物件,避免大量自檔案系統中讀取. Pathname Lookup.

Download Presentation

Linux Filesystem Pathname Lookup

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linux FilesystemPathname Lookup 2008/4/14

  2. Pathname Lookup • 考慮以下兩種情形,傳入不同的inode作為參數 • 絕對路徑,以”/”做為路徑開頭 • current->fs->root • Ex:/home/user/Desktop • 相對路徑 • current->fs->pwd • Ex:Desktop • Lookup過程中,會先尋找dentry cache中的物件,避免大量自檔案系統中讀取

  3. Pathname Lookup • Consideration • Access rights of each directory • Symbolic link • Symbolic links may induce circular references • Another mounted filesystem • Namespace

  4. path_lookup 指標 檔案路徑名稱 如何存取被查詢檔案 查詢運算的結果 當查詢路徑為絕對路徑時,取得根目錄的dentry object,開始解析 當查詢路徑為相對路徑時,取得當前路徑的dentry object,開始解析

  5. path_walk 重設total_link_count,此counter會限制符號連結的查詢數目,避免查詢過久 呼叫__link_path_walk

  6. link_path_walk 取得flag,決定查詢處理的行為 跳過查詢路徑前面的所有’\’ 若剩下的路徑已為空,則進行目前的dentry object的有效性驗證 若depth不為0,則表示正在進行符號連結的查詢

  7. link_path_walk 檢查上一層目錄的權限是否允許對其下的元件進行處理,若不允許,則會跳出迴圈 以’\’作為分隔符號,切出下一個要查詢的元件名稱,並計算出一個32bit的hash值,供dentry cache查詢時使用

  8. link_path_walk 若目前的路徑已是根目錄,則不會再往上爬 。ex:/ 若取得的元件名稱為’..’,則會呼叫follow_dotdot(),想辦法回到上一層目錄 若目前的目錄不等於目前檔案系統的根目錄,則往上爬一層目錄 。ex:/mnt/cdrom/subdir1/subdir2 -> /mnt/cdrom/subdir1 若目前檔案系統的目錄並非掛載在另一個檔案系統上,則已經達到檔案系統的根目錄,不會再往上爬。ex: /mnt/cdrom,但/dev/cda已經自/mnt上斷線 目前的目錄是此檔案系統的根目錄,但是此檔案系統又掛在另一檔案系統的某個目錄下,則切換檔案系統,往上爬一個目錄。ex: /mnt/cdrom -> /mnt

  9. link_path_walk 以底層檔案系統的hash function更新hash值 呼叫do_lookup(),取得目前元件的dentry object

  10. do_lookup 在dentry cache中搜尋是否有該檔名的dentryobject 若無該物件,則自從磁碟中讀取,並且建立dentryobject放置於dentry cache中 若有,則驗證該dentry object的有效性,若已失效,則重新從磁碟中讀取

  11. link_path_walk 以底層檔案系統的hash function更新hash值 呼叫do_lookup(),取得目前元件的dentry object 檢查剛剛被解析的元件是否指向符號連結,若是,則需解析符號連結的路徑

  12. do_follow_link link_count用於控制巢狀符號連結的次數,超過MAX_NESTED_LINKS即回傳錯誤碼,避免無窮迴圈 total_link_count控制總符號連節的數目,避免kernel查詢過長的符號連結造成系統的緩慢 取得符號連結pathname最終的dentry object

  13. __do_follow_link 更新檔案的access time屬性 利用nd與pathname取得該符號連結最終的dentry object遞迴呼叫link_path_walk,

  14. link_path_walk 以底層檔案系統的hash function更新hash值 呼叫do_lookup(),取得目前元件的dentry object 檢查剛剛被解析的元件是否指向符號連結,若是,則需解析符號連結的路徑 檢查剛剛被解析的元件是否是目錄,若不是,則回傳錯誤碼。因為目前解析的元件是在路徑的中間部分,所以必定為目錄或是符號連結。若是已達到’last_component:’,則可以驗證有效性後結束程式

  15. Different Between 2.4 and 2.6 • Support for new file systems • IBM JFS • SGI XFS • NFS v4 • Andrew File System (AFS) • ReiserFS v4 (planned) • Other enhancements • Device mapper infrastructure (LVM2, EVMS) • Extended Attribute / Access Control List (ACL) support • Zero-copy NFS

More Related