Lions' 本読み (115)
30m しかないけど頑張ってみます。昨日の続き。
struct inode な i_flag 属性に IUPD なフラグが立ってた場合の挙動について確認続行。問題になっているのは creat 時、ディレクトリエントリに空きが無かった場合に
7609 dp->i_flag =| IUPD;
している部分です。dp はファイルを新規に作成するディレクトリエントリの struct inode なオブジェクトですね。
writei 手続き
む、テキスト 402p に以下な記述があります。
なぜ IUPD フラグを再度設定することが必要で、かつ望ましいことなのか考えよ (6285 行を参照)
Lions' Commentary on UNIX より引用
たしかに以下な初期設定して
6285 ip->i_flag =| IACC|IUPD;
ループの末端で再設定してますね。
6318 ip->i_flag =| IUPD; 6319 } while(u.u_error==0 && u.u_count!=0);
ループの中ではこの属性を操作しているような箇所はありません (というかこの手続き内でそうした記述はありません)。
時間切れ。writei 手続き、継続確認の方向です。