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

Function Ext2RemoveVcbExtent

Ext4Fsd/memory.c:697–742  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

695}
696
697BOOLEAN
698Ext2RemoveVcbExtent (
699 IN PEXT2_VCB Vcb,
700 IN LONGLONG Vbn,
701 IN LONGLONG Length
702)
703{
704 ULONG TriedTimes = 0;
705 LONGLONG Offset = 0;
706 BOOLEAN rc = TRUE;
707
708 Offset = Vbn & (~(Vcb->IoUnitSize - 1));
709 Length = (Length + Vbn - Offset + Vcb->IoUnitSize - 1) & (~(Vcb->IoUnitSize - 1));
710
711 ASSERT ((Offset & (Vcb->IoUnitSize - 1)) == 0);
712 ASSERT ((Length & (Vcb->IoUnitSize - 1)) == 0);
713
714 Offset = (Offset >> Vcb->IoUnitBits) + 1;
715 Length = (Length >> Vcb->IoUnitBits);
716
717Again:
718
719 __try {
720 FsRtlRemoveLargeMcbEntry(
721 &Vcb->Extents,
722 Offset,
723 Length
724 );
725 } __except (EXCEPTION_EXECUTE_HANDLER) {
726 DbgBreak();
727 rc = FALSE;
728 }
729
730 if (!rc && ++TriedTimes < 10) {
731 Ext2Sleep(TriedTimes * 100);
732 goto Again;
733 }
734
735 DEBUG(DL_EXT, ("Ext2RemoveVcbExtent: Vbn=%I64xh Length=%I64xh Runs=%u\n",
736 Offset, Length, FsRtlNumberOfRunsInLargeMcb(&Vcb->Extents)));
737 if (rc) {
738 Ext2CheckExtent(&Vcb->Extents, Offset, 0, Length, FALSE);
739 }
740
741 return rc;
742}
743
744BOOLEAN
745Ext2LookupVcbExtent (

Callers 2

Ext2RemoveBlockExtentFunction · 0.85
Ext2WriteVolumeFunction · 0.85

Calls 2

Ext2SleepFunction · 0.85
Ext2CheckExtentFunction · 0.85

Tested by

no test coverage detected