From de2d0154e77050f07ce5307712749837d8221825 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 2 Feb 2010 03:01:25 +0000 Subject: [PATCH] (trunk libT) #2849 "When possible, use fallocate64() for file preallocation" -- implemented for 1.90 --- configure.ac | 2 +- libtransmission/fdlimit.c | 11 +++++++++++ libtransmission/session.c | 4 ++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 4a46f3be8..d48ac578f 100644 --- a/configure.ac +++ b/configure.ac @@ -93,7 +93,7 @@ fi AC_HEADER_STDC AC_HEADER_TIME -AC_CHECK_FUNCS([pread pwrite lrintf strlcpy daemon dirname basename strcasecmp localtime_r posix_fallocate memmem strtold syslog]) +AC_CHECK_FUNCS([pread pwrite lrintf strlcpy daemon dirname basename strcasecmp localtime_r fallocate64 posix_fallocate memmem strtold syslog]) AC_PROG_INSTALL AC_PROG_MAKE_SET ACX_PTHREAD diff --git a/libtransmission/fdlimit.c b/libtransmission/fdlimit.c index 05f2fcc42..85ec725dc 100644 --- a/libtransmission/fdlimit.c +++ b/libtransmission/fdlimit.c @@ -43,6 +43,11 @@ #include #endif +#ifdef HAVE_FALLOCATE64 + /* FIXME can't find the right #include voodoo to pick up the declaration.. */ + extern int fallocate64( int fd, int mode, uint64_t offset, uint64_t len ); +#endif + #ifdef HAVE_XFS_XFS_H #include #endif @@ -146,6 +151,12 @@ preallocateFileFull( const char * filename, uint64_t length ) int fd = open( filename, flags, 0666 ); if( fd >= 0 ) { +# ifdef HAVE_FALLOCATE64 + if( !success ) + { + success = !fallocate64( fd, 0, 0, length ); + } +# endif # ifdef HAVE_XFS_XFS_H if( !success && platform_test_xfs_fd( fd ) ) { diff --git a/libtransmission/session.c b/libtransmission/session.c index 4ec3859d3..95aada4b8 100644 --- a/libtransmission/session.c +++ b/libtransmission/session.c @@ -296,7 +296,11 @@ tr_sessionGetDefaultSettings( const char * configDir, tr_benc * d ) tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_SOCKET_TOS, atoi( TR_DEFAULT_PEER_SOCKET_TOS_STR ) ); tr_bencDictAddBool( d, TR_PREFS_KEY_PEX_ENABLED, TRUE ); tr_bencDictAddBool( d, TR_PREFS_KEY_PORT_FORWARDING, TRUE ); +#ifdef HAVE_FALLOCATE64 + tr_bencDictAddInt ( d, TR_PREFS_KEY_PREALLOCATION, TR_PREALLOCATE_FULL ); +#else tr_bencDictAddInt ( d, TR_PREFS_KEY_PREALLOCATION, TR_PREALLOCATE_SPARSE ); +#endif tr_bencDictAddStr ( d, TR_PREFS_KEY_PROXY, "" ); tr_bencDictAddBool( d, TR_PREFS_KEY_PROXY_AUTH_ENABLED, FALSE ); tr_bencDictAddBool( d, TR_PREFS_KEY_PROXY_ENABLED, FALSE ); -- 2.40.0