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 俯瞰、を云々な方向にて。今日は早めですがこれで朝練終了とします。