Changeset 8142


Ignore:
Timestamp:
Apr 5, 2009, 2:04:07 PM (13 years ago)
Author:
charles
Message:

(trunk libT) #1966: add explicit support for preallocating files on XFS filesystems

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/configure.ac

    r8042 r8142  
    147147fi
    148148
     149AC_CHECK_HEADERS([xfs/xfs.h])
     150
    149151
    150152dnl ----------------------------------------------------------------------------
  • trunk/libtransmission/fdlimit.c

    r8122 r8142  
    4848#endif
    4949
     50#ifdef HAVE_XFS_XFS_H
     51 #include <xfs/xfs.h>
     52#endif
     53
    5054#include <sys/types.h>
    5155#include <sys/stat.h>
     
    159163    if( fd >= 0 )
    160164    {
    161        
     165# ifdef HAVE_XFS_XFS_H
     166        if( !success && platform_test_xfs_fd( fd ) )
     167        {
     168            xfs_flock64_t fl;
     169            fl.l_whence = 0;
     170            fl.l_start = 0;
     171            fl.l_len = length;
     172            success = !xfsctl( NULL, fd, XFS_IOC_RESVSP64, &fl );
     173        }
     174# endif
     175# ifdef SYS_DARWIN
     176        if( !success )
     177        {
     178            fstore_t fst;
     179            fst.fst_flags = F_ALLOCATECONTIG;
     180            fst.fst_posmode = F_PEOFPOSMODE;
     181            fst.fst_offset = 0;
     182            fst.fst_length = length;
     183            fst.fst_bytesalloc = 0;
     184            success = !fcntl( fd, F_PREALLOCATE, &fst );
     185        }
     186# endif
    162187# ifdef HAVE_FALLOCATE
    163 
    164         success = !fallocate( fd, FALLOC_FL_KEEP_SIZE, 0, length );
    165 
    166 # elif defined(HAVE_POSIX_FALLOCATE)
    167 
    168         success = !posix_fallocate( fd, 0, length );
    169 
    170 # elif defined(SYS_DARWIN)
    171 
    172         fstore_t fst;
    173         fst.fst_flags = F_ALLOCATECONTIG;
    174         fst.fst_posmode = F_PEOFPOSMODE;
    175         fst.fst_offset = 0;
    176         fst.fst_length = length;
    177         fst.fst_bytesalloc = 0;
    178         success = !fcntl( fd, F_PREALLOCATE, &fst );
    179 
    180 # else
    181 
    182         #warning no known method to preallocate files on this platform
    183         success = 0;
    184 
     188        if( !success )
     189        {
     190            success = !fallocate( fd, FALLOC_FL_KEEP_SIZE, 0, length );
     191        }
     192# endif
     193# ifdef HAVE_POSIX_FALLOCATE
     194        if( !success )
     195        {
     196            success = !posix_fallocate( fd, 0, length );
     197        }
    185198# endif
    186199
Note: See TracChangeset for help on using the changeset viewer.