LAN Tank その4

NFSv3にしたら、NetBSDからls(1)で何も返ってこない。

READDIR3手続きに対してREADDIRPLUSの結果が返ってきているような…

mount_nfsに-lオプションをつけてとりあえず回避。

トラックバック(0)

トラックバックURL: http://makoto.minoura.org/d/mt/mt-tb.cgi/89

コメント(2)

printkデバッグにより原因判明。nfs3xdr.cにある関数encode_entry()にわたってくる引数がおかしい。でも呼出し元はどう見ても正しいので、gcc-3.0.4の最適化のバグではないかとあたりを付けた。実際、nfs3xdr.cのコンパイル時に、-O2のかわりに-O1を使うと回避できる。アセンブラコードを見比べて、-foptimize-sibling-callsの問題だとわかった。fs/nfsd/Makefileに以下のパッチを当てる。 --- fs/nfsd/Makefile.BAK Fri Oct 24 22:21:58 2003 +++ fs/nfsd/Makefile Mon Nov 7 13:37:30 2005 @@ -17,4 +17,6 @@ obj-$(CONFIG_NFSD_V3) += nfs3proc.o nfs3 obj-m := $(O_TARGET) +CFLAGS_nfs3xdr.o += -fno-optimize-sibling-calls + include $(TOPDIR)/Rules.make ところでshって関数の引数レジスタで渡すんだな。
つか、全体を-fno-optimize-sibling-callsでコンパイルし直すべきだな。

コメントする

このブログ記事について

このページは、みが2005年11月 7日 11:00に書いたブログ記事です。

ひとつ前のブログ記事は「LAN Tankその3」です。

次のブログ記事は「ビラ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。