From b49776010bd414e65b6c80e8a893c2caf1cfaa01 Mon Sep 17 00:00:00 2001 From: ahodgkinson Date: Mon, 12 Jun 2006 18:29:26 +0000 Subject: [PATCH] Solaris async I/O changes. git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@541 0109f412-320b-0410-ab79-c3e0c5ffbbe6 --- flaim/src/flbackup.cpp | 8 +++----- flaim/src/flcreate.cpp | 14 +++++--------- flaim/src/fldbglog.cpp | 2 +- flaim/src/fsuperfl.cpp | 4 ++-- flaim/src/fsuperfl.h | 1 - flaim/src/recover.cpp | 22 +++------------------- flaim/src/rfl.cpp | 22 ++++++++++------------ flaim/src/rfl.h | 2 +- flaim/src/scache.cpp | 3 +-- flaim/src/translog.cpp | 1 - 10 files changed, 26 insertions(+), 53 deletions(-) diff --git a/flaim/src/flbackup.cpp b/flaim/src/flbackup.cpp index 412fab5..036b62d 100644 --- a/flaim/src/flbackup.cpp +++ b/flaim/src/flbackup.cpp @@ -2079,15 +2079,14 @@ FSTATIC RCODE flmRestoreFile( // // Unix systems can have sector sizes that are larger than our // typical 4K database blocks. The Unix implementation of SectorWrite - // (called by WriteBlock) will write the passed-in block and clobber any + // (called by writeBlock) will write the passed-in block and clobber any // additional data beyond the end of the block to the end of the sector if // it has enough room in the block buffer to write a full sector. If the // block buffer is less than a full sector, the Unix SectorWrite will only // write out the amount requested, not a full sector. if( RC_BAD( rc = pSFile->writeBlock( uiBlkAddr, - uiBlockSize, pucBlkBuf, uiBlockSize, - NULL, &uiBytesWritten))) + uiBlockSize, pucBlkBuf, NULL, &uiBytesWritten))) { if( rc == FERR_IO_PATH_NOT_FOUND || rc == FERR_IO_INVALID_PATH) @@ -2107,8 +2106,7 @@ FSTATIC RCODE flmRestoreFile( } if( RC_BAD( rc = pSFile->writeBlock( uiBlkAddr, - uiBlockSize, pucBlkBuf, uiBlockSize, - NULL, &uiBytesWritten))) + uiBlockSize, pucBlkBuf, NULL, &uiBytesWritten))) { goto Exit; } diff --git a/flaim/src/flcreate.cpp b/flaim/src/flcreate.cpp index 8ef31f8..43cfaf6 100644 --- a/flaim/src/flcreate.cpp +++ b/flaim/src/flcreate.cpp @@ -37,8 +37,7 @@ FSTATIC RCODE flmInitFileHdrs( CREATE_OPTS * pCreateOpts, FLMUINT uiBlkSize, FLMUINT uiTransID, - FLMBYTE * pInitBuf, - FLMUINT uiBufSize); + FLMBYTE * pInitBuf); /**************************************************************************** Desc : Creates a new FLAIM database. @@ -383,7 +382,7 @@ FSTATIC RCODE flmInitNewFile( } if (RC_BAD( rc = flmInitFileHdrs( pDb, pCreateOpts, uiBlkSize, - uiTransID, pBuf, uiBufSize))) + uiTransID, pBuf))) { goto Exit; } @@ -457,8 +456,7 @@ FSTATIC RCODE flmInitFileHdrs( CREATE_OPTS * pCreateOpts, FLMUINT uiBlkSize, FLMUINT uiTransID, - FLMBYTE * pInitBuf, - FLMUINT uiBufSize) + FLMBYTE * pInitBuf) { RCODE rc = FERR_OK; FFILE * pFile = pDb->pFile; @@ -696,8 +694,7 @@ FSTATIC RCODE flmInitFileHdrs( pDb->pSFileHdl->setExtendSize( pFile->uiFileExtendSize); if (RC_BAD( rc = pDb->pSFileHdl->writeBlock( pFile->FileHdr.uiFirstLFHBlkAddr, - uiBlkSize, pInitBuf, uiBufSize, NULL, - &uiWriteBytes))) + uiBlkSize, pInitBuf, NULL, &uiWriteBytes))) { goto Exit; } @@ -721,8 +718,7 @@ FSTATIC RCODE flmInitFileHdrs( pDb->pSFileHdl->setMaxAutoExtendSize( pFile->uiMaxFileSize); pDb->pSFileHdl->setExtendSize( pFile->uiFileExtendSize); if (RC_BAD( rc = pDb->pSFileHdl->writeBlock( uiPcodeAddr, - uiBlkSize, pInitBuf, uiBufSize, NULL, - &uiWriteBytes))) + uiBlkSize, pInitBuf, NULL, &uiWriteBytes))) { goto Exit; } diff --git a/flaim/src/fldbglog.cpp b/flaim/src/fldbglog.cpp index 62c8556..9332fe2 100644 --- a/flaim/src/fldbglog.cpp +++ b/flaim/src/fldbglog.cpp @@ -289,7 +289,7 @@ FSTATIC void _flmDbgLogFlush( void) uiBytesToWrite = uiTotalToWrite; } - if( RC_BAD( rc = g_pLogFile->SectorWrite( + if( RC_BAD( rc = g_pLogFile->sectorWrite( g_uiLogFileOffset, uiBytesToWrite, pszBufPtr, uiBufferSize, NULL, &uiBytesWritten, FALSE))) { diff --git a/flaim/src/fsuperfl.cpp b/flaim/src/fsuperfl.cpp index e944d23..f036f74 100644 --- a/flaim/src/fsuperfl.cpp +++ b/flaim/src/fsuperfl.cpp @@ -228,7 +228,6 @@ RCODE F_SuperFileHdl::writeBlock( FLMUINT uiBlkAddress, FLMUINT uiBytesToWrite, const void * pvBuffer, - FLMUINT uiBufferSize, IF_IOBuffer * pIOBuffer, FLMUINT * puiBytesWritten) { @@ -257,9 +256,10 @@ Get_Handle: pFileHdl->setExtendSize( m_uiExtendSize); pFileHdl->setMaxAutoExtendSize( m_uiMaxAutoExtendSize); + if( RC_BAD( rc = pFileHdl->sectorWrite( FSGetFileOffset( uiBlkAddress), uiBytesToWrite, - pvBuffer, uiBufferSize, pIOBuffer, puiBytesWritten))) + pvBuffer, pIOBuffer, puiBytesWritten))) { if (rc != NE_FLM_IO_DISK_FULL && rc != NE_FLM_MEM) { diff --git a/flaim/src/fsuperfl.h b/flaim/src/fsuperfl.h index 972bd0c..3e4691c 100644 --- a/flaim/src/fsuperfl.h +++ b/flaim/src/fsuperfl.h @@ -70,7 +70,6 @@ public: FLMUINT uiBlkAddress, FLMUINT uiBytesToWrite, const void * pvBuffer, - FLMUINT uiBufferSize, IF_IOBuffer * pIOBuffer, FLMUINT * puiBytesWritten); diff --git a/flaim/src/recover.cpp b/flaim/src/recover.cpp index 456d7fe..046fda8 100644 --- a/flaim/src/recover.cpp +++ b/flaim/src/recover.cpp @@ -273,7 +273,7 @@ FSTATIC RCODE flmProcessBeforeImage( pDb->pSFileHdl->setMaxAutoExtendSize( pFile->uiMaxFileSize); pDb->pSFileHdl->setExtendSize( pFile->uiFileExtendSize); rc = pDb->pSFileHdl->writeBlock( uiBlkAddress, uiBlkLength, pBlk, - pFile->FileHdr.uiBlockSize, NULL, &uiBytesWritten); + NULL, &uiBytesWritten); #ifdef FLM_DBG_LOG flmDbgLogWrite( pFile->uiFFileId, uiBlkAddress, 0, @@ -431,24 +431,8 @@ RCODE flmWriteLogHdr( goto Exit; } - if( pCFileHdl->getSectorSize() > 512) - { - // We don't want to use the SectorWrite call when sector - // size is > 512 because it will overwrite the file - // header, which has not been set up in this buffer. - - rc = pCFileHdl->write( 0, uiBytesWritten, pFile->pucLogHdrWriteBuf, - &uiBytesWritten); - } - else - { - rc = pCFileHdl->sectorWrite( 0, - uiBytesWritten, pFile->pucLogHdrWriteBuf, - pCFileHdl->getSectorSize(), - NULL, &uiBytesWritten, FALSE); - } - - if (RC_BAD( rc)) + if( RC_BAD( rc = pCFileHdl->sectorWrite( 0, uiBytesWritten, + pFile->pucLogHdrWriteBuf, NULL, &uiBytesWritten))) { if (pDbStats) { diff --git a/flaim/src/rfl.cpp b/flaim/src/rfl.cpp index 1d6fd72..3352b9d 100644 --- a/flaim/src/rfl.cpp +++ b/flaim/src/rfl.cpp @@ -329,7 +329,7 @@ RCODE F_Rfl::positionTo( if (m_pCurrentBuf->uiRflBufBytes) { if (RC_BAD( rc = m_pFileHdl->sectorRead( - m_pCurrentBuf->uiRflFileOffset, m_pCurrentBuf->uiRflBufBytes, + m_pCurrentBuf->uiRflFileOffset, m_pCurrentBuf->uiRflBufBytes, m_pCurrentBuf->pIOBuffer->getBuffer(), &uiBytesRead))) { if (rc == FERR_IO_END_OF_FILE) @@ -850,7 +850,7 @@ RCODE F_Rfl::writeHeader( // Write out the header - if (RC_BAD( rc = m_pFileHdl->sectorWrite( 0L, 512, ucBuf, sizeof( ucBuf), + if (RC_BAD( rc = m_pFileHdl->sectorWrite( 0L, 512, ucBuf, NULL, &uiBytesWritten))) { @@ -1197,10 +1197,10 @@ Exit: } /******************************************************************** -Desc: Copy last partial sector of last buffer written (or to be +Desc: Copy last partial block of last buffer written (or to be written) into a new buffer. *********************************************************************/ -void F_Rfl::copyLastSector( +void F_Rfl::copyLastBlock( RFL_BUFFER * pBuffer, FLMBYTE * pucOldBuffer, FLMBYTE * pucNewBuffer, @@ -1333,15 +1333,13 @@ RCODE F_Rfl::flush( if (!bFinalWrite) { - copyLastSector( pBuffer, pucOldBuffer, pNewBuffer->getBuffer(), + copyLastBlock( pBuffer, pucOldBuffer, pNewBuffer->getBuffer(), uiCurrPacketLen, bStartingNewFile); } } if( RC_OK( rc = m_pFileHdl->sectorWrite( uiFileOffset, uiBufBytes, - pucOldBuffer, - m_uiBufferSize, pAsyncBuf, &uiBytesWritten, - FALSE))) + pucOldBuffer, pAsyncBuf, &uiBytesWritten))) { if( m_bKeepRflFiles) { @@ -1378,7 +1376,7 @@ RCODE F_Rfl::flush( flmAssert( !pAsyncBuf); if (RC_OK( rc) && !bFinalWrite) { - copyLastSector( pBuffer, pucOldBuffer, pucOldBuffer, + copyLastBlock( pBuffer, pucOldBuffer, pucOldBuffer, uiCurrPacketLen, bStartingNewFile); } @@ -1390,7 +1388,7 @@ RCODE F_Rfl::flush( else { - // No need to call copyLastSector, because it was called above + // No need to call copyLastBlock, because it was called above // before calling sectorWrite. The part of the old buffer that // needs to be transferred to the new buffer has already been // transferred. @@ -1446,7 +1444,7 @@ void F_Rfl::switchBuffers(void) m_pCurrentBuf->uiRflFileOffset = pOldBuffer->uiRflFileOffset; if (pOldBuffer->uiRflBufBytes) { - copyLastSector( m_pCurrentBuf, pOldBuffer->pIOBuffer->getBuffer(), + copyLastBlock( m_pCurrentBuf, pOldBuffer->pIOBuffer->getBuffer(), m_pCurrentBuf->pIOBuffer->getBuffer(), 0, FALSE); } } @@ -2657,7 +2655,7 @@ RCODE F_Rfl::setupTransaction(void) // end at an offset that is less than the maximum, but greater than // the nearest 512 byte boundary - technically within the // user-specified size limit. However, because we always write a - // full 512 bytes of data to fill out the last sector when we are in + // full 512 bytes of data to fill out the last block when we are in // direct IO mode, we would end up with a file that was slightly // larger than the user-specified limit. The EOF in the header of // the file would be below the limit, but the actual file size would diff --git a/flaim/src/rfl.h b/flaim/src/rfl.h index 685a9a1..5546036 100644 --- a/flaim/src/rfl.h +++ b/flaim/src/rfl.h @@ -606,7 +606,7 @@ private: FLMBYTE * pucNextSerialNum, FLMBOOL bKeepSignature); - void copyLastSector( + void copyLastBlock( RFL_BUFFER * pBuffer, FLMBYTE * pucOldBuffer, FLMBYTE * pucNewBuffer, diff --git a/flaim/src/scache.cpp b/flaim/src/scache.cpp index 611d95b..9b07f8e 100644 --- a/flaim/src/scache.cpp +++ b/flaim/src/scache.cpp @@ -5033,8 +5033,7 @@ FSTATIC RCODE ScaWriteContiguousBlocks( // non-asynchronous write. rc = pSFileHdl->writeBlock( uiBlkAddress, uiWriteLen, - pucWriteBuffer, pIOBuffer->getBufferSize(), - pAsyncBuffer, &uiBytesWritten); + pucWriteBuffer, pAsyncBuffer, &uiBytesWritten); if (!pAsyncBuffer) { pIOBuffer->notifyComplete( rc); diff --git a/flaim/src/translog.cpp b/flaim/src/translog.cpp index 0eba824..acc0cf9 100644 --- a/flaim/src/translog.cpp +++ b/flaim/src/translog.cpp @@ -138,7 +138,6 @@ RCODE lgFlushLogBuffer( rc = pSFileHdl->writeBlock( pFile->uiCurrLogBlkAddr, pFile->uiCurrLogWriteOffset, pFile->pCurrLogBuffer->getBuffer(), - pFile->pCurrLogBuffer->getBufferSize(), pAsyncBuffer, &uiBytesWritten); if (!pAsyncBuffer)