BOOLEAN Ext2ZeroData ( IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER Start, IN PLARGE_INTEGER End ) { PEXT2_FCB Fcb; PBCB Bcb; PVOID Ptr; ULONG Size; BOOLEAN rc = TRUE; ASSERT (End && Start && End->QuadPart > Start->QuadPart); Fcb = (PEXT2_FCB) FileObject->FsContext; /* skip data zero if we've already tracked unwritten part */ if (0 == ( End->LowPart & (BLOCK_SIZE -1)) && 0 == (Start->LowPart & (BLOCK_SIZE -1))) { if (INODE_HAS_EXTENT(Fcb->Inode)) { return TRUE; } else { #if !EXT2_PRE_ALLOCATION_SUPPORT return TRUE; #endif } } /* clear data in range [Start, End) */ return CcZeroData(FileObject, Start, End, Ext2CanIWait()); }
int Ext2Partition::read_data_block(EXT2_INODE *ino, lloff_t lbn, void *buf) { lloff_t block; if(INODE_HAS_EXTENT(ino)) block = extent_to_logical(ino, lbn); else block = fileblock_to_logical(ino, lbn); if(block == 0) return -1; return ext2_readblock(block, buf); }
int Partition::ReadDataBlock(EXT2_INODE *ino, uint64_t lbn, void *buf) { uint64_t block; if(INODE_HAS_EXTENT(ino)) block = ExtentToLogical(ino, lbn); else block = FileblockToLogical(ino, lbn); if(block == 0) return -1; return ReadBlock(block, buf); }