Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
ファイルのリンク処理は、vfs sys_link(do_link)関数が行っている。リンク元のファイルのdentryとリンク先になるdentryを、lookup_dentry関数を用いて求めたあと、リンク元のファイルの親ディレクトリのiノードのlinkオペレーションを呼び出す。
ext2ファイルシステムの場合、ディレクトリのlinkオペレーションは、 ext2_link関数である。通常ファイルやシンボリックリンクファイルはlinkオペレーションを持っていない。(リンク処理で操作するのはディレクトリの情報)
ext2_link(リンク元のファイルのdentry、移動先のディレクトリのiノード, 新しいdentry) if(ディレクトリなら) return エラー 移動先のディレクトリに新しいdentryを登録(ext2_add_entry関数) ディレクトリエントリに、リンクするファイルのiノード番号を書き込む ◇ディレクトリブロックの遅延書き込み要求(mark_buffer_dirty関数) if(SYNC属性 ?) { ◆ディレクトリブロックの書き込み(ll_rw_block関数, wait_on_buffer関数) } ディレクトリブロックを読み込んだバッファの解放(brelse関数) リンクするフィアルのiノードのリンク数を1増やす(i_nlinkメンバ) ◇リンクするファイルのiノードの遅延書き込み要求(mark_inode_dirty関数) 新しいdentryとファイルのiノードのリンク(d_instantiate関数)
問題点
(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST1
[PageInfo]
LastUpdate: 2008-08-27 14:45:52, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members