GETBLKSIZE64
GETBLKSIZE64とNBDの組み合せではまる。
uint64_t size; fd = ::open(getNodePath().c_str(), &size); ioctl(fd, GETBLKSIZE64, &size);
エラー処理は省略。
NBDは、接続が完了前にioctlをやると失敗する。
失敗するのは良いのだけど、エラーを返さないで、ヘンな値を返してくる。なんてこった。
タチの悪いことにサーバーの応答が速かったときは成功するので、再現するときとしないときがある。
気づくまでに時間がかかってしまった。
で、気づいたのは良いけど、どうやって対処すれば…
とりあえずsleep(3);を入れてみたけど、場合により失敗する。