Unless you have Linux kernel 2.6.25 (or better) and glibc 2.4 (or better) posix_fallocate() will not make use of XFS' ability to preallocate space fast using unwritten extents. This library maps you posix_fallocate() to an apropriate replacement function that uses the xfsctl to allocate the space. All that needs to be done is to add your libposix_fallocate_xfs.so to LD_PRELOAD or adopt /etc/ld.so.preload.
Get the git stuff here: http://repo.or.cz/w/libposix_fallocate_xfs.git