Index: view.c =================================================================== --- ntoskrnl/cc/view.c (revision 75735) +++ ntoskrnl/cc/view.c (working copy) @@ -580,8 +580,10 @@ ULONG i; NTSTATUS Status; ULONG_PTR NumberOfPages; + ULONG Trimmed = FALSE;; /* Create a memory area. */ +Retry: MmLockAddressSpace(MmGetKernelAddressSpace()); Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), 0, // nothing checks for VACB mareas, so set to 0 @@ -594,6 +596,16 @@ MmUnlockAddressSpace(MmGetKernelAddressSpace()); if (!NT_SUCCESS(Status)) { + if (Status == STATUS_NO_MEMORY && !Trimmed) + { + CcRosTrimCache(1, 0, &NumberOfPages); + Trimmed = TRUE; + if (NumberOfPages) + { + DPRINT1("CcRosMapVacb: trimmed %lx pages, retrying\n", NumberOfPages); + goto Retry; + } + } DPRINT1("MmCreateMemoryArea failed with %lx for VACB %p\n", Status, Vacb); return Status; }