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