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 ChangeTime;
ULONG InfoChangeNumber;
NTSTATUS CcStatus;
UINT64 Security;
ULONG SecurityChangeNumber;
BOOLEAN TruncateOnClose;

View File

@ -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,

View File

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