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

Function Ext2AddMcbExtent

Ext4Fsd/memory.c:787–843  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

785
786
787BOOLEAN
788Ext2AddMcbExtent (
789 IN PEXT2_VCB Vcb,
790 IN PEXT2_MCB Mcb,
791 IN LONGLONG Vbn,
792 IN LONGLONG Lbn,
793 IN LONGLONG Length
794)
795{
796 ULONG TriedTimes = 0;
797 LONGLONG Base = 0;
798 UCHAR Bits = 0;
799 BOOLEAN rc = FALSE;
800
801 Base = (LONGLONG)BLOCK_SIZE;
802 Bits = (UCHAR)BLOCK_BITS;
803
804 ASSERT ((Vbn & (Base - 1)) == 0);
805 ASSERT ((Lbn & (Base - 1)) == 0);
806 ASSERT ((Length & (Base - 1)) == 0);
807
808 Vbn = (Vbn >> Bits) + 1;
809 Lbn = (Lbn >> Bits) + 1;
810 Length = (Length >> Bits);
811
812Again:
813
814 __try {
815
816 rc = FsRtlAddLargeMcbEntry(
817 &Mcb->Extents,
818 Vbn,
819 Lbn,
820 Length
821 );
822
823 } __except (EXCEPTION_EXECUTE_HANDLER) {
824
825 DbgBreak();
826 rc = FALSE;
827 }
828
829 if (!rc && ++TriedTimes < 10) {
830 Ext2Sleep(TriedTimes * 100);
831 goto Again;
832 }
833
834 DEBUG(DL_EXT, ("Ext2AddMcbExtent: Vbn=%I64xh Lbn=%I64xh Length=%I64xh,"
835 " rc=%d Runs=%u\n", Vbn, Lbn, Length, rc,
836 FsRtlNumberOfRunsInLargeMcb(&Mcb->Extents)));
837
838 if (rc) {
839 Ext2CheckExtent(&Mcb->Extents, Vbn, Lbn, Length, TRUE);
840 }
841
842 return rc;
843}
844

Callers 1

Ext2AddBlockExtentFunction · 0.85

Calls 2

Ext2SleepFunction · 0.85
Ext2CheckExtentFunction · 0.85

Tested by

no test coverage detected