ext3周りを読む

職場でext3周りで問題を起こしたサーバが居たので、障害箇所周辺のソースを探索
ようするにファイルシステムが新しいブロックの割り当て要求に対して、管理ブロック*1を返そうとしてエラーチェックに引っかかっていたのが原因。ファイルシステムにおいてブロックの新規割り当ては性能に直結する部分であるので、かなり複雑な処理が入っている。そのため私が完全に読めていない可能性が高いのだが、返してはいけないブロックを返そうとしている箇所ではチェックしているくせに、そもそもallocateする候補として管理領域を除外するような処理が見当らない。えーーー、なんでこれで動くの???2.6系でext3なんて手堅い構成の代表だと思われるが、ググっても世間でそのような報告はあまり無いみたい*2。冷静に考えたらコード側での問題というよりはデータ側、つまりfree blockに変な値が入ってしまっているのが原因と思われるが、そうだとしたらこの個体で再発の恐れもあるな。むーん。
debugをフラグを有効にしておけばもうすこし有意な情報が採れたかもしれないが、残念ながら再現が難しいこともあって現物を使っての検証は出来そうにない。

*1:具体的にはブロックグループの先頭にあるブロックビットマップの領域

*2:全く無いわけではない