2007-12-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

Changed Direct/IO enable/disable procesure in file allocation routine.
	* src/SingleFileAllocationIterator.cc
	(SingleFileAllocationIterator):
	Disable directIO if offset is not multiple of 512.
	(~SingleFileAllocationIterator): Removed a call to disableDirectIO.
	* src/MultiFileAllocationIterator.cc (allocateChunk):
	Enable created SingleFileAllocationIterator's directIO.
	* src/FileAllocationEntry.cc
	(FileAllocationEntry): Enable directIO here.
	(~FileAllocationEntry): Disable directIO here.
pull/1/head
Tatsuhiro Tsujikawa 2007-12-06 12:32:27 +00:00
parent 30739b0763
commit 68579bd2f4
4 changed files with 24 additions and 6 deletions

View File

@ -1,3 +1,16 @@
2007-12-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Changed Direct/IO enable/disable procesure in file allocation routine.
* src/SingleFileAllocationIterator.cc
(SingleFileAllocationIterator):
Disable directIO if offset is not multiple of 512.
(~SingleFileAllocationIterator): Removed a call to disableDirectIO.
* src/MultiFileAllocationIterator.cc (allocateChunk):
Enable created SingleFileAllocationIterator's directIO.
* src/FileAllocationEntry.cc
(FileAllocationEntry): Enable directIO here.
(~FileAllocationEntry): Disable directIO here.
2007-12-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed the bug: aria2 doesn't utilize fast set index offered by peer.

View File

@ -42,10 +42,14 @@
FileAllocationEntry::FileAllocationEntry(RequestGroup* requestGroup, Command* nextCommand):
RequestGroupEntry(requestGroup, nextCommand),
_fileAllocationIterator(requestGroup->getPieceStorage()->getDiskAdaptor()->fileAllocationIterator())
{}
{
_requestGroup->getPieceStorage()->getDiskAdaptor()->enableDirectIO();
}
FileAllocationEntry:: ~FileAllocationEntry()
{}
{
_requestGroup->getPieceStorage()->getDiskAdaptor()->disableDirectIO();
}
int64_t FileAllocationEntry::getCurrentLength()
{

View File

@ -57,6 +57,7 @@ void MultiFileAllocationIterator::allocateChunk()
_entries.pop_front();
FileEntryHandle fileEntry = entry->getFileEntry();
if(entry->size() < fileEntry->getLength()) {
entry->getDiskWriter()->enableDirectIO();
_fileAllocationIterator =
new SingleFileAllocationIterator(entry->getDiskWriter().get(),
entry->size(),

View File

@ -38,24 +38,24 @@
#include "a2io.h"
#define BUFSIZE (256*1024)
#define ALIGNMENT 512
SingleFileAllocationIterator::SingleFileAllocationIterator(BinaryStream* stream, int64_t offset, int64_t totalLength):_stream(stream), _offset(offset), _totalLength(totalLength), _buffer(0)
{
if(_offset%512 == 0) {
_stream->enableDirectIO();
if(_offset%ALIGNMENT != 0) {
_stream->disableDirectIO();
}
}
SingleFileAllocationIterator::~SingleFileAllocationIterator()
{
delete [] _buffer;
_stream->disableDirectIO();
}
void SingleFileAllocationIterator::init()
{
#ifdef HAVE_POSIX_MEMALIGN
_buffer = (unsigned char*)Util::allocateAlignedMemory(512, BUFSIZE);
_buffer = (unsigned char*)Util::allocateAlignedMemory(ALIGNMENT, BUFSIZE);
#else
_buffer = new unsigned char[BUFSIZE];
#endif // HAVE_POSIX_MEMALIGN