Lines Matching refs:pInode

60         static REDSTATUS Shrink( CINODE * pInode,
63 static REDSTATUS TruncDindir( CINODE * pInode,
67 static REDSTATUS TruncIndir( CINODE * pInode,
70 static REDSTATUS TruncDataBlock( const CINODE * pInode,
74 static REDSTATUS ExpandPrepare( CINODE * pInode );
76 static void SeekCoord( CINODE * pInode,
78 static REDSTATUS ReadUnaligned( CINODE * pInode,
82 static REDSTATUS ReadAligned( CINODE * pInode,
87 static REDSTATUS WriteUnaligned( CINODE * pInode,
91 static REDSTATUS WriteAligned( CINODE * pInode,
96 static REDSTATUS GetExtent( CINODE * pInode,
101 static REDSTATUS BranchBlock( CINODE * pInode,
107 static REDSTATUS BranchBlockCost( const CINODE * pInode,
131 REDSTATUS RedInodeDataRead( CINODE * pInode, in RedInodeDataRead() argument
138 if( !CINODE_IS_MOUNTED( pInode ) || ( pulLen == NULL ) || ( pBuffer == NULL ) ) in RedInodeDataRead()
142 else if( ullStart >= pInode->pInodeBuf->ullSize ) in RedInodeDataRead()
162 if( ( pInode->pInodeBuf->ullSize - ullStart ) < ulLen ) in RedInodeDataRead()
164 ulLen = ( uint32_t ) ( pInode->pInodeBuf->ullSize - ullStart ); in RedInodeDataRead()
176 ret = ReadUnaligned( pInode, ullStart, ulThisRead, pbBuffer ); in RedInodeDataRead()
194 ret = ReadAligned( pInode, ulBlockOffset, ulBlockCount, &pbBuffer[ ulReadIndex ] ); in RedInodeDataRead()
210 … ret = ReadUnaligned( pInode, ullStart + ulReadIndex, ulRemaining, &pbBuffer[ ulReadIndex ] ); in RedInodeDataRead()
247 REDSTATUS RedInodeDataWrite( CINODE * pInode, in RedInodeDataWrite() argument
254 if( !CINODE_IS_DIRTY( pInode ) || ( pulLen == NULL ) || ( pBuffer == NULL ) ) in RedInodeDataWrite()
285 if( ullStart > pInode->pInodeBuf->ullSize ) in RedInodeDataWrite()
287 ret = ExpandPrepare( pInode ); in RedInodeDataWrite()
297 ret = WriteUnaligned( pInode, ullStart, ulThisWrite, pbBuffer ); in RedInodeDataWrite()
316 … ret = WriteAligned( pInode, ulBlockOffset, &ulBlocksWritten, &pbBuffer[ ulWriteIndex ] ); in RedInodeDataWrite()
344 … ret = WriteUnaligned( pInode, ullStart + ulWriteIndex, ulRemaining, &pbBuffer[ ulWriteIndex ] ); in RedInodeDataWrite()
367 if( ( ullStart + ulWriteIndex ) > pInode->pInodeBuf->ullSize ) in RedInodeDataWrite()
369 pInode->pInodeBuf->ullSize = ullStart + ulWriteIndex; in RedInodeDataWrite()
393 REDSTATUS RedInodeDataTruncate( CINODE * pInode, in RedInodeDataTruncate() argument
402 if( !CINODE_IS_MOUNTED( pInode ) ) in RedInodeDataTruncate()
412 if( ullSize > pInode->pInodeBuf->ullSize ) in RedInodeDataTruncate()
414 ret = ExpandPrepare( pInode ); in RedInodeDataTruncate()
416 else if( ullSize < pInode->pInodeBuf->ullSize ) in RedInodeDataTruncate()
418 ret = Shrink( pInode, ullSize ); in RedInodeDataTruncate()
428 pInode->pInodeBuf->ullSize = ullSize; in RedInodeDataTruncate()
448 static REDSTATUS Shrink( CINODE * pInode, in Shrink() argument
456 if( !CINODE_IS_MOUNTED( pInode ) || ( ( ullSize > 0U ) && !pInode->fDirty ) ) in Shrink()
465 RedInodePutData( pInode ); in Shrink()
470 … ret = TruncDataBlock( pInode, &pInode->pInodeBuf->aulEntries[ ulTruncBlock ], true ); in Shrink()
484 ret = RedInodeDataSeek( pInode, ulTruncBlock ); in Shrink()
490 ret = TruncIndir( pInode, &fFreed ); in Shrink()
496pInode->pInodeBuf->aulEntries[ pInode->uInodeEntry ] = BLOCK_SPARSE; in Shrink()
502 ulTruncBlock += ( INDIR_ENTRIES - pInode->uIndirEntry ); in Shrink()
511 ret = RedInodeDataSeek( pInode, ulTruncBlock ); in Shrink()
521 uint16_t uOrigInodeEntry = pInode->uInodeEntry; in Shrink()
522 uint16_t uOrigDindirEntry = pInode->uDindirEntry; in Shrink()
523 uint16_t uOrigIndirEntry = pInode->uIndirEntry; in Shrink()
525 ret = TruncDindir( pInode, &fFreed ); in Shrink()
531 pInode->pInodeBuf->aulEntries[ uOrigInodeEntry ] = BLOCK_SPARSE; in Shrink()
564 static REDSTATUS TruncDindir( CINODE * pInode, in TruncDindir() argument
569 if( !CINODE_IS_MOUNTED( pInode ) || ( pfFreed == NULL ) ) in TruncDindir()
574 else if( pInode->pDindir == NULL ) in TruncDindir()
587 for( uEntry = 0U; !fBranch && ( uEntry < pInode->uDindirEntry ); uEntry++ ) in TruncDindir()
589 fBranch = pInode->pDindir->aulEntries[ uEntry ] != BLOCK_SPARSE; in TruncDindir()
598 … if( !fBranch && ( pInode->pDindir->aulEntries[ pInode->uDindirEntry ] != BLOCK_SPARSE ) ) in TruncDindir()
600 for( uEntry = 0U; !fBranch && ( uEntry < pInode->uIndirEntry ); uEntry++ ) in TruncDindir()
602 fBranch = pInode->pIndir->aulEntries[ uEntry ] != BLOCK_SPARSE; in TruncDindir()
608 ret = BranchBlock( pInode, BRANCHDEPTH_DINDIR, false ); in TruncDindir()
613 uint32_t ulBlock = pInode->ulLogicalBlock; in TruncDindir()
614 … uint16_t uStart = pInode->uDindirEntry; /* pInode->uDindirEntry will change. */ in TruncDindir()
621 ret = RedInodeDataSeek( pInode, ulBlock ); in TruncDindir()
628 if( ( ret == 0 ) && ( pInode->ulIndirBlock != BLOCK_SPARSE ) ) in TruncDindir()
632 ret = TruncIndir( pInode, &fIndirFreed ); in TruncDindir()
649 pInode->pDindir->aulEntries[ uEntry ] = BLOCK_SPARSE; in TruncDindir()
659 ulBlock += ( INDIR_ENTRIES - pInode->uIndirEntry ); in TruncDindir()
668 RedInodePutDindir( pInode ); in TruncDindir()
670 ret = RedImapBlockSet( pInode->ulDindirBlock, false ); in TruncDindir()
697 static REDSTATUS TruncIndir( CINODE * pInode, in TruncIndir() argument
702 if( !CINODE_IS_MOUNTED( pInode ) || ( pfFreed == NULL ) ) in TruncIndir()
707 else if( pInode->pIndir == NULL ) in TruncIndir()
720 for( uEntry = 0U; !fBranch && ( uEntry < pInode->uIndirEntry ); uEntry++ ) in TruncIndir()
722 fBranch = pInode->pIndir->aulEntries[ uEntry ] != BLOCK_SPARSE; in TruncIndir()
727 ret = BranchBlock( pInode, BRANCHDEPTH_INDIR, false ); in TruncIndir()
732 for( uEntry = pInode->uIndirEntry; uEntry < INDIR_ENTRIES; uEntry++ ) in TruncIndir()
734 … ret = TruncDataBlock( pInode, &pInode->pIndir->aulEntries[ uEntry ], fBranch ); in TruncIndir()
748 RedInodePutIndir( pInode ); in TruncIndir()
750 ret = RedImapBlockSet( pInode->ulIndirBlock, false ); in TruncIndir()
775 static REDSTATUS TruncDataBlock( const CINODE * pInode, in TruncDataBlock() argument
781 if( !CINODE_IS_MOUNTED( pInode ) || ( pulBlock == NULL ) ) in TruncDataBlock()
793 if( pInode->pInodeBuf->ulBlocks == 0U ) in TruncDataBlock()
800 pInode->pInodeBuf->ulBlocks--; in TruncDataBlock()
838 static REDSTATUS ExpandPrepare( CINODE * pInode ) in ExpandPrepare() argument
842 if( !CINODE_IS_DIRTY( pInode ) ) in ExpandPrepare()
849 …uint32_t ulOldSizeByteInBlock = ( uint32_t ) ( pInode->pInodeBuf->ullSize & ( REDCONF_BLOCK_SIZE -… in ExpandPrepare()
853 … ret = RedInodeDataSeek( pInode, ( uint32_t ) ( pInode->pInodeBuf->ullSize >> BLOCK_SIZE_P2 ) ); in ExpandPrepare()
861 ret = BranchBlock( pInode, BRANCHDEPTH_FILE_DATA, true ); in ExpandPrepare()
865 …RedMemSet( &pInode->pbData[ ulOldSizeByteInBlock ], 0U, REDCONF_BLOCK_SIZE - ulOldSizeByteInBlock … in ExpandPrepare()
895 REDSTATUS RedInodeDataSeekAndRead( CINODE * pInode, in RedInodeDataSeekAndRead() argument
900 ret = RedInodeDataSeek( pInode, ulBlock ); in RedInodeDataSeekAndRead()
902 if( ( ret == 0 ) && ( pInode->pbData == NULL ) ) in RedInodeDataSeekAndRead()
904 REDASSERT( pInode->ulDataBlock != BLOCK_SPARSE ); in RedInodeDataSeekAndRead()
906 ret = RedBufferGet( pInode->ulDataBlock, 0U, CAST_VOID_PTR_PTR( &pInode->pbData ) ); in RedInodeDataSeekAndRead()
931 REDSTATUS RedInodeDataSeek( CINODE * pInode, in RedInodeDataSeek() argument
936 if( !CINODE_IS_MOUNTED( pInode ) || ( ulBlock >= INODE_DATA_BLOCKS ) ) in RedInodeDataSeek()
942 SeekCoord( pInode, ulBlock ); in RedInodeDataSeek()
945 if( pInode->uDindirEntry != COORD_ENTRY_INVALID ) in RedInodeDataSeek()
947 if( pInode->ulDindirBlock == BLOCK_SPARSE ) in RedInodeDataSeek()
951 pInode->ulIndirBlock = BLOCK_SPARSE; in RedInodeDataSeek()
955 if( pInode->pDindir == NULL ) in RedInodeDataSeek()
957 …ret = RedBufferGet( pInode->ulDindirBlock, BFLAG_META_DINDIR, CAST_VOID_PTR_PTR( &pInode->pDindir … in RedInodeDataSeek()
962 pInode->ulIndirBlock = pInode->pDindir->aulEntries[ pInode->uDindirEntry ]; in RedInodeDataSeek()
969 if( ( ret == 0 ) && ( pInode->uIndirEntry != COORD_ENTRY_INVALID ) ) in RedInodeDataSeek()
971 if( pInode->ulIndirBlock == BLOCK_SPARSE ) in RedInodeDataSeek()
975 pInode->ulDataBlock = BLOCK_SPARSE; in RedInodeDataSeek()
979 if( pInode->pIndir == NULL ) in RedInodeDataSeek()
981 …ret = RedBufferGet( pInode->ulIndirBlock, BFLAG_META_INDIR, CAST_VOID_PTR_PTR( &pInode->pIndir ) ); in RedInodeDataSeek()
986 pInode->ulDataBlock = pInode->pIndir->aulEntries[ pInode->uIndirEntry ]; in RedInodeDataSeek()
992 if( ( ret == 0 ) && ( pInode->ulDataBlock == BLOCK_SPARSE ) ) in RedInodeDataSeek()
1010 static void SeekCoord( CINODE * pInode, in SeekCoord() argument
1013 if( !CINODE_IS_MOUNTED( pInode ) || ( ulBlock >= INODE_DATA_BLOCKS ) ) in SeekCoord()
1017 else if( ( pInode->ulLogicalBlock != ulBlock ) || !pInode->fCoordInited ) in SeekCoord()
1019 RedInodePutData( pInode ); in SeekCoord()
1020 pInode->ulLogicalBlock = ulBlock; in SeekCoord()
1028 RedInodePutCoord( pInode ); in SeekCoord()
1031 pInode->uInodeEntry = ( uint16_t ) ulBlock; in SeekCoord()
1032 pInode->ulDataBlock = pInode->pInodeBuf->aulEntries[ pInode->uInodeEntry ]; in SeekCoord()
1035 pInode->uDindirEntry = COORD_ENTRY_INVALID; in SeekCoord()
1038 pInode->uIndirEntry = COORD_ENTRY_INVALID; in SeekCoord()
1056 RedInodePutDindir( pInode ); in SeekCoord()
1063 if( ( pInode->uInodeEntry != uInodeEntry ) || !pInode->fCoordInited ) in SeekCoord()
1065 RedInodePutIndir( pInode ); in SeekCoord()
1067 pInode->uInodeEntry = uInodeEntry; in SeekCoord()
1069 pInode->ulIndirBlock = pInode->pInodeBuf->aulEntries[ pInode->uInodeEntry ]; in SeekCoord()
1073 pInode->uDindirEntry = COORD_ENTRY_INVALID; in SeekCoord()
1075 pInode->uIndirEntry = uIndirEntry; in SeekCoord()
1101 if( ( pInode->uInodeEntry != uInodeEntry ) || !pInode->fCoordInited ) in SeekCoord()
1103 RedInodePutIndir( pInode ); in SeekCoord()
1104 RedInodePutDindir( pInode ); in SeekCoord()
1106 pInode->uInodeEntry = uInodeEntry; in SeekCoord()
1108 pInode->ulDindirBlock = pInode->pInodeBuf->aulEntries[ pInode->uInodeEntry ]; in SeekCoord()
1116 else if( pInode->uDindirEntry != uDindirEntry ) in SeekCoord()
1118 RedInodePutIndir( pInode ); in SeekCoord()
1126 pInode->uDindirEntry = uDindirEntry; in SeekCoord()
1127 pInode->uIndirEntry = uIndirEntry; in SeekCoord()
1148 pInode->fCoordInited = true; in SeekCoord()
1171 static REDSTATUS ReadUnaligned( CINODE * pInode, in ReadUnaligned() argument
1188 ret = RedInodeDataSeekAndRead( pInode, ( uint32_t ) ( ullStart >> BLOCK_SIZE_P2 ) ); in ReadUnaligned()
1192 RedMemCpy( pbBuffer, &pInode->pbData[ ullStart & ( REDCONF_BLOCK_SIZE - 1U ) ], ulLen ); in ReadUnaligned()
1225 static REDSTATUS ReadAligned( CINODE * pInode, in ReadAligned() argument
1248 ret = GetExtent( pInode, ulBlockStart + ulBlockIndex, &ulExtentStart, &ulExtentLen ); in ReadAligned()
1307 static REDSTATUS WriteUnaligned( CINODE * pInode, in WriteUnaligned() argument
1324 ret = RedInodeDataSeek( pInode, ( uint32_t ) ( ullStart >> BLOCK_SIZE_P2 ) ); in WriteUnaligned()
1328 ret = BranchBlock( pInode, BRANCHDEPTH_FILE_DATA, true ); in WriteUnaligned()
1332 … RedMemCpy( &pInode->pbData[ ullStart & ( REDCONF_BLOCK_SIZE - 1U ) ], pbBuffer, ulLen ); in WriteUnaligned()
1358 static REDSTATUS WriteAligned( CINODE * pInode, in WriteAligned() argument
1380 ret = RedInodeDataSeek( pInode, ulBlockStart + ulBlockIndex ); in WriteAligned()
1384 ret = BranchBlock( pInode, BRANCHDEPTH_FILE_DATA, false ); in WriteAligned()
1418 … ret = GetExtent( pInode, ulBlockStart + ulBlockIndex, &ulExtentStart, &ulExtentLen ); in WriteAligned()
1468 static REDSTATUS GetExtent( CINODE * pInode, in GetExtent() argument
1482 ret = RedInodeDataSeek( pInode, ulBlockStart ); in GetExtent()
1487 uint32_t ulFirstBlock = pInode->ulDataBlock; in GetExtent()
1492 ret = RedInodeDataSeek( pInode, ulBlockStart + ulRunLen ); in GetExtent()
1497 …if( ( ret == -RED_ENODATA ) || ( ( ret == 0 ) && ( pInode->ulDataBlock != ( ulFirstBlock + ulRunLe… in GetExtent()
1535 static REDSTATUS BranchBlock( CINODE * pInode, in BranchBlock() argument
1542 ret = BranchBlockCost( pInode, depth, &ulCost ); in BranchBlock()
1552 if( pInode->uDindirEntry != COORD_ENTRY_INVALID ) in BranchBlock()
1554 …ret = BranchOneBlock( &pInode->ulDindirBlock, CAST_VOID_PTR_PTR( &pInode->pDindir ), BFLAG_META_DI… in BranchBlock()
1560 pInode->pDindir->ulInode = pInode->ulInode; in BranchBlock()
1562pInode->pInodeBuf->aulEntries[ pInode->uInodeEntry ] = pInode->ulDindirBlock; in BranchBlock()
1570 … if( ( pInode->uIndirEntry != COORD_ENTRY_INVALID ) && ( depth >= BRANCHDEPTH_INDIR ) ) in BranchBlock()
1572 …ret = BranchOneBlock( &pInode->ulIndirBlock, CAST_VOID_PTR_PTR( &pInode->pIndir ), BFLAG_META_INDI… in BranchBlock()
1578 pInode->pIndir->ulInode = pInode->ulInode; in BranchBlock()
1581 if( pInode->uDindirEntry != COORD_ENTRY_INVALID ) in BranchBlock()
1583pInode->pDindir->aulEntries[ pInode->uDindirEntry ] = pInode->ulIndirBlock; in BranchBlock()
1588pInode->pInodeBuf->aulEntries[ pInode->uInodeEntry ] = pInode->ulIndirBlock; in BranchBlock()
1600 bool fAllocedNew = ( pInode->ulDataBlock == BLOCK_SPARSE ); in BranchBlock()
1602 …void ** ppBufPtr = ( fBuffer || ( pInode->pbData != NULL ) ) ? CAST_VOID_PTR_PTR( &pInode->pbData … in BranchBlock()
1604 ret = BranchOneBlock( &pInode->ulDataBlock, ppBufPtr, 0U ); in BranchBlock()
1609 if( pInode->uIndirEntry != COORD_ENTRY_INVALID ) in BranchBlock()
1611pInode->pIndir->aulEntries[ pInode->uIndirEntry ] = pInode->ulDataBlock; in BranchBlock()
1616pInode->pInodeBuf->aulEntries[ pInode->uInodeEntry ] = pInode->ulDataBlock; in BranchBlock()
1622 if( pInode->pInodeBuf->ulBlocks < INODE_DATA_BLOCKS ) in BranchBlock()
1624 pInode->pInodeBuf->ulBlocks++; in BranchBlock()
1793 static REDSTATUS BranchBlockCost( const CINODE * pInode, in BranchBlockCost() argument
1799 …if( !CINODE_IS_MOUNTED( pInode ) || !pInode->fCoordInited || ( depth > BRANCHDEPTH_MAX ) || ( pulC… in BranchBlockCost()
1821 if( pInode->uDindirEntry != COORD_ENTRY_INVALID ) in BranchBlockCost()
1823 if( pInode->ulDindirBlock != BLOCK_SPARSE ) in BranchBlockCost()
1825 ret = RedImapBlockState( pInode->ulDindirBlock, &state ); in BranchBlockCost()
1846 … if( ( pInode->uIndirEntry != COORD_ENTRY_INVALID ) && ( depth >= BRANCHDEPTH_INDIR ) ) in BranchBlockCost()
1848 if( pInode->ulIndirBlock != BLOCK_SPARSE ) in BranchBlockCost()
1850 ret = RedImapBlockState( pInode->ulIndirBlock, &state ); in BranchBlockCost()
1874 if( pInode->ulDataBlock != BLOCK_SPARSE ) in BranchBlockCost()
1876 ret = RedImapBlockState( pInode->ulDataBlock, &state ); in BranchBlockCost()