sys: read, write: oplocks

This commit is contained in:
Bill Zissimopoulos
2016-11-12 13:12:35 -08:00
parent 2772af5478
commit 7518a6e418
2 changed files with 42 additions and 0 deletions

View File

@ -116,6 +116,15 @@ static NTSTATUS FspFsvolReadCached(
if (!Success)
return FspWqRepostIrpWorkItem(Irp, FspFsvolReadCached, 0);
/* perform oplock check */
Result = FspCheckOplock(FspFileNodeAddrOfOplock(FileNode), Irp,
(PVOID)(UINT_PTR)FspFsvolReadCached, FspWqOplockComplete, FspWqOplockPrepare);
if (STATUS_PENDING == Result)
{
FspFileNodeRelease(FileNode, Main);
return Result;
}
/* check the file locks */
if (!FsRtlCheckLockForReadAccess(&FileNode->FileLock, Irp))
{
@ -236,6 +245,18 @@ static NTSTATUS FspFsvolReadNonCached(
if (!Success)
return FspWqRepostIrpWorkItem(Irp, FspFsvolReadNonCached, 0);
/* perform oplock check */
if (!PagingIo)
{
Result = FspCheckOplock(FspFileNodeAddrOfOplock(FileNode), Irp,
(PVOID)(UINT_PTR)FspFsvolReadNonCached, FspWqOplockComplete, FspWqOplockPrepare);
if (STATUS_PENDING == Result)
{
FspFileNodeRelease(FileNode, Full);
return Result;
}
}
/* check the file locks */
if (!PagingIo && !FsRtlCheckLockForReadAccess(&FileNode->FileLock, Irp))
{