From d75e9f7ee6503a72db6df8998de31c6fceacf6b9 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Thu, 8 May 2025 21:47:06 +0100 Subject: [PATCH] sys: oplock fix --- src/sys/cleanup.c | 3 +-- src/sys/close.c | 3 +++ src/sys/fsctl.c | 3 --- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/sys/cleanup.c b/src/sys/cleanup.c index 31a5bbe1..c3c8f4ea 100644 --- a/src/sys/cleanup.c +++ b/src/sys/cleanup.c @@ -242,8 +242,7 @@ static VOID FspFsvolCleanupRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Co FspFileNodeReleaseOwner(FileNode, Pgio, Request); FspFileNodeCleanupComplete(FileNode, FileObject, !!Request->Req.Cleanup.Delete); - if (!FileNode->IsDirectory) - FspFileNodeOplockCheck(FileNode, Irp); + FspFileNodeOplockCheck(FileNode, Irp); SetFlag(FileObject->Flags, FO_CLEANUP_COMPLETE); MainFileHandle = FileDesc->MainFileHandle; diff --git a/src/sys/close.c b/src/sys/close.c index b4275814..1963823b 100644 --- a/src/sys/close.c +++ b/src/sys/close.c @@ -75,6 +75,9 @@ static NTSTATUS FspFsvolClose( ASSERT(FileNode == FileDesc->FileNode); + if (!FlagOn(FileObject->Flags, FO_CLEANUP_COMPLETE)) + FspFileNodeOplockCheck(FileNode, Irp); + /* create the user-mode file system request; MustSucceed because IRP_MJ_CLOSE cannot fail */ FspIopCreateRequestMustSucceed(0, 0, 0, &Request); Request->Kind = FspFsctlTransactCloseKind; diff --git a/src/sys/fsctl.c b/src/sys/fsctl.c index 6344dab0..24b9b475 100644 --- a/src/sys/fsctl.c +++ b/src/sys/fsctl.c @@ -441,9 +441,6 @@ static NTSTATUS FspFsvolFileSystemControlOplock( ULONG OplockCount; FSP_FSVOL_FILESYSTEM_CONTROL_OPLOCK_COMPLETION_CONTEXT *CompletionContext; - if (FileNode->IsDirectory) - return STATUS_INVALID_PARAMETER; - /* * As per FastFat: *