diff -ur mldonkey-3.0.1/config/configure.in mldonkey-3.0.1-bj/config/configure.in
--- mldonkey-3.0.1/config/configure.in	2009-10-23 07:54:35.000000000 +0200
+++ mldonkey-3.0.1-bj/config/configure.in	2010-01-29 21:26:22.160021299 +0100
@@ -704,7 +704,7 @@
 ])
 
 # various header files
-AC_CHECK_FUNCS(setrlimit getrlimit strerror_r strerror)
+AC_CHECK_FUNCS(setrlimit getrlimit strerror_r strerror posix_fallocate)
 AC_CHECK_HEADERS(byteswap.h,,)
 AC_CHECK_HEADERS([sys/utsname.h])
 AC_CHECK_HEADERS(arpa/inet.h,,)
Nur in mldonkey-3.0.1/patches: ocaml-3.11.1.tar.gz.
diff -ur mldonkey-3.0.1/src/config/unix/os_stubs_c.c mldonkey-3.0.1-bj/src/config/unix/os_stubs_c.c
--- mldonkey-3.0.1/src/config/unix/os_stubs_c.c	2009-02-24 19:53:57.000000000 +0100
+++ mldonkey-3.0.1-bj/src/config/unix/os_stubs_c.c	2010-01-30 00:43:26.988005117 +0100
@@ -64,13 +64,17 @@
 
 *******************************************************************/
 
-/* TODO: write whole file if sparse disabled */
 void os_ftruncate(OS_FD fd, OFF_T len, /* bool */ int sparse)
 {
   int64 cursize;
   if(!fd) failwith("ftruncate32: file is closed");
   
   cursize = os_getfdsize(fd);
+#ifdef HAVE_POSIX_FALLOCATE 
+  if (!sparse)
+    if (posix_fallocate(fd,cursize,len-cursize) == 0)
+      return;
+#endif
   if(cursize < len){
     int zero = 0;
     OFF_T result = lseek(fd, len-1, SEEK_SET);
