diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-03-25 05:43:07 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-03-25 05:43:07 +0000 |
| commit | 29c5ef9215be004b31cd53ef8841680c3f015d57 (patch) | |
| tree | acae3135c9240d627b30629c5a7594951a4cb688 /src/MultiFileAllocationIterator.cc | |
| parent | fe614395d60da75836dbfb3f0a593d91b4024a89 (diff) | |
2009-03-25 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added 'falloc' parameter for --file-allocation option. 'falloc'
allocation mode uses posix_fallocate() system call to allocate
file on disk. If you are using newer file systems such as ext4
(with extents support), btrfs or xfs, 'falloc' is your best
choice. It allocates large(few GiB) files almost instantly.
Don't use 'falloc' with legacy file systems such as ext3 because
it takes almost same time as 'prealloc' and it blocks aria2
entirely until allocation finishes. 'falloc' may not be
available if your system doesn't have posix_fallocate() system
call.
* configure.ac
* src/AbstractDiskWriter.cc
* src/AbstractDiskWriter.h
* src/AbstractSingleDiskAdaptor.cc
* src/BinaryStream.h
* src/BtCheckIntegrityEntry.cc
* src/ByteArrayDiskWriter.h
* src/CheckIntegrityEntry.cc
* src/CheckIntegrityEntry.h
* src/DefaultPieceStorage.cc
* src/DiskAdaptor.cc
* src/DiskAdaptor.h
* src/DiskWriter.h
* src/FallocFileAllocationIterator.cc
* src/FallocFileAllocationIterator.h
* src/FileAllocationEntry.cc
* src/FileAllocationEntry.h
* src/Makefile.am
* src/MultiFileAllocationIterator.cc
* src/MultiFileAllocationIterator.h
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/StreamCheckIntegrityEntry.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/FallocFileAllocationIteratorTest.cc
* test/Makefile.am
Diffstat (limited to 'src/MultiFileAllocationIterator.cc')
| -rw-r--r-- | src/MultiFileAllocationIterator.cc | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/MultiFileAllocationIterator.cc b/src/MultiFileAllocationIterator.cc index 63654a0e..647d4ebf 100644 --- a/src/MultiFileAllocationIterator.cc +++ b/src/MultiFileAllocationIterator.cc @@ -36,6 +36,7 @@ #include "MultiDiskAdaptor.h" #include "FileEntry.h" #include "SingleFileAllocationIterator.h" +#include "FallocFileAllocationIterator.h" #include "DiskWriter.h" namespace aria2 { @@ -61,11 +62,19 @@ void MultiFileAllocationIterator::allocateChunk() _diskAdaptor->openIfNot(entry, &DiskWriterEntry::openFile); if(entry->needsFileAllocation() && entry->size() < fileEntry->getLength()) { // Calling private function of MultiDiskAdaptor. - _fileAllocationIterator.reset - (new SingleFileAllocationIterator(entry->getDiskWriter().get(), - entry->size(), - fileEntry->getLength())); - _fileAllocationIterator->init(); + if(_diskAdaptor->doesFallocate()) { + _fileAllocationIterator.reset + (new FallocFileAllocationIterator(entry->getDiskWriter().get(), + entry->size(), + fileEntry->getLength())); + } else { + SharedHandle<SingleFileAllocationIterator> fa + (new SingleFileAllocationIterator(entry->getDiskWriter().get(), + entry->size(), + fileEntry->getLength())); + fa->init(); + _fileAllocationIterator = fa; + } } } if(finished()) { |
