mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -05:00
sys: FspFsvolReadNonCached,FspFsvolWriteNonCached: reuse work Requests
This commit is contained in:
parent
becfd2e1c5
commit
a0cb134bd3
@ -266,15 +266,25 @@ static NTSTATUS FspFsvolReadNonCached(
|
|||||||
/* convert FileNode to shared */
|
/* convert FileNode to shared */
|
||||||
FspFileNodeConvertExclusiveToShared(FileNode, Full);
|
FspFileNodeConvertExclusiveToShared(FileNode, Full);
|
||||||
|
|
||||||
/* delete any work item if present! */
|
Request = FspIrpRequest(Irp);
|
||||||
FspIrpDeleteRequest(Irp);
|
if (0 == Request)
|
||||||
|
|
||||||
/* create request */
|
|
||||||
Result = FspIopCreateRequestEx(Irp, 0, 0, FspFsvolReadNonCachedRequestFini, &Request);
|
|
||||||
if (!NT_SUCCESS(Result))
|
|
||||||
{
|
{
|
||||||
FspFileNodeRelease(FileNode, Full);
|
/* create request */
|
||||||
return Result;
|
Result = FspIopCreateRequestEx(Irp, 0, 0, FspFsvolReadNonCachedRequestFini, &Request);
|
||||||
|
if (!NT_SUCCESS(Result))
|
||||||
|
{
|
||||||
|
FspFileNodeRelease(FileNode, Full);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* reuse existing request */
|
||||||
|
ASSERT(Request->Size == sizeof *Request);
|
||||||
|
ASSERT(Request->Hint == (UINT_PTR)Irp);
|
||||||
|
FspIopResetRequest(Request, FspFsvolReadNonCachedRequestFini);
|
||||||
|
RtlZeroMemory(&Request->Req,
|
||||||
|
sizeof *Request - FIELD_OFFSET(FSP_FSCTL_TRANSACT_REQ, Req));
|
||||||
}
|
}
|
||||||
|
|
||||||
Request->Kind = FspFsctlTransactReadKind;
|
Request->Kind = FspFsctlTransactReadKind;
|
||||||
|
@ -333,16 +333,27 @@ static NTSTATUS FspFsvolWriteNonCached(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* delete any work item if present! */
|
Request = FspIrpRequest(Irp);
|
||||||
FspIrpDeleteRequest(Irp);
|
if (0 == Request)
|
||||||
|
|
||||||
/* create request */
|
|
||||||
Result = FspIopCreateRequestEx(Irp, 0, 0, FspFsvolWriteNonCachedRequestFini, &Request);
|
|
||||||
if (!NT_SUCCESS(Result))
|
|
||||||
{
|
{
|
||||||
FspFileNodeRelease(FileNode, Full);
|
/* create request */
|
||||||
return Result;
|
Result = FspIopCreateRequestEx(Irp, 0, 0, FspFsvolWriteNonCachedRequestFini, &Request);
|
||||||
|
if (!NT_SUCCESS(Result))
|
||||||
|
{
|
||||||
|
FspFileNodeRelease(FileNode, Full);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* reuse existing request */
|
||||||
|
ASSERT(Request->Size == sizeof *Request);
|
||||||
|
ASSERT(Request->Hint == (UINT_PTR)Irp);
|
||||||
|
FspIopResetRequest(Request, FspFsvolWriteNonCachedRequestFini);
|
||||||
|
RtlZeroMemory(&Request->Req,
|
||||||
|
sizeof *Request - FIELD_OFFSET(FSP_FSCTL_TRANSACT_REQ, Req));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Request->Kind = FspFsctlTransactWriteKind;
|
Request->Kind = FspFsctlTransactWriteKind;
|
||||||
Request->Req.Write.UserContext = FileNode->UserContext;
|
Request->Req.Write.UserContext = FileNode->UserContext;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user