mirror of
https://github.com/reactos/reactos.git
synced 2026-05-30 23:33:24 +08:00
[NTOS:CC] Honor FO_WRITE_THROUGH flag in CcCopyWrite and fix it in CcZeroData
This commit is contained in:
@@ -556,16 +556,13 @@ CcCopyWrite (
|
||||
if (!SharedCacheMap)
|
||||
return FALSE;
|
||||
|
||||
/* FIXME: Honor FileObject FO_WRITE_THROUGH flag */
|
||||
ASSERT((FileOffset->QuadPart + Length) <= SharedCacheMap->SectionSize.QuadPart);
|
||||
|
||||
ASSERT((FileObject->Flags & FO_WRITE_THROUGH) == 0);
|
||||
|
||||
CurrentOffset = FileOffset->QuadPart;
|
||||
while(CurrentOffset < WriteEnd)
|
||||
{
|
||||
ULONG VacbOffset = CurrentOffset % VACB_MAPPING_GRANULARITY;
|
||||
ULONG VacbLength = min(Length, VACB_MAPPING_GRANULARITY - VacbOffset);
|
||||
ULONG VacbLength = min(WriteEnd - CurrentOffset, VACB_MAPPING_GRANULARITY - VacbOffset);
|
||||
|
||||
Status = CcRosGetVacb(SharedCacheMap, CurrentOffset, &Vacb);
|
||||
if (!NT_SUCCESS(Status))
|
||||
@@ -585,7 +582,6 @@ CcCopyWrite (
|
||||
|
||||
Buffer = (PVOID)((ULONG_PTR)Buffer + VacbLength);
|
||||
CurrentOffset += VacbLength;
|
||||
Length -= VacbLength;
|
||||
|
||||
/* Tell Mm */
|
||||
Status = MmMakePagesDirty(NULL, Add2Ptr(Vacb->BaseAddress, VacbOffset), VacbLength);
|
||||
@@ -600,6 +596,10 @@ CcCopyWrite (
|
||||
_SEH2_END;
|
||||
}
|
||||
|
||||
/* Flush if needed */
|
||||
if (FileObject->Flags & FO_WRITE_THROUGH)
|
||||
CcFlushCache(FileObject->SectionObjectPointer, FileOffset, Length, NULL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -757,7 +757,7 @@ CcZeroData (
|
||||
Length = EndOffset->QuadPart - StartOffset->QuadPart;
|
||||
WriteOffset.QuadPart = StartOffset->QuadPart;
|
||||
|
||||
if (!SharedCacheMap || (FileObject->Flags & FO_WRITE_THROUGH))
|
||||
if (!SharedCacheMap)
|
||||
{
|
||||
/* Make this a non-cached write */
|
||||
IO_STATUS_BLOCK Iosb;
|
||||
@@ -848,5 +848,9 @@ CcZeroData (
|
||||
_SEH2_END;
|
||||
}
|
||||
|
||||
/* Flush if needed */
|
||||
if (FileObject->Flags & FO_WRITE_THROUGH)
|
||||
CcFlushCache(FileObject->SectionObjectPointer, StartOffset, EndOffset->QuadPart - StartOffset->QuadPart, NULL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user