mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-30 19:48:38 -05:00 
			
		
		
		
	sys: write.c, file.c: better handle failure cases around cache resizing
This commit is contained in:
		| @@ -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; | ||||||
|   | |||||||
| @@ -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, | ||||||
|   | |||||||
| @@ -231,6 +231,8 @@ static NTSTATUS FspFsvolWriteCached( | |||||||
|     return STATUS_SUCCESS; |     return STATUS_SUCCESS; | ||||||
|  |  | ||||||
| cleanup: | cleanup: | ||||||
|  |     /* pull back the cache file size if we extended it */ | ||||||
|  |     if (ExtendingFile) | ||||||
|         CcGetFileSizePointer(FileObject)->QuadPart = OriginalFileSize; |         CcGetFileSizePointer(FileObject)->QuadPart = OriginalFileSize; | ||||||
|  |  | ||||||
|     FspFileNodeRelease(FileNode, Main); |     FspFileNodeRelease(FileNode, Main); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user