From 2d9b1b80fa431de3bc4307fe203ddcf9029a11ac Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Fri, 16 Dec 2016 16:31:00 -0800 Subject: [PATCH] sys: lockctl: fix hang uncovered by IFSTEST --- src/sys/file.c | 4 ---- src/sys/lockctl.c | 6 ++++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/sys/file.c b/src/sys/file.c index f2055a84..fbbe911d 100644 --- a/src/sys/file.c +++ b/src/sys/file.c @@ -1782,7 +1782,6 @@ NTSTATUS FspFileNodeProcessLockIrp(FSP_FILE_NODE *FileNode, PIRP Irp) PAGED_CODE(); IoMarkIrpPending(Irp); - FspFileNodeSetOwnerF(FileNode, FspIrpFlags(Irp), Irp); try { @@ -1803,11 +1802,8 @@ static NTSTATUS FspFileNodeCompleteLockIrp(PVOID Context, PIRP Irp) { PAGED_CODE(); - FSP_FILE_NODE *FileNode = Context; NTSTATUS Result = Irp->IoStatus.Status; - FspFileNodeReleaseOwnerF(FileNode, FspIrpFlags(Irp), Irp); - DEBUGLOGIRP(Irp, Result); FspIopCompleteIrp(Irp, Result); diff --git a/src/sys/lockctl.c b/src/sys/lockctl.c index ba466691..80801cbb 100644 --- a/src/sys/lockctl.c +++ b/src/sys/lockctl.c @@ -61,8 +61,14 @@ static NTSTATUS FspFsvolLockControlRetry( return Result; } + ULONG IrpFlags = FspIrpFlags(Irp); + IoSetTopLevelIrp(0); + /* let the FSRTL package handle this one! */ Result = FspFileNodeProcessLockIrp(FileNode, Irp); + ASSERT(STATUS_PENDING == Result); + + FspFileNodeReleaseF(FileNode, IrpFlags); return Result; }