Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 05 Nov 2008 11:08:11 -0600
From:      "Jeremy Messenger" <mezz7@cox.net>
To:        freebsd-hackers@freebsd.org
Subject:   preallocate files without (posix_)fallocate or fcntl's F_PREALLOCATE?
Message-ID:  <op.uj5okktj9aq2h7@localhost>

next in thread | raw e-mail | index | archive | help
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@cox.net  -  mezz@FreeBSD.org
FreeBSD GNOME Team
http://www.FreeBSD.org/gnome/  -  gnome@FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?op.uj5okktj9aq2h7>