mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys: create: oplocks: WIP
This commit is contained in:
parent
d33089331b
commit
6ba6e16851
@ -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(
|
||||
|
Loading…
x
Reference in New Issue
Block a user