#include "fs/StorageCache.h" #include "Log.h" #include static LinkedList g_storage_caches; Result StorageCache::fetch_entry(u64 block) { { CacheEntry* entry = m_cache_entries.try_get_ref(block); if (entry && !entry->buffer.is_empty()) return entry; } CacheEntry entry {}; TRY(m_cache_entries.try_set(block, move(entry))); #ifdef CACHE_DEBUG kdbgln("cache: Created new cache entry for block %lu", block); #endif return m_cache_entries.try_get_ref(block); } void StorageCache::clear() { ScopedKMutexLock<100> lock(m_mutex); m_cache_entries.clear(); } StorageCache::StorageCache() { g_storage_caches.append(this); } StorageCache::~StorageCache() { g_storage_caches.remove(this); } void StorageCache::clear_caches() { for (auto* cache : g_storage_caches) { cache->clear(); } }