On 29 September 2014 11:10, Igor Mammedov <imamm...@redhat.com> wrote:
> Build fails with:
>
> $ make
>   LINK  qemu-nbd
> Undefined symbols for architecture x86_64:
>   "_posix_fallocate", referenced from:
>       _raw_create in raw-posix.o
> ld: symbol(s) not found for architecture x86_64
>
> introduced by
> 06247428be raw-posix: Add falloc and full preallocation

I think the MacOSX interface to this involves
fcntl(F_PREALLOCATE). This is what Mozilla uses:

  fstore_t store = {F_ALLOCATECONTIG, F_PEOFPOSMODE, 0, aLength};
  // Try to get a continous chunk of disk space
  int ret = fcntl(fd, F_PREALLOCATE, &store);
    if(-1 == ret){
    // OK, perhaps we are too fragmented, allocate non-continuous
    store.fst_flags = F_ALLOCATEALL;
    ret = fcntl(fd, F_PREALLOCATE, &store);
    if (-1 == ret)
      return false;
  }
  return 0 == ftruncate(fd, aLength);

This has probably broken compilation on the BSDs
as well, since I don't suppose they all have
posix_fallocate(). In extremis we can implement
it with truncate-and-write, cf:
http://stackoverflow.com/questions/11497567/fallocate-command-equivalent-in-os-x

We probably need a util/qemu-fallocate.c...

In the meantime, maybe we should revert commits
06247428b and 0e4271b711a8 ?

thanks
-- PMM

Reply via email to