Lions' 本読み (118)

今日も 30min で何ができるのか的ソレ。
つうか、なんとなくですが IUPD フラグってディレクトリエントリの伸長とかあんま関係なくって単純にタイムスタンプのためだけだったりするのかなぁ。
そもそも namei がちゃんと読めてない、ってオチだとするとかなり情けないぞ。

とは言え

7607 の判定はディレクトリエントリに空きがあるかどうか、という形に見えるのは間違いないはず。ということはこの時点ではディレクトリエントリは伸長されていないことになる。
でもテキスト 408p にある wdir 手続きの解説には

この手続きはディレクトリファイルがすでに検索済みであり、ディレクトリファイルの i ノードがすでに割り当てられていて、u.u_offset の値が適切に設定してあることが前提になっている。

Linons' Commentary on UNIX より引用
ということなのでやっぱ namei 手続きがポイントなのかなあ。時間が無いので取り組みが微妙です。7622 以降のあたり。

見てみる

以下な条件式ですが

7622    if((u.u_offset[1]&0777 == 0) {

512 境界かどうか、という判定なのか。コメントにあるように_ブロック境界_ですね。で、以下な命令で読み込んでるのですが、ここの理解が微妙。

7625            bp = bread(dp->i_dev,
7626                    bmap(dp, ldiv(u.u_offset[1], 512)));

むむ

タイムアップですが、やはり核心は 7622 から 7647 あたりかなと見てます。明日は早起きしてこちら方面がっつり、なのかどうなのか。