diff --git a/src/sys/driver.h b/src/sys/driver.h index d94307b3..35f5cd9b 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -789,7 +789,6 @@ typedef struct UINT64 LastWriteTime; UINT64 ChangeTime; ULONG InfoChangeNumber; - NTSTATUS CcStatus; UINT64 Security; ULONG SecurityChangeNumber; BOOLEAN TruncateOnClose; diff --git a/src/sys/file.c b/src/sys/file.c index c1efe0ec..e1a2fb53 100644 --- a/src/sys/file.c +++ b/src/sys/file.c @@ -534,8 +534,12 @@ VOID FspFileNodeSetFileInfo(FSP_FILE_NODE *FileNode, PFILE_OBJECT CcFileObject, FileNode->InfoChangeNumber++; if (0 != CcFileObject) - FileNode->CcStatus = FspCcSetFileSizes( + { + NTSTATUS Result = FspCcSetFileSizes( CcFileObject, (PCC_FILE_SIZES)&FileNode->Header.AllocationSize); + if (!NT_SUCCESS(Result)) + CcUninitializeCacheMap(CcFileObject, 0, 0); + } } BOOLEAN FspFileNodeTrySetFileInfo(FSP_FILE_NODE *FileNode, PFILE_OBJECT CcFileObject, diff --git a/src/sys/write.c b/src/sys/write.c index 52747da5..aa88e6bb 100644 --- a/src/sys/write.c +++ b/src/sys/write.c @@ -231,7 +231,9 @@ static NTSTATUS FspFsvolWriteCached( return STATUS_SUCCESS; cleanup: - CcGetFileSizePointer(FileObject)->QuadPart = OriginalFileSize; + /* pull back the cache file size if we extended it */ + if (ExtendingFile) + CcGetFileSizePointer(FileObject)->QuadPart = OriginalFileSize; FspFileNodeRelease(FileNode, Main);