mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-25 01:42:24 -05:00
sys: read, write: oplocks
This commit is contained in:
parent
2772af5478
commit
7518a6e418
@ -116,6 +116,15 @@ static NTSTATUS FspFsvolReadCached(
|
|||||||
if (!Success)
|
if (!Success)
|
||||||
return FspWqRepostIrpWorkItem(Irp, FspFsvolReadCached, 0);
|
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 */
|
/* check the file locks */
|
||||||
if (!FsRtlCheckLockForReadAccess(&FileNode->FileLock, Irp))
|
if (!FsRtlCheckLockForReadAccess(&FileNode->FileLock, Irp))
|
||||||
{
|
{
|
||||||
@ -236,6 +245,18 @@ static NTSTATUS FspFsvolReadNonCached(
|
|||||||
if (!Success)
|
if (!Success)
|
||||||
return FspWqRepostIrpWorkItem(Irp, FspFsvolReadNonCached, 0);
|
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 */
|
/* check the file locks */
|
||||||
if (!PagingIo && !FsRtlCheckLockForReadAccess(&FileNode->FileLock, Irp))
|
if (!PagingIo && !FsRtlCheckLockForReadAccess(&FileNode->FileLock, Irp))
|
||||||
{
|
{
|
||||||
|
@ -140,6 +140,15 @@ static NTSTATUS FspFsvolWriteCached(
|
|||||||
if (!Success)
|
if (!Success)
|
||||||
return FspWqRepostIrpWorkItem(Irp, FspFsvolWriteCached, 0);
|
return FspWqRepostIrpWorkItem(Irp, FspFsvolWriteCached, 0);
|
||||||
|
|
||||||
|
/* perform oplock check */
|
||||||
|
Result = FspCheckOplock(FspFileNodeAddrOfOplock(FileNode), Irp,
|
||||||
|
(PVOID)(UINT_PTR)FspFsvolWriteCached, FspWqOplockComplete, FspWqOplockPrepare);
|
||||||
|
if (STATUS_PENDING == Result)
|
||||||
|
{
|
||||||
|
FspFileNodeRelease(FileNode, Main);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
/* check the file locks */
|
/* check the file locks */
|
||||||
if (!FsRtlCheckLockForWriteAccess(&FileNode->FileLock, Irp))
|
if (!FsRtlCheckLockForWriteAccess(&FileNode->FileLock, Irp))
|
||||||
{
|
{
|
||||||
@ -306,6 +315,18 @@ static NTSTATUS FspFsvolWriteNonCached(
|
|||||||
if (!Success)
|
if (!Success)
|
||||||
return FspWqRepostIrpWorkItem(Irp, FspFsvolWriteNonCached, 0);
|
return FspWqRepostIrpWorkItem(Irp, FspFsvolWriteNonCached, 0);
|
||||||
|
|
||||||
|
/* perform oplock check */
|
||||||
|
if (!PagingIo)
|
||||||
|
{
|
||||||
|
Result = FspCheckOplock(FspFileNodeAddrOfOplock(FileNode), Irp,
|
||||||
|
(PVOID)(UINT_PTR)FspFsvolWriteNonCached, FspWqOplockComplete, FspWqOplockPrepare);
|
||||||
|
if (STATUS_PENDING == Result)
|
||||||
|
{
|
||||||
|
FspFileNodeRelease(FileNode, Full);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* check the file locks */
|
/* check the file locks */
|
||||||
if (!PagingIo && !FsRtlCheckLockForWriteAccess(&FileNode->FileLock, Irp))
|
if (!PagingIo && !FsRtlCheckLockForWriteAccess(&FileNode->FileLock, Irp))
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user