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

Function Ext2PurgeVolume

Ext4Fsd/fsctl.c:2705–2810  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2703}
2704
2705NTSTATUS
2706Ext2PurgeVolume (IN PEXT2_VCB Vcb,
2707 IN BOOLEAN FlushBeforePurge )
2708{
2709 PEXT2_FCB Fcb;
2710 LIST_ENTRY List, *Next;
2711
2712 BOOLEAN VcbResourceAcquired = FALSE;
2713 BOOLEAN FcbResourceAcquired = FALSE;
2714 BOOLEAN gdResourceAcquired = FALSE;
2715
2716 __try {
2717
2718 ASSERT(Vcb != NULL);
2719 ASSERT((Vcb->Identifier.Type == EXT2VCB) &&
2720 (Vcb->Identifier.Size == sizeof(EXT2_VCB)));
2721
2722 ExAcquireResourceExclusiveLite(&Vcb->MainResource, TRUE);
2723 VcbResourceAcquired = TRUE;
2724
2725 if (IsVcbReadOnly(Vcb)) {
2726 FlushBeforePurge = FALSE;
2727 }
2728
2729 InitializeListHead(&List);
2730
2731 ExAcquireResourceExclusiveLite(&Vcb->FcbLock, TRUE);
2732 FcbResourceAcquired = TRUE;
2733
2734 while (!IsListEmpty(&Vcb->FcbList)) {
2735
2736 Next = RemoveHeadList(&Vcb->FcbList);
2737 Fcb = CONTAINING_RECORD(Next, EXT2_FCB, Next);
2738
2739 DEBUG(DL_INF, ( "Ext2PurgeVolume: %wZ refercount=%xh\n",
2740 &Fcb->Mcb->FullName, Fcb->ReferenceCount));
2741 InsertTailList(&List, &Fcb->Next);
2742 }
2743
2744 while (!IsListEmpty(&List)) {
2745
2746 Next = RemoveHeadList(&List);
2747 Fcb = CONTAINING_RECORD(Next, EXT2_FCB, Next);
2748
2749 if (ExAcquireResourceExclusiveLite(
2750 &Fcb->MainResource,
2751 TRUE )) {
2752
2753 Ext2PurgeFile(Fcb, FlushBeforePurge);
2754
2755 if (Fcb->ReferenceCount <= 1) {
2756 Fcb->TsDrop.QuadPart = 0;
2757 InsertHeadList(&Vcb->FcbList, &Fcb->Next);
2758 } else {
2759 InsertTailList(&Vcb->FcbList, &Fcb->Next);
2760 }
2761 ExReleaseResourceLite(&Fcb->MainResource);
2762 }

Callers 6

Ext2VerifyVolumeFunction · 0.85
Ext2DismountVolumeFunction · 0.85
Ext2PnpQueryRemoveFunction · 0.85
Ext2PnpRemoveFunction · 0.85
Ext2PnpSurpriseRemoveFunction · 0.85
Ext2WriteVolumeFunction · 0.85

Calls 2

Ext2PurgeFileFunction · 0.85
Ext2DropBHFunction · 0.85

Tested by

no test coverage detected