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

Function Ext2ShutDown

Ext4Fsd/shutdown.c:24–118  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

22#endif
23
24NTSTATUS
25Ext2ShutDown (IN PEXT2_IRP_CONTEXT IrpContext)
26{
27 NTSTATUS Status;
28
29 PIRP Irp;
30
31 PEXT2_VCB Vcb;
32 PLIST_ENTRY ListEntry;
33
34 BOOLEAN GlobalResourceAcquired = FALSE;
35
36 __try {
37
38 Status = STATUS_SUCCESS;
39
40 ASSERT(IrpContext);
41 ASSERT((IrpContext->Identifier.Type == EXT2ICX) &&
42 (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT)));
43
44 Irp = IrpContext->Irp;
45
46 if (!ExAcquireResourceExclusiveLite(
47 &Ext2Global->Resource,
48 IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT) )) {
49 Status = STATUS_PENDING;
50 __leave;
51 }
52
53 GlobalResourceAcquired = TRUE;
54
55 for (ListEntry = Ext2Global->VcbList.Flink;
56 ListEntry != &(Ext2Global->VcbList);
57 ListEntry = ListEntry->Flink ) {
58
59 Vcb = CONTAINING_RECORD(ListEntry, EXT2_VCB, Next);
60
61 if (ExAcquireResourceExclusiveLite(
62 &Vcb->MainResource,
63 TRUE )) {
64
65 if (IsMounted(Vcb)) {
66
67 /* update mount count */
68 Vcb->SuperBlock->s_mnt_count++;
69 if (Vcb->SuperBlock->s_mnt_count >
70 Vcb->SuperBlock->s_max_mnt_count ) {
71 Vcb->SuperBlock->s_mnt_count =
72 Vcb->SuperBlock->s_max_mnt_count;
73 }
74 Ext2SaveSuper(IrpContext, Vcb);
75
76 /* flush dirty cache for all files */
77 Status = Ext2FlushFiles(IrpContext, Vcb, TRUE);
78 if (!NT_SUCCESS(Status)) {
79 DbgBreak();
80 }
81

Callers 1

Ext2DispatchRequestFunction · 0.85

Calls 6

Ext2SaveSuperFunction · 0.85
Ext2FlushFilesFunction · 0.85
Ext2DiskShutDownFunction · 0.85
Ext2QueueRequestFunction · 0.85
Ext2CompleteIrpContextFunction · 0.85
Ext2FlushVolumeFunction · 0.70

Tested by

no test coverage detected