sys: FspFsvolReadNonCached,FspFsvolWriteNonCached: reuse work Requests

This commit is contained in:
Bill Zissimopoulos 2016-11-09 15:58:17 -08:00
parent becfd2e1c5
commit a0cb134bd3
2 changed files with 37 additions and 16 deletions

View File

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

View File

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