mirror of
https://github.com/bobranten/Ext4Fsd.git
synced 2025-10-30 05:18:31 -05:00
set mount time and write time in the superblock
This commit is contained in:
@@ -2279,6 +2279,7 @@ Ext2InitializeVcb( IN PEXT2_IRP_CONTEXT IrpContext,
|
|||||||
USHORT Buffer[2];
|
USHORT Buffer[2];
|
||||||
ULONG ChangeCount = 0, features;
|
ULONG ChangeCount = 0, features;
|
||||||
CC_FILE_SIZES FileSizes;
|
CC_FILE_SIZES FileSizes;
|
||||||
|
LARGE_INTEGER SysTime, LinuxTime;
|
||||||
int i, has_huge_files;
|
int i, has_huge_files;
|
||||||
|
|
||||||
BOOLEAN VcbResourceInitialized = FALSE;
|
BOOLEAN VcbResourceInitialized = FALSE;
|
||||||
@@ -2709,6 +2710,12 @@ Ext2InitializeVcb( IN PEXT2_IRP_CONTEXT IrpContext,
|
|||||||
/* query parameters from registry */
|
/* query parameters from registry */
|
||||||
Ext2PerformRegistryVolumeParams(Vcb);
|
Ext2PerformRegistryVolumeParams(Vcb);
|
||||||
|
|
||||||
|
/* update fs mount time */
|
||||||
|
KeQuerySystemTime(&SysTime);
|
||||||
|
Ext2TimeToSecondsSince1970(&SysTime, &LinuxTime.LowPart, &LinuxTime.HighPart);
|
||||||
|
Vcb->SuperBlock->s_mtime = LinuxTime.LowPart;
|
||||||
|
Vcb->SuperBlock->s_mtime_hi = (UCHAR)LinuxTime.HighPart;
|
||||||
|
|
||||||
SetLongFlag(Vcb->Flags, VCB_INITIALIZED);
|
SetLongFlag(Vcb->Flags, VCB_INITIALIZED);
|
||||||
|
|
||||||
} __finally {
|
} __finally {
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ Ext2ShutDown (IN PEXT2_IRP_CONTEXT IrpContext)
|
|||||||
|
|
||||||
BOOLEAN GlobalResourceAcquired = FALSE;
|
BOOLEAN GlobalResourceAcquired = FALSE;
|
||||||
|
|
||||||
|
LARGE_INTEGER SysTime, LinuxTime;
|
||||||
|
|
||||||
__try {
|
__try {
|
||||||
|
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
@@ -64,27 +66,21 @@ Ext2ShutDown (IN PEXT2_IRP_CONTEXT IrpContext)
|
|||||||
|
|
||||||
if (IsMounted(Vcb)) {
|
if (IsMounted(Vcb)) {
|
||||||
|
|
||||||
|
/* update fs write time */
|
||||||
|
KeQuerySystemTime(&SysTime);
|
||||||
|
Ext2TimeToSecondsSince1970(&SysTime, &LinuxTime.LowPart, &LinuxTime.HighPart);
|
||||||
|
Vcb->SuperBlock->s_wtime = LinuxTime.LowPart;
|
||||||
|
Vcb->SuperBlock->s_wtime_hi = (UCHAR)LinuxTime.HighPart;
|
||||||
|
|
||||||
/* update mount count */
|
/* update mount count */
|
||||||
Vcb->SuperBlock->s_mnt_count++;
|
Vcb->SuperBlock->s_mnt_count++;
|
||||||
if (Vcb->SuperBlock->s_mnt_count >
|
|
||||||
Vcb->SuperBlock->s_max_mnt_count ) {
|
|
||||||
Vcb->SuperBlock->s_mnt_count =
|
|
||||||
Vcb->SuperBlock->s_max_mnt_count;
|
|
||||||
}
|
|
||||||
Ext2SaveSuper(IrpContext, Vcb);
|
Ext2SaveSuper(IrpContext, Vcb);
|
||||||
|
|
||||||
/* flush dirty cache for all files */
|
/* flush dirty cache for all files */
|
||||||
Status = Ext2FlushFiles(IrpContext, Vcb, TRUE);
|
Ext2FlushFiles(IrpContext, Vcb, TRUE);
|
||||||
if (!NT_SUCCESS(Status)) {
|
|
||||||
DbgBreak();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* flush volume stream's cache to disk */
|
/* flush volume stream's cache to disk */
|
||||||
Status = Ext2FlushVolume(IrpContext, Vcb, TRUE);
|
Ext2FlushVolume(IrpContext, Vcb, TRUE);
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status) && Status != STATUS_MEDIA_WRITE_PROTECTED) {
|
|
||||||
DbgBreak();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* send shutdown request to underlying disk */
|
/* send shutdown request to underlying disk */
|
||||||
Ext2DiskShutDown(Vcb);
|
Ext2DiskShutDown(Vcb);
|
||||||
@@ -115,4 +111,4 @@ Ext2ShutDown (IN PEXT2_IRP_CONTEXT IrpContext)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user