sys: create: oplocks: WIP

This commit is contained in:
Bill Zissimopoulos 2016-11-11 17:06:19 -08:00
parent d33089331b
commit 6ba6e16851

View File

@ -1335,15 +1335,19 @@ static BOOLEAN FspFsvolCreateCheckOplock(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP
OpenRequiringOplock = BooleanFlagOn(IrpSp->Parameters.Create.Options,
FILE_OPEN_REQUIRING_OPLOCK);
CheckOplock = FsRtlCurrentBatchOplock(FspFileNodeAddrOfOplock(FileNode));
if (OpenRequiringOplock || !CheckOplock)
CheckOplock = FALSE;
if (OpenRequiringOplock)
{
FspFsvolDeviceLockContextTable(FsvolDeviceObject);
OplockCount = FileNode->HandleCount;
FspFsvolDeviceUnlockContextTable(FsvolDeviceObject);
CheckOplock = CheckOplock || 1 < OplockCount;
CheckOplock = 1 < OplockCount;
}
CheckOplock = CheckOplock || FsRtlCurrentBatchOplock(FspFileNodeAddrOfOplock(FileNode));
if (CheckOplock)
{
Result = FspCheckOplock(FspFileNodeAddrOfOplock(FileNode), Irp,
@ -1389,7 +1393,7 @@ static VOID FspFsvolCreateCheckOplockComplete(
if (FspFsctlTransactOverwriteKind == Request->Kind)
FspIopRetryPrepareIrp(Irp, &Result);
else if (FspFsctlTransactReservedKind == Request->Kind)
FspIopRetryCompleteIrp(Irp, Context, &Result);
FspIopRetryCompleteIrp(Irp, FspIopIrpResponse(Irp), &Result);
}
NTSTATUS FspCreate(