diff options
Diffstat (limited to 'fastos')
-rw-r--r-- | fastos/src/vespa/fastos/file.cpp | 11 | ||||
-rw-r--r-- | fastos/src/vespa/fastos/file.h | 6 | ||||
-rw-r--r-- | fastos/src/vespa/fastos/linux_file.cpp | 15 |
3 files changed, 18 insertions, 14 deletions
diff --git a/fastos/src/vespa/fastos/file.cpp b/fastos/src/vespa/fastos/file.cpp index 1382aef7386..15a817c0bff 100644 --- a/fastos/src/vespa/fastos/file.cpp +++ b/fastos/src/vespa/fastos/file.cpp @@ -34,11 +34,11 @@ int FastOS_FileInterface::_defaultFAdviseOptions = POSIX_FADV_NORMAL; int FastOS_FileInterface::_defaultFAdviseOptions = 0; #endif -static const size_t MAX_WRITE_CHUNK_SIZE = 0x4000000; // 64 MB +static const size_t MAX_CHUNK_SIZE = 0x4000000; // 64 MB FastOS_FileInterface::FastOS_FileInterface(const char *filename) : _fAdviseOptions(_defaultFAdviseOptions), - _writeChunkSize(MAX_WRITE_CHUNK_SIZE), + _chunkSize(MAX_CHUNK_SIZE), _filename(), _openFlags(0), _directIOEnabled(false), @@ -140,13 +140,6 @@ FastOS_FileInterface::EnableDirectIO() void -FastOS_FileInterface::SetWriteChunkSize(size_t writeChunkSize) -{ - _writeChunkSize = writeChunkSize; -} - - -void FastOS_FileInterface::EnableSyncWrites() { if (!IsOpened()) diff --git a/fastos/src/vespa/fastos/file.h b/fastos/src/vespa/fastos/file.h index 2d83a1766f0..a352c6281a3 100644 --- a/fastos/src/vespa/fastos/file.h +++ b/fastos/src/vespa/fastos/file.h @@ -84,7 +84,7 @@ private: // And setFAdviseOptions() per file. static int _defaultFAdviseOptions; int _fAdviseOptions; - size_t _writeChunkSize; + size_t _chunkSize; void WriteBufInternal(const void *buffer, size_t length); protected: @@ -485,8 +485,8 @@ public: /** * Set the write chunk size used in WriteBuf. */ - void SetWriteChunkSize(size_t writeChunkSize); - size_t getWriteChunkSize() const { return _writeChunkSize; } + void setChunkSize(size_t chunkSize) { _chunkSize = chunkSize; } + size_t getChunkSize() const { return _chunkSize; } /** * Get restrictions for direct disk I/O. The file should be opened diff --git a/fastos/src/vespa/fastos/linux_file.cpp b/fastos/src/vespa/fastos/linux_file.cpp index 3a59b862a52..27beb1242d1 100644 --- a/fastos/src/vespa/fastos/linux_file.cpp +++ b/fastos/src/vespa/fastos/linux_file.cpp @@ -44,7 +44,18 @@ FastOS_Linux_File::readInternal(int fh, void *buffer, size_t length, int64_t rea ssize_t FastOS_Linux_File::readInternal(int fh, void *buffer, size_t length) { - return File_RW_Ops::read(fh, buffer, length); + char * data = static_cast<char *>(buffer); + ssize_t read(0); + while (read < ssize_t(length)) { + size_t lenNow = std::min(getChunkSize(), length - read); + ssize_t readNow = File_RW_Ops::read(fh, data + read, lenNow); + if (readNow > 0) { + read += readNow; + } else { + return (read > 0) ? read : readNow; + } + } + return read; } @@ -169,7 +180,7 @@ FastOS_Linux_File::Write2(const void *buffer, size_t length) const char * data = static_cast<const char *>(buffer); ssize_t written(0); while (written < ssize_t(length)) { - size_t lenNow = std::min(getWriteChunkSize(), length - written); + size_t lenNow = std::min(getChunkSize(), length - written); ssize_t writtenNow = internalWrite2(data + written, lenNow); if (writtenNow > 0) { written += writtenNow; |