sys: FspFileNode acquire/release

This commit is contained in:
Bill Zissimopoulos 2016-01-18 12:56:22 -08:00
parent c488949022
commit 512d7dc950
2 changed files with 34 additions and 14 deletions

View File

@ -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;

View File

@ -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);
} }