[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.
This commit is contained in:
Olga Kornievskaia 2011-12-21 16:43:55 -05:00
parent 8d52181a3e
commit 517db12d34

View file

@ -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);