sync_file_range用の領域を確保する。

確認にはColin King氏のfiemap.cを使わせてもらった。

1. ftruncate(fd, size)

sparseファイルができるだけ。データブロックの確保はされず

2. pwrite(fd, "", 1, size-1);

samba hack! sambaがファイルを書き込む際、領域予約するのにつかってる?でもNFSしか効果ないぽい?

ext2ではsparseファイルで最後のブロックが確保されるだけ。

3. b = malloc(size); pwrite(fd, b, size, 0);

データブロック確保されてる!でもなんかmallocが邪魔。

4. fallocate(fd, 0, 0, size);

データブロック確保されてるしmalloc排除できた...! でもext4じゃないと動かない

5. posix_fallocate(fd, 0, size);

せいかい。なければ3にfallbackする方針で。
追記:straceみてる限りファイルシステムのサポートがない場合は2にfallbackしてるみたい?