MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / Ext2AddVcbExtent

Function Ext2AddVcbExtent

Ext4Fsd/memory.c:645–695  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

643
644
645BOOLEAN
646Ext2AddVcbExtent (
647 IN PEXT2_VCB Vcb,
648 IN LONGLONG Vbn,
649 IN LONGLONG Length
650)
651{
652 ULONG TriedTimes = 0;
653
654 LONGLONG Offset = 0;
655 BOOLEAN rc = FALSE;
656
657 Offset = Vbn & (~(Vcb->IoUnitSize - 1));
658 Length = (Vbn - Offset + Length + Vcb->IoUnitSize - 1) &
659 ~(Vcb->IoUnitSize - 1);
660
661 ASSERT ((Offset & (Vcb->IoUnitSize - 1)) == 0);
662 ASSERT ((Length & (Vcb->IoUnitSize - 1)) == 0);
663
664 Offset = (Offset >> Vcb->IoUnitBits) + 1;
665 Length = (Length >> Vcb->IoUnitBits);
666
667Again:
668
669 __try {
670 rc = FsRtlAddLargeMcbEntry(
671 &Vcb->Extents,
672 Offset,
673 Offset,
674 Length
675 );
676 } __except (EXCEPTION_EXECUTE_HANDLER) {
677 DbgBreak();
678 rc = FALSE;
679 }
680
681 if (!rc && ++TriedTimes < 10) {
682 Ext2Sleep(TriedTimes * 100);
683 goto Again;
684 }
685
686 DEBUG(DL_EXT, ("Ext2AddVcbExtent: Vbn=%I64xh Length=%I64xh,"
687 " rc=%d Runs=%u\n", Offset, Length, rc,
688 FsRtlNumberOfRunsInLargeMcb(&Vcb->Extents)));
689
690 if (rc) {
691 Ext2CheckExtent(&Vcb->Extents, Offset, Offset, Length, TRUE);
692 }
693
694 return rc;
695}
696
697BOOLEAN
698Ext2RemoveVcbExtent (

Callers 5

Ext2AddBlockExtentFunction · 0.85
Ext2WriteVolumeFunction · 0.85
Ext2GetBlockFunction · 0.85
Ext2TruncateBlockFunction · 0.85
Ext2FreeBlockFunction · 0.85

Calls 2

Ext2SleepFunction · 0.85
Ext2CheckExtentFunction · 0.85

Tested by

no test coverage detected