Lions' 本読み (110)

wdir 手続き関連、二日連続負けてます。とりあえず wdir (7477) というか namei (7518) が先、らしい。call graph 的に表現すると以下なのか。
まず open (5764) から。

+- open -+- namei
         |
         +- open1

あるいは creat (5781) が以下。

+- creat -+- namei
          |
          +- maknode (namei の戻りが NULL の場合のみ)
          |
          +- open1

ええと、open の場合は flag に 0 をセットする形で namei が呼ばれてて、creat の場合は flag に 1 をセットする形で呼ばれてます。手続き定義のコメントによれば以下。

7514  * flag = 0: 名前を捜す場合
7515  *        1: 名前を生成する場合
7516  *        2: 名前を削除する場合

あ、あったぽい。namei 呼び出しで flag が 1 の場合は正常系なルートを通るのであれば dp は iput されないようです。正常系なルート、というのは以下で終わる形?

7603            if(flag==1 && c=='\0') {
7604                    if(access(dp, IWRITE))
7605                            goto out;
7606                    u.u_pdir = dp;
7607                    if(eo)
7608                            u.u_offset[1] = eo-DIRSIZ-2; else
7609                            dp->i_flag =| IUPD;
7610                    return(NULL);

上記部分ですが、テキスト 405p の 7600、7606、7607 な部分の解説の確認必要です。

良かった

とりあえず安心しつつ 18 から 20 俯瞰、を云々な方向にて。今日は早めですがこれで朝練終了とします。