> > 小崎と申します
> >
> > シロウトなんで口を挟むのに恐縮なんですが・・・
> 
> えー

いや、定型あいさつ文に異論を挟まれてもコメントに困る物が(^_^;

> > 上記文章は、createを使う事によってO_EXCLを実現できるとRFC策定者は思ってるよ。
> > と言ってるだけではないでしょうか?
> 
> 私がRFC の件の 文章から思ったのは、create は有無をいわさず
> O_EXCL な挙動が期待されているのではないか、ということです。

えーと、はい、ソースコードを見る限り、そのようになっているように見えます。

NFSv3で新しく入ったO_EXCL専用createプロシージャが何をしているかというと、
内部的に、createとsetattrの2つのプロシージャを発行し、かつ最初の
create時にatime, mtimeに正しい時刻ではなく、ある種のcookie値を入れておく、
で、サーバ側はO_EXCLなcreateでかつ、cookie値がinodeのmtime, atimeに保存してある
それと一致したらパケット再送と判断して、エラーにならないようよきに
計らう。

という事をしています。逆にいうと、これがなかったときには
パケット再送によってうっかりEEXISTが返ってくる事はあっても、2つの
プロセスがcreateプロシージャが成功することは出来ないように見えます。

renameやunlinkをうまく組み合わせて、raceをつくって、VFSのpath lookupを
だます事が出来るかも知れないけど、これも一時ファイルの使用ケースでは
考えなくてもよいような気がしますしねぇ・・・


> 実装がそうかどうかはよくわからないんですが、そうでないとした
> ら私の期待するようにはならないでしょうね。

が、多くのドキュメントが僕の調査結果を否定しているので、
akrさんの提案どおりに実装するが、クラスのドキュメントに
「注意: NFSv2では動かない」って書くぐらいが落としどころかと思うのですが
いかがでしょうか