From 0fa3874c257373fe8415250ae2e8bf25842220bc Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Tue, 19 Sep 2017 21:19:55 +0000 Subject: [PATCH 1/1] [FASTFAT] Only perform dismount check on close/cleanup for volume opening. This prevents random dismounts and fixes 1st stage when ENABLE_SWAPOUT is enabled in FastFAT (disabled by default). CORE-13805 svn path=/trunk/; revision=75908 --- reactos/drivers/filesystems/fastfat/cleanup.c | 6 ++++-- reactos/drivers/filesystems/fastfat/close.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/reactos/drivers/filesystems/fastfat/cleanup.c b/reactos/drivers/filesystems/fastfat/cleanup.c index 07e2eb51470..85b4ea2d2cb 100644 --- a/reactos/drivers/filesystems/fastfat/cleanup.c +++ b/reactos/drivers/filesystems/fastfat/cleanup.c @@ -25,6 +25,7 @@ VfatCleanupFile( { PVFATFCB pFcb; PVFATCCB pCcb; + BOOLEAN IsVolume; PDEVICE_EXTENSION DeviceExt = IrpContext->DeviceExt; PFILE_OBJECT FileObject = IrpContext->FileObject; @@ -36,7 +37,8 @@ VfatCleanupFile( if (!pFcb) return STATUS_SUCCESS; - if (BooleanFlagOn(pFcb->Flags, FCB_IS_VOLUME)) + IsVolume = BooleanFlagOn(pFcb->Flags, FCB_IS_VOLUME); + if (IsVolume) { pFcb->OpenHandleCount--; @@ -145,7 +147,7 @@ VfatCleanupFile( } #ifdef ENABLE_SWAPOUT - if (BooleanFlagOn(DeviceExt->Flags, VCB_DISMOUNT_PENDING)) + if (IsVolume && BooleanFlagOn(DeviceExt->Flags, VCB_DISMOUNT_PENDING)) { VfatCheckForDismount(DeviceExt, FALSE); } diff --git a/reactos/drivers/filesystems/fastfat/close.c b/reactos/drivers/filesystems/fastfat/close.c index 10d40bde40f..b4e5fda3085 100644 --- a/reactos/drivers/filesystems/fastfat/close.c +++ b/reactos/drivers/filesystems/fastfat/close.c @@ -25,6 +25,7 @@ VfatCloseFile( { PVFATFCB pFcb; PVFATCCB pCcb; + BOOLEAN IsVolume; NTSTATUS Status = STATUS_SUCCESS; DPRINT("VfatCloseFile(DeviceExt %p, FileObject %p)\n", @@ -39,7 +40,8 @@ VfatCloseFile( return STATUS_SUCCESS; } - if (BooleanFlagOn(pFcb->Flags, FCB_IS_VOLUME)) + IsVolume = BooleanFlagOn(pFcb->Flags, FCB_IS_VOLUME); + if (IsVolume) { DPRINT("Volume\n"); FileObject->FsContext2 = NULL; @@ -59,7 +61,7 @@ VfatCloseFile( } #ifdef ENABLE_SWAPOUT - if (DeviceExt->OpenHandleCount == 0) + if (IsVolume && DeviceExt->OpenHandleCount == 0) { VfatCheckForDismount(DeviceExt, FALSE); } -- 2.17.1