diff --git a/Ext4Fsd/memory.c b/Ext4Fsd/memory.c index efe0150..e7aee41 100644 --- a/Ext4Fsd/memory.c +++ b/Ext4Fsd/memory.c @@ -2279,6 +2279,7 @@ Ext2InitializeVcb( IN PEXT2_IRP_CONTEXT IrpContext, USHORT Buffer[2]; ULONG ChangeCount = 0, features; CC_FILE_SIZES FileSizes; + LARGE_INTEGER SysTime, LinuxTime; int i, has_huge_files; BOOLEAN VcbResourceInitialized = FALSE; @@ -2709,6 +2710,12 @@ Ext2InitializeVcb( IN PEXT2_IRP_CONTEXT IrpContext, /* query parameters from registry */ 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); } __finally { diff --git a/Ext4Fsd/shutdown.c b/Ext4Fsd/shutdown.c index 3a34eb1..f331b5d 100644 --- a/Ext4Fsd/shutdown.c +++ b/Ext4Fsd/shutdown.c @@ -33,6 +33,8 @@ Ext2ShutDown (IN PEXT2_IRP_CONTEXT IrpContext) BOOLEAN GlobalResourceAcquired = FALSE; + LARGE_INTEGER SysTime, LinuxTime; + __try { Status = STATUS_SUCCESS; @@ -64,27 +66,21 @@ Ext2ShutDown (IN PEXT2_IRP_CONTEXT IrpContext) 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 */ 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); /* flush dirty cache for all files */ - Status = Ext2FlushFiles(IrpContext, Vcb, TRUE); - if (!NT_SUCCESS(Status)) { - DbgBreak(); - } + Ext2FlushFiles(IrpContext, Vcb, TRUE); /* flush volume stream's cache to disk */ - Status = Ext2FlushVolume(IrpContext, Vcb, TRUE); - - if (!NT_SUCCESS(Status) && Status != STATUS_MEDIA_WRITE_PROTECTED) { - DbgBreak(); - } + Ext2FlushVolume(IrpContext, Vcb, TRUE); /* send shutdown request to underlying disk */ Ext2DiskShutDown(Vcb); @@ -115,4 +111,4 @@ Ext2ShutDown (IN PEXT2_IRP_CONTEXT IrpContext) } return Status; -} \ No newline at end of file +}