Author: cgutman
Date: Wed Dec 7 09:49:49 2011
New Revision: 54605
URL:
http://svn.reactos.org/svn/reactos?rev=54605&view=rev
Log:
[NTOSKRNL]
- Optimize the LRU segment selection a bit
Modified:
trunk/reactos/ntoskrnl/cc/view.c
Modified: trunk/reactos/ntoskrnl/cc/view.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/cc/view.c?rev=546…
==============================================================================
--- trunk/reactos/ntoskrnl/cc/view.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/cc/view.c [iso-8859-1] Wed Dec 7 09:49:49 2011
@@ -430,8 +430,6 @@
InsertTailList(&DirtySegmentListHead,
&CacheSeg->DirtySegmentListEntry);
DirtyPageCount += Bcb->CacheSegmentSize / PAGE_SIZE;
}
- RemoveEntryList(&CacheSeg->CacheSegmentLRUListEntry);
- InsertTailList(&CacheSegmentLRUListHead,
&CacheSeg->CacheSegmentLRUListEntry);
if (Mapped)
{
@@ -517,6 +515,13 @@
KeReleaseSpinLock(&Bcb->BcbLock, oldIrql);
}
+ KeAcquireGuardedMutex(&ViewLock);
+
+ /* Move to the tail of the LRU list */
+ RemoveEntryList(&CacheSeg->CacheSegmentLRUListEntry);
+ InsertTailList(&CacheSegmentLRUListHead,
&CacheSeg->CacheSegmentLRUListEntry);
+
+ KeReleaseGuardedMutex(&ViewLock);
CacheSeg->Dirty = TRUE;
ExReleasePushLock(&CacheSeg->Lock);
@@ -770,6 +775,14 @@
current = CcRosLookupCacheSegment(Bcb, CurrentOffset);
if (current != NULL)
{
+ KeAcquireGuardedMutex(&ViewLock);
+
+ /* Move to tail of LRU list */
+ RemoveEntryList(¤t->CacheSegmentLRUListEntry);
+ InsertTailList(&CacheSegmentLRUListHead,
¤t->CacheSegmentLRUListEntry);
+
+ KeReleaseGuardedMutex(&ViewLock);
+
CacheSegList[i] = current;
}
else
@@ -829,6 +842,15 @@
return Status;
}
}
+
+ KeAcquireGuardedMutex(&ViewLock);
+
+ /* Move to the tail of the LRU list */
+ RemoveEntryList(¤t->CacheSegmentLRUListEntry);
+ InsertTailList(&CacheSegmentLRUListHead,
¤t->CacheSegmentLRUListEntry);
+
+ KeReleaseGuardedMutex(&ViewLock);
+
/*
* Return information about the segment to the caller.
*/