sys: write.c, file.c: better handle failure cases around cache resizing

This commit is contained in:
Bill Zissimopoulos 2016-03-11 22:57:51 -08:00
parent 1fa9dcaa61
commit 920c15e022
3 changed files with 8 additions and 3 deletions

View File

@ -789,7 +789,6 @@ typedef struct
UINT64 LastWriteTime; UINT64 LastWriteTime;
UINT64 ChangeTime; UINT64 ChangeTime;
ULONG InfoChangeNumber; ULONG InfoChangeNumber;
NTSTATUS CcStatus;
UINT64 Security; UINT64 Security;
ULONG SecurityChangeNumber; ULONG SecurityChangeNumber;
BOOLEAN TruncateOnClose; BOOLEAN TruncateOnClose;

View File

@ -534,8 +534,12 @@ VOID FspFileNodeSetFileInfo(FSP_FILE_NODE *FileNode, PFILE_OBJECT CcFileObject,
FileNode->InfoChangeNumber++; FileNode->InfoChangeNumber++;
if (0 != CcFileObject) if (0 != CcFileObject)
FileNode->CcStatus = FspCcSetFileSizes( {
NTSTATUS Result = FspCcSetFileSizes(
CcFileObject, (PCC_FILE_SIZES)&FileNode->Header.AllocationSize); CcFileObject, (PCC_FILE_SIZES)&FileNode->Header.AllocationSize);
if (!NT_SUCCESS(Result))
CcUninitializeCacheMap(CcFileObject, 0, 0);
}
} }
BOOLEAN FspFileNodeTrySetFileInfo(FSP_FILE_NODE *FileNode, PFILE_OBJECT CcFileObject, BOOLEAN FspFileNodeTrySetFileInfo(FSP_FILE_NODE *FileNode, PFILE_OBJECT CcFileObject,

View File

@ -231,7 +231,9 @@ static NTSTATUS FspFsvolWriteCached(
return STATUS_SUCCESS; return STATUS_SUCCESS;
cleanup: cleanup:
CcGetFileSizePointer(FileObject)->QuadPart = OriginalFileSize; /* pull back the cache file size if we extended it */
if (ExtendingFile)
CcGetFileSizePointer(FileObject)->QuadPart = OriginalFileSize;
FspFileNodeRelease(FileNode, Main); FspFileNodeRelease(FileNode, Main);