[ros-diffs] [cgutman] 56047: [NEWCC] - Don't allow a locked page to be paged out

cgutman at svn.reactos.org cgutman at svn.reactos.org
Mon Mar 5 19:15:15 UTC 2012


Author: cgutman
Date: Mon Mar  5 19:15:15 2012
New Revision: 56047

URL: http://svn.reactos.org/svn/reactos?rev=56047&view=rev
Log:
[NEWCC]
- Don't allow a locked page to be paged out

Modified:
    trunk/reactos/ntoskrnl/cache/section/swapout.c

Modified: trunk/reactos/ntoskrnl/cache/section/swapout.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/cache/section/swapout.c?rev=56047&r1=56046&r2=56047&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/cache/section/swapout.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/cache/section/swapout.c [iso-8859-1] Mon Mar  5 19:15:15 2012
@@ -113,6 +113,13 @@
 	BOOLEAN WriteZero = FALSE, WritePage = FALSE;
 	SWAPENTRY Swap = MmGetSavedSwapEntryPage(Page);
 
+    /* Bail early if the reference count isn't where we need it */
+    if (MmGetReferenceCountPage(Page) != 1)
+    {
+        DPRINT1("Cannot page out locked page %x with ref count %d\n", Page, MmGetReferenceCountPage(Page));
+        return STATUS_UNSUCCESSFUL;
+    }
+
 	MmLockSectionSegment(Segment);
 	(void)InterlockedIncrementUL(&Segment->ReferenceCount);
 
@@ -158,9 +165,6 @@
 	{
 		DPRINT("Removing page %x for real\n", Page);
 		MmSetSavedSwapEntryPage(Page, 0);
-		if (MmGetReferenceCountPage(Page) != 1) {
-			DPRINT1("ALERT: Page %x about to be evicted with ref count %d\n", Page, MmGetReferenceCountPage(Page));
-		}
 		MmReleasePageMemoryConsumer(MC_CACHE, Page);
 	}
 




More information about the Ros-diffs mailing list