Author: pschweitzer Date: Sat Nov 29 20:26:07 2014 New Revision: 65527
URL: http://svn.reactos.org/svn/reactos?rev=65527&view=rev Log: [FASTFAT] - Add a flag to enable (or disable depends on your reading ;-)) the VPB swapout process for volume umount. - By default, disable it for MSVC builds.
This *might* lolfix the MSVC builds.
Just for the record, we also have a bug in the GCC builds but it doesn't seem to show up. The main issue is that after formatting, we close handle to the volume, and IRP_MJ_CLEANUP is properly received and initiates a bit of dismount. But then, the IRP_MJ_CLOSE is never received (why????) and thus, dismount cannot properly end. This is a real & serious issue.
Modified: trunk/reactos/drivers/filesystems/fastfat/cleanup.c trunk/reactos/drivers/filesystems/fastfat/close.c trunk/reactos/drivers/filesystems/fastfat/fsctl.c trunk/reactos/drivers/filesystems/fastfat/vfat.h
Modified: trunk/reactos/drivers/filesystems/fastfat/cleanup.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fastfat... ============================================================================== --- trunk/reactos/drivers/filesystems/fastfat/cleanup.c [iso-8859-1] (original) +++ trunk/reactos/drivers/filesystems/fastfat/cleanup.c [iso-8859-1] Sat Nov 29 20:26:07 2014 @@ -110,10 +110,12 @@ ExReleaseResourceLite(&pFcb->MainResource); }
+#ifdef ENABLE_SWAPOUT if (DeviceExt->Flags & VCB_DISMOUNT_PENDING) { VfatCheckForDismount(DeviceExt, FALSE); } +#endif
return STATUS_SUCCESS; }
Modified: trunk/reactos/drivers/filesystems/fastfat/close.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fastfat... ============================================================================== --- trunk/reactos/drivers/filesystems/fastfat/close.c [iso-8859-1] (original) +++ trunk/reactos/drivers/filesystems/fastfat/close.c [iso-8859-1] Sat Nov 29 20:26:07 2014 @@ -82,10 +82,12 @@ vfatDestroyCCB(pCcb); }
+#ifdef ENABLE_SWAPOUT if (DeviceExt->OpenHandleCount == 0) { VfatCheckForDismount(DeviceExt, FALSE); } +#endif
return Status; }
Modified: trunk/reactos/drivers/filesystems/fastfat/fsctl.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fastfat... ============================================================================== --- trunk/reactos/drivers/filesystems/fastfat/fsctl.c [iso-8859-1] (original) +++ trunk/reactos/drivers/filesystems/fastfat/fsctl.c [iso-8859-1] Sat Nov 29 20:26:07 2014 @@ -977,6 +977,9 @@
/* Mark we're being dismounted */ DeviceExt->Flags |= VCB_DISMOUNT_PENDING; +#ifndef ENABLE_SWAPOUT + IrpContext->DeviceObject->Vpb->Flags &= ~VPB_MOUNTED; +#endif
ExReleaseResourceLite(&DeviceExt->FatResource);
Modified: trunk/reactos/drivers/filesystems/fastfat/vfat.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fastfat... ============================================================================== --- trunk/reactos/drivers/filesystems/fastfat/vfat.h [iso-8859-1] (original) +++ trunk/reactos/drivers/filesystems/fastfat/vfat.h [iso-8859-1] Sat Nov 29 20:26:07 2014 @@ -7,6 +7,9 @@ #include <pseh/pseh2.h>
#define USE_ROS_CC_AND_FS +#ifndef _MSC_VER +#define ENABLE_SWAPOUT +#endif
#define ROUND_DOWN(n, align) \ (((ULONG)n) & ~((align) - 1l))