unionfs

このスレ みて、unionfs上でbuildworldがうまく行ったとか言ってるので、 「はて、前試した時は、panicこそしなかったもののmakeすら動かんかったぞ」 と思ってまた mount -t unionfs /usr/home/foo/bar /usr/src/(/usrの下は一つのファイルシステム) で試して見たけど惨敗。で、色々調べて見ると、pwd(1)が エラーになっている事に気付く。なんでだろうと思って、getcwdにデバッグプリント を入れて見ると、__getcwd(2)はunionfs上では失敗していて、次にファイルシステム 内で固有の番号st_ino(ufsの場合iノード番号)を元に上のディレクトリを 順番に探して、'/'にたどり着くまでそれを繰り返すのだけれども、unionfsでは 下層のファイルシステムの値をstatの返り値としてそのまま渡す為、 マウントポイントでマウントポイントのファイルシステムとマウント先の ファイルシステムが同じだと、マウントポイントの検出が出来ず、 必要な処理を行い損なってgetcwdが失敗するらしい事が分かりました。 その為にstatのst_devの処理をその問題のないnullfsと同様にして見ると 一応うまく行きました。でもこれで良いんでしょうかね。