[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:
parent
8d52181a3e
commit
517db12d34
1 changed files with 11 additions and 0 deletions
|
|
@ -1550,6 +1550,17 @@ NTSTATUS nfs41_downcall(
|
||||||
ExAcquireFastMutex(&cur->lock);
|
ExAcquireFastMutex(&cur->lock);
|
||||||
if (cur->state == NFS41_NOT_WAITING) {
|
if (cur->state == NFS41_NOT_WAITING) {
|
||||||
print_error("[downcall] Nobody is waiting for this request!!!\n");
|
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);
|
ExReleaseFastMutex(&cur->lock);
|
||||||
nfs41_RemoveEntry(downcallLock, downcall, cur);
|
nfs41_RemoveEntry(downcallLock, downcall, cur);
|
||||||
RxFreePool(cur);
|
RxFreePool(cur);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue