50 DEBUG(
DL_ERR, (
"Ex2ExpandBlock: failed to allocate memory for Data.\n"));
162 if (BlockArray[0] == 0 && bAlloc) {
189 *Block = BlockArray[0];
190 for (
i=1;
i < SizeArray;
i++) {
191 if (BlockArray[
i] == BlockArray[
i-1] + 1) {
197 *Hint = BlockArray[*
Number - 1];
199 }
else if (
Layer <= 3) {
202 if (BlockArray[0] == 0 || BlockArray[0] >=
TOTAL_BLOCKS) {
224 DEBUG(
DL_ERR, (
"Ext2GetBlock: Failed to PinLock block: %xh ...\n",
239 if (
pData[Slot] == 0) {
294 }
else if (
Layer == 2) {
377 DEBUG(
DL_BLK, (
"Ext2ExpandBlock: SizeArray=%xh Extra=%xh Start=%xh %xh\n",
381 if (BlockArray[
i] == 0) {
408 if (BlockArray[
i] == 0) {
409 BlockArray[
i] = Block++;
416 }
else if (
Layer == 0) {
424 while (*Extra &&
i < SizeArray) {
429 for (
j =
i;
j < SizeArray &&
j <
i + *Extra;
j++) {
436 if (BlockArray[
j] == 0) {
473 BlockArray[
i +
j] = Block++;
489 for (
i = 0; *Extra &&
i < SizeArray;
i++) {
498 if (BlockArray[
i] == 0) {
526 DEBUG(
DL_ERR, (
"Ext2ExpandInode: failed to PinLock offset :%I64xh...\n",
541 Skip =
Vcb->max_blocks_per_layer[
Layer] *
i;
547 Skip += Slot *
Vcb->max_blocks_per_layer[
Layer - 1];
614 for (
i=0;
i < SizeArray;
i++) {
619 return (
i == SizeArray);
647 for (
i = 0;
i < SizeArray;
i++) {
653 while (Extra && SizeArray >
i + 1 &&
Number < *Extra) {
655 if (BlockArray[SizeArray -
i - 1] ==
656 BlockArray[SizeArray -
i - 2] + 1) {
658 BlockArray[SizeArray -
i - 1] = 0;
667 if (BlockArray[SizeArray -
i - 1]) {
673 Mcb->Inode.i_blocks = 0;
678 BlockArray[SizeArray -
i - 1] = 0;
702 BlockArray[SizeArray -
i - 1] = 0;
717 Skip = (SizeArray -
i - 1) *
Vcb->max_blocks_per_layer[
Layer];
719 if (BlockArray[SizeArray -
i - 1]) {
731 DEBUG(
DL_ERR, (
"Ext2TruncateBlock: PinLock failed on block %xh ...\n",
732 BlockArray[SizeArray -
i - 1]));
767 &BlockArray[SizeArray -
i - 1],
787 if (*Extra > Slot *
Vcb->max_blocks_per_layer[
Layer - 1] +
Start + 1) {
788 *Extra -= (Slot *
Vcb->max_blocks_per_layer[
Layer - 1] +
Start + 1);
793 if (*Extra > Slot + 1) {
794 *Extra -= (Slot + 1);
808 if (Extra && *Extra == 0) {
847 ULONG dwRet = 0, dwBlk = 0, dwHint = 0, dwArray = 0;
850 dwBlk =
Mcb->Inode.i_block[Slot];
862 dwHint =
Mcb->Inode.i_block[Slot - 1];
884 Mcb->Inode.i_block[Slot] = dwBlk;
952 if (End >
Vcb->max_data_blocks) {
974 if (
Mcb->Inode.i_block[Slot] != 0) {
975 Hint =
Mcb->Inode.i_block[Slot];
976 }
else if (Slot > 1) {
977 Hint =
Mcb->Inode.i_block[Slot-1];
1043 if (-1 == Lba || Vba == 0 ||
Length <= 0)
1054 if (-1 == Lba || Vba == 0 ||
Length <= 0)
1067 Mcb->Inode.i_blocks = 0;
1068 Mcb->Inode.i_size = 0;
1095 ULONG SizeArray = 0;
1099 End =
Base =
Vcb->max_data_blocks;
1110 Extra = End - Wanted;
1114 if (
Vcb->max_blocks_per_layer[
Layer - 1] == 0) {
1120 if (
Layer - 1 == 0) {
1121 BlockArray = (
PULONG)&
Mcb->Inode.i_block[0];
NTSTATUS Ext2NewBlock(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN ULONG GroupHint, IN ULONG BlockHint, OUT PULONG Block, IN OUT PULONG Number)
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define IsMcbDirectory(Mcb)
IN PVCB IN VBO IN ULONG OUT PBCB * Bcb
#define DEC_MEM_COUNT(_i, _p, _s)
#define STATUS_INVALID_PARAMETER
VOID NTAPI CcSetDirtyPinnedData(IN PVOID BcbVoid, IN OPTIONAL PLARGE_INTEGER Lsn)
VOID Ext2ClearAllExtents(PLARGE_MCB Zone)
VOID NTAPI CcUnpinData(IN PVOID Bcb)
IN PVOID IN PVOID IN USHORT IN USHORT Size
NTSTATUS Ext2TruncateIndirect(PEXT2_IRP_CONTEXT IrpContext, PEXT2_VCB Vcb, PEXT2_MCB Mcb, PLARGE_INTEGER Size)
BOOLEAN Ext2SaveBlock(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN ULONG dwBlk, IN PVOID Buf)
ULONG NTAPI FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb)
BOOLEAN Ext2RemoveMcbMetaExts(IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Block, IN ULONG Length)
BOOLEAN NTAPI FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb, IN ULONG RunIndex, OUT PLONGLONG Vbn, OUT PLONGLONG Lbn, OUT PLONGLONG SectorCount)
NTSTATUS Ext2FreeBlock(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN ULONG Block, IN ULONG Number)
#define INC_MEM_COUNT(_i, _p, _s)
#define ClearLongFlag(_F, _SF)
BOOLEAN Ext2RemoveBlockExtent(IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Start, IN ULONG Number)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
NTSTATUS Ext2InitializeZone(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb)
#define NT_SUCCESS(StatCode)
_In_ WDFCOLLECTION _In_ ULONG Index
struct ext3_dir_entry_2 * PEXT2_DIR_ENTRY2
BOOLEAN Ext2AddVcbExtent(IN PEXT2_VCB Vcb, IN LONGLONG Vbn, IN LONGLONG Length)
BOOLEAN NTAPI CcPinRead(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN ULONG Flags, OUT PVOID *Bcb, OUT PVOID *Buffer)
#define STATUS_UNSUCCESSFUL
_In_opt_ PENTER_STATE_SYSTEM_HANDLER _In_opt_ PVOID _In_ LONG _In_opt_ LONG volatile * Number
ClearFlag(Dirent->Flags, DIRENT_FLAG_NOT_PERSISTENT)
NTSTATUS Ext2MapIndirect(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Index, IN BOOLEAN bAlloc, OUT PULONG pBlock, OUT PULONG Number)
NTSTATUS Ext2ExpandLast(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Base, IN ULONG Layer, IN PULONG *Data, IN PULONG Hint, IN PULONG Block, IN OUT PULONG Number)
_In_ ULONG _In_ ULONG Offset
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
IN PVCB IN ULONG IN OUT PULONG IN BOOLEAN OUT PLARGE_MCB Mcb
NTSTATUS Ext2TruncateIndirectFast(PEXT2_IRP_CONTEXT IrpContext, PEXT2_VCB Vcb, PEXT2_MCB Mcb)
#define STATUS_DISK_CORRUPT_ERROR
NTSTATUS Ext2TruncateBlock(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Base, IN ULONG Start, IN ULONG Layer, IN ULONG SizeArray, IN PULONG BlockArray, IN PULONG Extra)
#define RtlZeroMemory(Destination, Length)
VOID Ext2FreePool(IN PVOID P, IN ULONG Tag)
BOOLEAN Ext2AddMcbMetaExts(IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Block, IN ULONG Length)
NTSTATUS Ext2GetBlock(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Base, IN ULONG Layer, IN ULONG Start, IN ULONG SizeArray, IN PULONG BlockArray, IN BOOLEAN bAlloc, IN OUT PULONG Hint, OUT PULONG Block, OUT PULONG Number)
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
PVOID Ext2AllocatePool(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag)
NTSTATUS Ext2ExpandIndirect(PEXT2_IRP_CONTEXT IrpContext, PEXT2_VCB Vcb, PEXT2_MCB Mcb, ULONG Start, ULONG End, PLARGE_INTEGER Size)
BOOLEAN Ext2SaveInode(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN struct inode *Inode)
BOOLEAN Ext2AddBlockExtent(IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Start, IN ULONG Block, IN ULONG Number)
NTSTATUS Ext2ExpandBlock(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Base, IN ULONG Layer, IN ULONG Start, IN ULONG SizeArray, IN PULONG BlockArray, IN PULONG Hint, IN PULONG Extra)
BOOLEAN Ext2IsBlockEmpty(PULONG BlockArray, ULONG SizeArray)
#define IsZoneInited(Mcb)