mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys: FspAcquireForCcFlush, FspReleaseForCcFlush
This commit is contained in:
parent
f407f65a90
commit
25911a808c
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user