From 5a2f398eca68b2b0330ddcec2b222bf76875f82f Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 28 Nov 2007 14:22:28 +0000 Subject: 2007-11-28 Tatsuhiro Tsujikawa Added direct I/O support. The current implementation uses O_DIRECT, which is not posix standard and is tested on linux 2.6.21. Currently only file allocation uses direct I/O. * src/SingleFileAllocationIterator.{h, cc} * test/SingleFileAllocationIteratorTest.cc * src/MultiFileAllocationIterator.{h, cc} * test/MultiFileAllocationIteratorTest.cc * src/BinaryStream.h * src/DiskWriter.h * src/AbstractDiskWriter.{h, cc} * src/ByteArrayDiskWriter.h * src/DiskAdaptor.h * src/AbstractSingleDiskAdaptor.{h, cc} * src/MultiDiskAdaptor.{h, cc} * src/FileAllocationEntry.cc * src/Util.{h, cc} * src/OptionHandlerFactory.cc * src/prefs.h * src/version_usage.cc * src/option_processing.cc Moved FileAllocationMan::markCurrentFileAllocationEntryDone() to handleException. * src/MultiFileAllocationIterator.cc Added EINTR handling * src/SocketCore.cc --- src/FileAllocationEntry.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/FileAllocationEntry.cc') diff --git a/src/FileAllocationEntry.cc b/src/FileAllocationEntry.cc index af9c67c1..5bc39ee9 100644 --- a/src/FileAllocationEntry.cc +++ b/src/FileAllocationEntry.cc @@ -38,13 +38,24 @@ #include "RequestGroup.h" #include "PieceStorage.h" #include "DiskAdaptor.h" +#include "prefs.h" +#include "Option.h" FileAllocationEntry::FileAllocationEntry(RequestGroup* requestGroup, Command* nextCommand): RequestGroupEntry(requestGroup, nextCommand), _fileAllocationIterator(requestGroup->getPieceStorage()->getDiskAdaptor()->fileAllocationIterator()) -{} +{ + if(_requestGroup->getOption()->getAsBool(PREF_ENABLE_DIRECT_IO)) { + _requestGroup->getPieceStorage()->getDiskAdaptor()->enableDirectIO(); + } +} -FileAllocationEntry:: ~FileAllocationEntry() {} +FileAllocationEntry:: ~FileAllocationEntry() +{ + if(_requestGroup->getOption()->getAsBool(PREF_ENABLE_DIRECT_IO)) { + _requestGroup->getPieceStorage()->getDiskAdaptor()->disableDirectIO(); + } +} int64_t FileAllocationEntry::getCurrentLength() { -- cgit