mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys: FspFileNodeCleanupComplete: FlushAndPurgeOnCleanup:
- handle DeletePending and non-zero PTruncateSize better
This commit is contained in:
parent
d6c3849120
commit
4fcaa99d63
@ -791,7 +791,7 @@ VOID FspFileNodeCleanupComplete(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject
|
|||||||
PDEVICE_OBJECT FsvolDeviceObject = FileNode->FsvolDeviceObject;
|
PDEVICE_OBJECT FsvolDeviceObject = FileNode->FsvolDeviceObject;
|
||||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);
|
||||||
LARGE_INTEGER TruncateSize, *PTruncateSize = 0;
|
LARGE_INTEGER TruncateSize, *PTruncateSize = 0;
|
||||||
BOOLEAN DeletePending, DeletedFromContextTable = FALSE, SingleHandle = FALSE;
|
BOOLEAN DeletePending = FALSE, DeletedFromContextTable = FALSE, SingleHandle = FALSE;
|
||||||
|
|
||||||
FspFsvolDeviceLockContextTable(FsvolDeviceObject);
|
FspFsvolDeviceLockContextTable(FsvolDeviceObject);
|
||||||
|
|
||||||
@ -896,9 +896,19 @@ VOID FspFileNodeCleanupComplete(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject
|
|||||||
{
|
{
|
||||||
/* NOTE: Do not use FspFileNodeFlushAndPurgeCache. It does not seem to work well! */
|
/* NOTE: Do not use FspFileNodeFlushAndPurgeCache. It does not seem to work well! */
|
||||||
|
|
||||||
IO_STATUS_BLOCK IoStatus;
|
if (!DeletePending)
|
||||||
|
{
|
||||||
|
IO_STATUS_BLOCK IoStatus;
|
||||||
|
LARGE_INTEGER ZeroOffset = { 0 };
|
||||||
|
|
||||||
|
if (0 != PTruncateSize && 0 == PTruncateSize->HighPart)
|
||||||
|
FspCcFlushCache(FileObject->SectionObjectPointer, &ZeroOffset, PTruncateSize->LowPart,
|
||||||
|
&IoStatus);
|
||||||
|
else
|
||||||
|
FspCcFlushCache(FileObject->SectionObjectPointer, 0, 0,
|
||||||
|
&IoStatus);
|
||||||
|
}
|
||||||
|
|
||||||
FspCcFlushCache(FileObject->SectionObjectPointer, 0, 0, &IoStatus);
|
|
||||||
CcPurgeCacheSection(FileObject->SectionObjectPointer, 0, 0, TRUE);
|
CcPurgeCacheSection(FileObject->SectionObjectPointer, 0, 0, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user