Show page source of internal22-144-ファイルのリンク-link #22630

{{{ comment
h2w-title:ファイルのリンク link
}}}

== ファイルのリンク link == #SECTION0310121000000000000000

ファイルのリンク処理は、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関数)
}}}

[[Embed(internal22-images:img48.gif)]]
 

'''問題点'''

  1.  親ディレクトリiノードのリンク数が遅延書き込みとなっている。このタイミングでシステムクラッシュすると、実際より一つ少ない リンク数であるように見えてしまう。しかし、これはfsckにより 簡単に修復できる。fsckをかけずに運用を行った場合、このファイルの削除すると 存在しなくなったファイルを参照するディレクトリエントリが 残ってしまい危険である。

----

''(NIS)HirokazuTakahashi [[BR]]2000年06月11日 (日) 22時29分57秒 JST''