Show page source of internal24-145-ファイルのリンク link #25281

[[PageNavi(internal24-navi)]]

{{{ 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ノードのリンク数を1増やす(i_nlinkメンバ)
      ◇リンクするファイルのiノードの遅延書き込み要求(mark_inode_dirty関数)
      新しいdentryとファイルのiノードのリンク(d_instantiate関数)
}}}

 [[Embed(internal24-images:img52.gif)]]
 

'''問題点など'''

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

----

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

[[PageNavi(internal24-navi)]]