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