Linux filesystem pathname lookup
This presentation is the property of its rightful owner.
Sponsored Links
1 / 15

Linux Filesystem Pathname Lookup PowerPoint PPT Presentation


  • 98 Views
  • Uploaded on
  • Presentation posted in: General

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Linux filesystem pathname lookup

Linux FilesystemPathname Lookup

2008/4/14


Pathname lookup

Pathname Lookup

  • 考慮以下兩種情形,傳入不同的inode作為參數

    • 絕對路徑,以”/”做為路徑開頭

      • current->fs->root

      • Ex:/home/user/Desktop

    • 相對路徑

      • current->fs->pwd

      • Ex:Desktop

  • Lookup過程中,會先尋找dentry cache中的物件,避免大量自檔案系統中讀取


Pathname lookup1

Pathname Lookup

  • Consideration

    • Access rights of each directory

    • Symbolic link

    • Symbolic links may induce circular references

    • Another mounted filesystem

    • Namespace


Path lookup

path_lookup

指標 檔案路徑名稱

如何存取被查詢檔案

查詢運算的結果

當查詢路徑為絕對路徑時,取得根目錄的dentry object,開始解析

當查詢路徑為相對路徑時,取得當前路徑的dentry object,開始解析


Path walk

path_walk

重設total_link_count,此counter會限制符號連結的查詢數目,避免查詢過久

呼叫__link_path_walk


Link path walk

link_path_walk

取得flag,決定查詢處理的行為

跳過查詢路徑前面的所有’\’

若剩下的路徑已為空,則進行目前的dentry object的有效性驗證

若depth不為0,則表示正在進行符號連結的查詢


Link path walk1

link_path_walk

檢查上一層目錄的權限是否允許對其下的元件進行處理,若不允許,則會跳出迴圈

以’\’作為分隔符號,切出下一個要查詢的元件名稱,並計算出一個32bit的hash值,供dentry cache查詢時使用


Link path walk2

link_path_walk

若目前的路徑已是根目錄,則不會再往上爬 。ex:/

若取得的元件名稱為’..’,則會呼叫follow_dotdot(),想辦法回到上一層目錄

若目前的目錄不等於目前檔案系統的根目錄,則往上爬一層目錄 。ex:/mnt/cdrom/subdir1/subdir2 -> /mnt/cdrom/subdir1

若目前檔案系統的目錄並非掛載在另一個檔案系統上,則已經達到檔案系統的根目錄,不會再往上爬。ex: /mnt/cdrom,但/dev/cda已經自/mnt上斷線

目前的目錄是此檔案系統的根目錄,但是此檔案系統又掛在另一檔案系統的某個目錄下,則切換檔案系統,往上爬一個目錄。ex: /mnt/cdrom -> /mnt


Link path walk3

link_path_walk

以底層檔案系統的hash function更新hash值

呼叫do_lookup(),取得目前元件的dentry object


Do lookup

do_lookup

在dentry cache中搜尋是否有該檔名的dentryobject

若無該物件,則自從磁碟中讀取,並且建立dentryobject放置於dentry cache中

若有,則驗證該dentry object的有效性,若已失效,則重新從磁碟中讀取


Link path walk4

link_path_walk

以底層檔案系統的hash function更新hash值

呼叫do_lookup(),取得目前元件的dentry object

檢查剛剛被解析的元件是否指向符號連結,若是,則需解析符號連結的路徑


Do follow link

do_follow_link

link_count用於控制巢狀符號連結的次數,超過MAX_NESTED_LINKS即回傳錯誤碼,避免無窮迴圈

total_link_count控制總符號連節的數目,避免kernel查詢過長的符號連結造成系統的緩慢

取得符號連結pathname最終的dentry object


Do follow link1

__do_follow_link

更新檔案的access time屬性

利用nd與pathname取得該符號連結最終的dentry object遞迴呼叫link_path_walk,


Link path walk5

link_path_walk

以底層檔案系統的hash function更新hash值

呼叫do_lookup(),取得目前元件的dentry object

檢查剛剛被解析的元件是否指向符號連結,若是,則需解析符號連結的路徑

檢查剛剛被解析的元件是否是目錄,若不是,則回傳錯誤碼。因為目前解析的元件是在路徑的中間部分,所以必定為目錄或是符號連結。若是已達到’last_component:’,則可以驗證有效性後結束程式


Different between 2 4 and 2 6

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


  • Login