From 920c15e022b5b0d0160aacdd8223b1810f079cda Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Fri, 11 Mar 2016 22:57:51 -0800 Subject: [PATCH] sys: write.c, file.c: better handle failure cases around cache resizing --- src/sys/driver.h | 1 - src/sys/file.c | 6 +++++- src/sys/write.c | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) 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);