ext2ファイルシステムでのパス名検索

ファイルのパス名検索path_walk関数において、ディレクトリエントリキャッシュにヒットしなかった場合、各ファイルシステムのパス検索関数を呼び出す。ディレクトリiノードのlookupオペレーションが呼び出すことにより実現している。

ext2ファイルシステムの場合は、 ext2_lookup関数が呼び出される。ディレクトリから目的のファイルを見つけだし、そのファイルのiノードをメモリ上に確保する。

  ext2_lookup(親ディレクトリのiノード, 検索するファイルのdentry)
      ファイル名に対応するディレクトリエントリを探す(ext2_find_entry関数)
      ディレクトリエントリからiノード番号を取り出す
      ディレクトリ読み込みに利用したバッファの解放(brelse関数)
      iノード番号に対応するメモリiノードを確保(iget関数)
      ディレクトリエントリキャッシュに登録(d_add関数)

また、ファイルのパス名検索の途中でシンボリックリンクファイルにヒットした場合、do_follow_link関数を用いて、シンボリックリンク先のファイルのdentryに変換する。ネスト数が32以上になるとエラー(ELOOP)

do_follow_link関数はシンボリックリンクファイルのiノードのfollow_linkオペレーションを呼び出すことにより機能を実現している。ext2ファイルシステムの場合は、 ext2_follow_link関数(パス名が短いとき)もしくはpage_follow_link(パス名が長いとき)が呼び出される。

また、パス検索中に発生したfollow_linkオペレーション呼び出し回数を数えており、回数が32以上になるとエラー(ELOOP)としている。

   ext2_follow_link(シンボリックリンクファイルのdentry, リンクをたどるときにベース)
        パス名を取り出す。
        vfs_follow_link(ベース, パス名)

   page_follow_link(シンボリックリンクファイルのdentry, リンクをたどるときにベース)
        ページキャッシュ経由でパス名の載ったブロックを読み込む
        vfs_follow_link(ベース, パス名)

   vfs_follow_link(ベース, パス名)
        新しいパス名を元にパス検索開始(path_walk関数)

(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST
1