From 517db12d3462629ce80972553dadf9b543575ffa Mon Sep 17 00:00:00 2001 From: Olga Kornievskaia Date: Wed, 21 Dec 2011 16:43:55 -0500 Subject: [PATCH] [driver] properly unlock mdls when nobody is waiting for the upcall. if it was read/write upcall unlock readwrite mdl. if it was a readdir upcall, unlock readdir mdl and also free it. --- sys/nfs41_driver.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sys/nfs41_driver.c b/sys/nfs41_driver.c index e9c8f4c..0ce54d7 100644 --- a/sys/nfs41_driver.c +++ b/sys/nfs41_driver.c @@ -1550,6 +1550,17 @@ NTSTATUS nfs41_downcall( ExAcquireFastMutex(&cur->lock); if (cur->state == NFS41_NOT_WAITING) { print_error("[downcall] Nobody is waiting for this request!!!\n"); + switch(cur->opcode) { + case NFS41_WRITE: + case NFS41_READ: + MmUnmapLockedPages(cur->u.ReadWrite.buf, + cur->u.ReadWrite.MdlAddress); + break; + case NFS41_DIR_QUERY: + MmUnmapLockedPages(cur->u.QueryFile.mdl_buf, + cur->u.QueryFile.mdl); + IoFreeMdl(cur->u.QueryFile.mdl); + } ExReleaseFastMutex(&cur->lock); nfs41_RemoveEntry(downcallLock, downcall, cur); RxFreePool(cur);