Lions' 本読み (109)

昨日の継続は wdir 手続きで writei (6276) した後に iput (7344) で inode の参照カウントを減らす根拠が分からない、でした。確か昨日は xref も順に確認したはずなんですがそのあたりも含め確認入れてみます。

  • 当り前ですが iget (7276) で ++ されてますね
  • そして iput (7344) で -- されてます

を、i_count 属性を ++ してるのは iget 手続きだけなのか、素晴しい。

  • namei (7518) から iget 手続きを呼び出している
  • ialloc (7067) からも iget 手続きを呼び出している

あらら? と言いつつ iget で xref を云々してたら unlink で namei と iget を呼び出して (親と子)、両方 iput してるソレを確認。うーむ。

と思ったら

creat とか open で namei 手続き呼んでますな。でもこれはちょっと意味が違うような気もします。で、テキストの 396p とか 397p とか見てると以下な記述が (!!)

※訳注3 システムコールが呼び出された時点で u.u_arg[0] の値が u.u_dirp にコピーされ (2770 行)、実際にはこのフィールドが namei 経由で呼び出される uchar で使われる (7693 行)。

Lions' Commentary on UNIX より引用
何 だ こ れ は 。

つうか

そもそも namei で名前が '/' から始まらない場合はカレント、てコメントに書いてある上に

7531    dp = u.u_cdir;
7532    if((c=(*func)()) == '/')
7533            dp = rootdir;
7334    iget(dp->i_dev, dp->i_number);

u_cdir 属性ってカレントディレクトじゃんorz

時間切れ

namei 手続き掘削必要。flag な引数が謎すぎる。
でもやっぱ namei 手続き呼び出しでカレントディレクトリに対する参照カウントは 7534 な iget 手続き呼び出しで ++ されるはず。
ちょっと頭を冷やして再度 15 から 20 を俯瞰します。