mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys: FspFsvolReadNonCached,FspFsvolWriteNonCached: reuse work Requests
This commit is contained in:
parent
becfd2e1c5
commit
a0cb134bd3
@ -266,9 +266,9 @@ static NTSTATUS FspFsvolReadNonCached(
|
||||
/* convert FileNode to shared */
|
||||
FspFileNodeConvertExclusiveToShared(FileNode, Full);
|
||||
|
||||
/* delete any work item if present! */
|
||||
FspIrpDeleteRequest(Irp);
|
||||
|
||||
Request = FspIrpRequest(Irp);
|
||||
if (0 == Request)
|
||||
{
|
||||
/* create request */
|
||||
Result = FspIopCreateRequestEx(Irp, 0, 0, FspFsvolReadNonCachedRequestFini, &Request);
|
||||
if (!NT_SUCCESS(Result))
|
||||
@ -276,6 +276,16 @@ static NTSTATUS FspFsvolReadNonCached(
|
||||
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->Req.Read.UserContext = FileNode->UserContext;
|
||||
|
@ -333,9 +333,9 @@ static NTSTATUS FspFsvolWriteNonCached(
|
||||
}
|
||||
}
|
||||
|
||||
/* delete any work item if present! */
|
||||
FspIrpDeleteRequest(Irp);
|
||||
|
||||
Request = FspIrpRequest(Irp);
|
||||
if (0 == Request)
|
||||
{
|
||||
/* create request */
|
||||
Result = FspIopCreateRequestEx(Irp, 0, 0, FspFsvolWriteNonCachedRequestFini, &Request);
|
||||
if (!NT_SUCCESS(Result))
|
||||
@ -343,6 +343,17 @@ static NTSTATUS FspFsvolWriteNonCached(
|
||||
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->Req.Write.UserContext = FileNode->UserContext;
|
||||
|
Loading…
x
Reference in New Issue
Block a user