mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-24 09:23:37 -05:00
sys: FspFileNode acquire/release
This commit is contained in:
parent
c488949022
commit
512d7dc950
@ -374,7 +374,7 @@ NTSTATUS FspFsvolCreatePrepare(
|
|||||||
FileObject = FspIopRequestContext(Request, RequestFileObject);
|
FileObject = FspIopRequestContext(Request, RequestFileObject);
|
||||||
|
|
||||||
/* lock the FileNode for Paging IO */
|
/* lock the FileNode for Paging IO */
|
||||||
Success = FspFileNodePgioLockExclusive(FileNode, FALSE);
|
Success = FspFileNodePgioTryAcquireExclusive(FileNode);
|
||||||
if (!Success)
|
if (!Success)
|
||||||
{
|
{
|
||||||
/* repost the IRP to retry later */
|
/* repost the IRP to retry later */
|
||||||
@ -392,7 +392,7 @@ NTSTATUS FspFsvolCreatePrepare(
|
|||||||
Success = MmCanFileBeTruncated(&FileNode->NonPaged->SectionObjectPointers, &Zero);
|
Success = MmCanFileBeTruncated(&FileNode->NonPaged->SectionObjectPointers, &Zero);
|
||||||
if (!Success)
|
if (!Success)
|
||||||
{
|
{
|
||||||
FspFileNodePgioUnlock(FileNode);
|
FspFileNodePgioRelease(FileNode);
|
||||||
|
|
||||||
FspFsvolCreatePostClose(FileNode, (UINT_PTR)FileObject->FsContext2);
|
FspFsvolCreatePostClose(FileNode, (UINT_PTR)FileObject->FsContext2);
|
||||||
FspFileNodeClose(FileNode, FileObject, 0);
|
FspFileNodeClose(FileNode, FileObject, 0);
|
||||||
@ -612,7 +612,7 @@ VOID FspFsvolCreateComplete(
|
|||||||
/* did the user-mode file system sent us a failure code? */
|
/* did the user-mode file system sent us a failure code? */
|
||||||
if (!NT_SUCCESS(Response->IoStatus.Status))
|
if (!NT_SUCCESS(Response->IoStatus.Status))
|
||||||
{
|
{
|
||||||
FspFileNodePgioUnlock(FileNode);
|
FspFileNodePgioRelease(FileNode);
|
||||||
|
|
||||||
FspFileNodeClose(FileNode, FileObject, 0);
|
FspFileNodeClose(FileNode, FileObject, 0);
|
||||||
|
|
||||||
@ -626,7 +626,7 @@ VOID FspFsvolCreateComplete(
|
|||||||
FileNode->Header.FileSize.QuadPart = Response->Rsp.Overwrite.FileSize;
|
FileNode->Header.FileSize.QuadPart = Response->Rsp.Overwrite.FileSize;
|
||||||
CcSetFileSizes(FileObject, (PCC_FILE_SIZES)&FileNode->Header.AllocationSize);
|
CcSetFileSizes(FileObject, (PCC_FILE_SIZES)&FileNode->Header.AllocationSize);
|
||||||
|
|
||||||
FspFileNodePgioUnlock(FileNode);
|
FspFileNodePgioRelease(FileNode);
|
||||||
|
|
||||||
/* SUCCESS! */
|
/* SUCCESS! */
|
||||||
FspIopRequestContext(Request, RequestFileNode) = 0;
|
FspIopRequestContext(Request, RequestFileNode) = 0;
|
||||||
|
@ -561,32 +561,52 @@ VOID FspFileNodeDereference(FSP_FILE_NODE *FileNode)
|
|||||||
FspFileNodeDelete(FileNode);
|
FspFileNodeDelete(FileNode);
|
||||||
}
|
}
|
||||||
static inline
|
static inline
|
||||||
BOOLEAN FspFileNodeLockShared(FSP_FILE_NODE *FileNode, BOOLEAN Wait)
|
VOID FspFileNodeAcquireShared(FSP_FILE_NODE *FileNode)
|
||||||
{
|
{
|
||||||
return ExAcquireResourceSharedLite(FileNode->Header.Resource, Wait);
|
ExAcquireResourceSharedLite(FileNode->Header.Resource, TRUE);
|
||||||
}
|
}
|
||||||
static inline
|
static inline
|
||||||
BOOLEAN FspFileNodeLockExclusive(FSP_FILE_NODE *FileNode, BOOLEAN Wait)
|
BOOLEAN FspFileNodeTryAcquireShared(FSP_FILE_NODE *FileNode)
|
||||||
{
|
{
|
||||||
return ExAcquireResourceExclusiveLite(FileNode->Header.Resource, Wait);
|
return ExAcquireResourceSharedLite(FileNode->Header.Resource, FALSE);
|
||||||
}
|
}
|
||||||
static inline
|
static inline
|
||||||
VOID FspFileNodeUnlock(FSP_FILE_NODE *FileNode)
|
VOID FspFileNodeAcquireExclusive(FSP_FILE_NODE *FileNode)
|
||||||
|
{
|
||||||
|
ExAcquireResourceExclusiveLite(FileNode->Header.Resource, TRUE);
|
||||||
|
}
|
||||||
|
static inline
|
||||||
|
BOOLEAN FspFileNodeTryAcquireExclusive(FSP_FILE_NODE *FileNode)
|
||||||
|
{
|
||||||
|
return ExAcquireResourceExclusiveLite(FileNode->Header.Resource, FALSE);
|
||||||
|
}
|
||||||
|
static inline
|
||||||
|
VOID FspFileNodeRelease(FSP_FILE_NODE *FileNode)
|
||||||
{
|
{
|
||||||
ExReleaseResourceLite(FileNode->Header.Resource);
|
ExReleaseResourceLite(FileNode->Header.Resource);
|
||||||
}
|
}
|
||||||
static inline
|
static inline
|
||||||
BOOLEAN FspFileNodePgioLockShared(FSP_FILE_NODE *FileNode, BOOLEAN Wait)
|
VOID FspFileNodePgioAcquireShared(FSP_FILE_NODE *FileNode)
|
||||||
{
|
{
|
||||||
return ExAcquireResourceSharedLite(FileNode->Header.PagingIoResource, Wait);
|
ExAcquireResourceSharedLite(FileNode->Header.PagingIoResource, TRUE);
|
||||||
}
|
}
|
||||||
static inline
|
static inline
|
||||||
BOOLEAN FspFileNodePgioLockExclusive(FSP_FILE_NODE *FileNode, BOOLEAN Wait)
|
BOOLEAN FspFileNodePgioTryAcquireShared(FSP_FILE_NODE *FileNode)
|
||||||
{
|
{
|
||||||
return ExAcquireResourceExclusiveLite(FileNode->Header.PagingIoResource, Wait);
|
return ExAcquireResourceSharedLite(FileNode->Header.PagingIoResource, FALSE);
|
||||||
}
|
}
|
||||||
static inline
|
static inline
|
||||||
VOID FspFileNodePgioUnlock(FSP_FILE_NODE *FileNode)
|
VOID FspFileNodePgioAcquireExclusive(FSP_FILE_NODE *FileNode)
|
||||||
|
{
|
||||||
|
ExAcquireResourceExclusiveLite(FileNode->Header.PagingIoResource, TRUE);
|
||||||
|
}
|
||||||
|
static inline
|
||||||
|
BOOLEAN FspFileNodePgioTryAcquireExclusive(FSP_FILE_NODE *FileNode)
|
||||||
|
{
|
||||||
|
return ExAcquireResourceExclusiveLite(FileNode->Header.PagingIoResource, FALSE);
|
||||||
|
}
|
||||||
|
static inline
|
||||||
|
VOID FspFileNodePgioRelease(FSP_FILE_NODE *FileNode)
|
||||||
{
|
{
|
||||||
ExReleaseResourceLite(FileNode->Header.PagingIoResource);
|
ExReleaseResourceLite(FileNode->Header.PagingIoResource);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user