preallocate files without (posix_)fallocate or fcntl's
F_PREALLOCATE?
Jeremy Messenger
mezz7 at cox.net
Wed Nov 5 09:08:04 PST 2008
Hello folks,
At first, I don't really know C that well so... It's more of request or
suggest if anyone is bored or interest to port on FreeBSD. :-)
Recently, Transmission has added preallocate files to prevent disk
fragmentation but FreeBSD does not has any of (posix_)fallocate or fcntl's
F_PREALLOCATE (checked in RELENG_7's src/* and manpages). Here's what it
looks like:
----------------------------------------
static int
preallocateFile( int fd UNUSED, uint64_t length UNUSED )
{
#ifdef HAVE_FALLOCATE
return fallocate( fd, 0, offset, length );
#elif defined(HAVE_POSIX_FALLOCATE)
return posix_fallocate( fd, 0, length );
#elif defined(SYS_DARWIN)
fstore_t fst;
fst.fst_flags = F_ALLOCATECONTIG;
fst.fst_posmode = F_PEOFPOSMODE;
fst.fst_offset = 0;
fst.fst_length = length;
fst.fst_bytesalloc = 0;
return fcntl( fd, F_PREALLOCATE, &fst );
#else
#warning no known method to preallocate files on this platform
return -1;
#endif
}
----------------------------------------
You can see a bit more over at
http://trac.transmissionbt.com/changeset/7051 .. You can also point me to
some sources if it exists for I can try do it by myself, but with lacking
C knowledge is a bit hard for me at the most of time. I don't know if UFS
does not need or does need it. If anyone is interesting to write simple
one for FreeBSD will be cool. Thanks!
Cheers,
Mezz
--
mezz7 at cox.net - mezz at FreeBSD.org
FreeBSD GNOME Team
http://www.FreeBSD.org/gnome/ - gnome at FreeBSD.org
More information about the freebsd-hackers
mailing list