From ff9a75a6f5c36e8ace53e61c9ba3d01b8d0e1fb2 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Sat, 30 Aug 2025 12:36:35 -0400 Subject: [PATCH] kernel/EntryCache: Always resize if needed in _AddEntryToCurrentGeneration. Otherwise, the only place we resize the table is Remove(), and if that doesn't get called (because no files are being deleted) then we will rarely, if ever, resize the table, leading to performance issues. Fixes a performance regression easily seen by running "grep -R". --- src/system/kernel/fs/EntryCache.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/fs/EntryCache.cpp b/src/system/kernel/fs/EntryCache.cpp index 70829846c1..6e6da27b4f 100644 --- a/src/system/kernel/fs/EntryCache.cpp +++ b/src/system/kernel/fs/EntryCache.cpp @@ -243,6 +243,10 @@ EntryCache::_AddEntryToCurrentGeneration(EntryCacheEntry* entry, bool move) readLocker.Unlock(); WriteLocker writeLocker(fLock); + // Resize the table if needed, no matter what. (The only other place it can + // be resized is Remove(), so this is important.) + fEntries.ResizeIfNeeded(); + if (entry->index == kEntryRemoved) { // the entry has been removed in the meantime writeLocker.Unlock(); @@ -256,8 +260,6 @@ EntryCache::_AddEntryToCurrentGeneration(EntryCacheEntry* entry, bool move) fGenerations[fCurrentGeneration].entries[index] = entry; entry->generation = fCurrentGeneration; entry->index = index; - - fEntries.ResizeIfNeeded(); return true; }