From 4294182c1a4c25053d376a3e5aa7f0783b1897a8 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Tue, 15 Nov 2016 17:05:05 -0800 Subject: [PATCH] sys: oplock testing --- src/sys/create.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/sys/create.c b/src/sys/create.c index 85e2aaf7..7585a78f 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -1113,6 +1113,7 @@ static VOID FspFsvolCreateRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Con if (0 != ExtraFileNode) { + ASSERT(FspFileNodeIsValid(ExtraFileNode)); FspFileNodeClose(ExtraFileNode, 0, TRUE); FspFileNodeDereference(ExtraFileNode); } @@ -1165,8 +1166,11 @@ static VOID FspFsvolCreateTryOpenRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PV ASSERT(0 != FileObject); if (OplockIrp) + { + ASSERT(IO_TYPE_IRP == OplockIrp->Type); FspCheckOplockEx(FspFileNodeAddrOfOplock(FileDesc->FileNode), OplockIrp, OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK, 0, 0, 0); + } FspFsvolCreatePostClose(FileDesc); FspFileNodeClose(FileDesc->FileNode, FileObject, TRUE); @@ -1198,8 +1202,11 @@ static VOID FspFsvolCreateOverwriteRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, FspFileNodeReleaseOwner(FileDesc->FileNode, Full, Request); if (OplockIrp) + { + ASSERT(IO_TYPE_IRP == OplockIrp->Type); FspCheckOplockEx(FspFileNodeAddrOfOplock(FileDesc->FileNode), OplockIrp, OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK, 0, 0, 0); + } FspFileNodeClose(FileDesc->FileNode, FileObject, TRUE); FspFileNodeDereference(FileDesc->FileNode); @@ -1260,9 +1267,10 @@ static NTSTATUS FspFsvolCreateSharingViolationOplock( * If there is no batch or CACHE_HANDLE_LEVEL oplock we are done; * else retry in a worker thread to break the oplocks. */ - Success = !FsRtlCurrentBatchOplock(FspFileNodeAddrOfOplock(ExtraFileNode)) && + Success = DEBUGTEST(90) && + (!FsRtlCurrentBatchOplock(FspFileNodeAddrOfOplock(ExtraFileNode)) && (FlagOn(IrpSp->Parameters.Create.Options, FILE_COMPLETE_IF_OPLOCKED) || - !FsRtlCurrentOplockH(FspFileNodeAddrOfOplock(ExtraFileNode))); + !FsRtlCurrentOplockH(FspFileNodeAddrOfOplock(ExtraFileNode)))); FspFileNodeRelease(ExtraFileNode, Main);