mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-31 03:58:38 -05:00 
			
		
		
		
	sys: FspAcquireForCcFlush, FspReleaseForCcFlush
This commit is contained in:
		| @@ -133,11 +133,11 @@ NTSTATUS FspAcquireForCcFlush( | ||||
|     PIRP TopLevelIrp = IoGetTopLevelIrp(); | ||||
|     ULONG TopFlags; | ||||
|  | ||||
|     ASSERT(0 == TopLevelIrp || | ||||
|         (PIRP)FSRTL_MAX_TOP_LEVEL_IRP_FLAG < TopLevelIrp); | ||||
|     if (0 == TopLevelIrp) | ||||
|     if ((PIRP)FSRTL_MAX_TOP_LEVEL_IRP_FLAG >= TopLevelIrp) | ||||
|     { | ||||
|         FspFileNodeAcquireExclusive(FileNode, Full); | ||||
|         ASSERT(0 == FileNode->Tls.CcFlush.TopLevelIrp); | ||||
|         FileNode->Tls.CcFlush.TopLevelIrp = TopLevelIrp; | ||||
|         IoSetTopLevelIrp((PIRP)FSRTL_CACHE_TOP_LEVEL_IRP); | ||||
|     } | ||||
|     else | ||||
| @@ -145,8 +145,8 @@ NTSTATUS FspAcquireForCcFlush( | ||||
|         TopFlags = FspIrpTopFlags(TopLevelIrp); | ||||
|         FspIrpSetTopFlags(TopLevelIrp, FspIrpFlags(TopLevelIrp)); | ||||
|         FspFileNodeAcquireExclusive(FileNode, Full); | ||||
|         ASSERT(0 == FileNode->Tls.TopFlags); | ||||
|         FileNode->Tls.TopFlags = TopFlags; | ||||
|         ASSERT(0 == FileNode->Tls.CcFlush.TopFlags); | ||||
|         FileNode->Tls.CcFlush.TopFlags = TopFlags; | ||||
|     } | ||||
|  | ||||
|     FSP_LEAVE("FileObject=%p", FileObject); | ||||
| @@ -166,13 +166,14 @@ NTSTATUS FspReleaseForCcFlush( | ||||
|         (PIRP)FSRTL_MAX_TOP_LEVEL_IRP_FLAG < TopLevelIrp); | ||||
|     if ((PIRP)FSRTL_CACHE_TOP_LEVEL_IRP == TopLevelIrp) | ||||
|     { | ||||
|         IoSetTopLevelIrp(0); | ||||
|         IoSetTopLevelIrp(FileNode->Tls.CcFlush.TopLevelIrp); | ||||
|         FileNode->Tls.CcFlush.TopLevelIrp = 0; | ||||
|         FspFileNodeRelease(FileNode, Full); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         TopFlags = FileNode->Tls.TopFlags; | ||||
|         FileNode->Tls.TopFlags = 0; | ||||
|         TopFlags = FileNode->Tls.CcFlush.TopFlags; | ||||
|         FileNode->Tls.CcFlush.TopFlags = 0; | ||||
|         FspFileNodeRelease(FileNode, Full); | ||||
|         FspIrpSetTopFlags(TopLevelIrp, TopFlags); | ||||
|     } | ||||
|   | ||||
| @@ -874,10 +874,14 @@ typedef struct | ||||
|     ULONG DirInfoChangeNumber; | ||||
|     BOOLEAN TruncateOnClose; | ||||
|     FILE_LOCK FileLock; | ||||
|     union | ||||
|     struct | ||||
|     { | ||||
|         PVOID LazyWriteThread; | ||||
|         UINT32 TopFlags; | ||||
|         union | ||||
|         { | ||||
|             PIRP TopLevelIrp; | ||||
|             UINT32 TopFlags; | ||||
|         } CcFlush; | ||||
|     } Tls; | ||||
|     /* read-only after creation (and insertion in the ContextTable) */ | ||||
|     PDEVICE_OBJECT FsvolDeviceObject; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user