From 6ba6e1685127bf085ff37ff3c64acc93eaec95f8 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Fri, 11 Nov 2016 17:06:19 -0800 Subject: [PATCH] sys: create: oplocks: WIP --- src/sys/create.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/sys/create.c b/src/sys/create.c index def49c60..4fd86e0c 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -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(