From eb919ba88810cfc8754cfeea29a4561bca889dba Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 7 Dec 2011 09:49:49 +0000 Subject: [PATCH] [NTOSKRNL] - Optimize the LRU segment selection a bit svn path=/trunk/; revision=54605 --- reactos/ntoskrnl/cc/view.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/cc/view.c b/reactos/ntoskrnl/cc/view.c index e93e9146ac3..307961700f9 100644 --- a/reactos/ntoskrnl/cc/view.c +++ b/reactos/ntoskrnl/cc/view.c @@ -430,8 +430,6 @@ CcRosReleaseCacheSegment(PBCB Bcb, InsertTailList(&DirtySegmentListHead, &CacheSeg->DirtySegmentListEntry); DirtyPageCount += Bcb->CacheSegmentSize / PAGE_SIZE; } - RemoveEntryList(&CacheSeg->CacheSegmentLRUListEntry); - InsertTailList(&CacheSegmentLRUListHead, &CacheSeg->CacheSegmentLRUListEntry); if (Mapped) { @@ -517,6 +515,13 @@ CcRosMarkDirtyCacheSegment(PBCB Bcb, ULONG FileOffset) 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 @@ CcRosGetCacheSegmentChain(PBCB Bcb, 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 @@ CcRosGetCacheSegment(PBCB Bcb, 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. */ -- 2.17.1