mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-29 19:18:39 -05:00 
			
		
		
		
	sys: create: oplocks: WIP
This commit is contained in:
		| @@ -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( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user