diff --git a/kernel/fcache.cpp b/kernel/fcache.cpp index d4bb171a..0a07f7ed 100644 --- a/kernel/fcache.cpp +++ b/kernel/fcache.cpp @@ -85,6 +85,8 @@ BlockCache::BlockCache() areas_length = 0; blocks_per_area = 1024UL; unused_block_count = 0; + blocks_used = 0; + blocks_allocated = 0; mru_block = NULL; lru_block = NULL; unused_block = NULL; @@ -110,6 +112,7 @@ BlockCacheBlock* BlockCache::AcquireBlock() unused_block->prev_block = NULL; ret->information |= BCACHE_USED; LinkBlock(ret); + blocks_used++; return ret; } @@ -118,8 +121,10 @@ void BlockCache::ReleaseBlock(BlockCacheBlock* block) ScopedLock lock(&bcache_mutex); assert(block->information & BCACHE_PRESENT); assert(block->information & BCACHE_USED); + blocks_used--; if ( blocks_per_area < unused_block_count ) { + blocks_allocated--; uint8_t* block_data = BlockDataUnlocked(block); addr_t block_data_addr = Memory::Unmap((addr_t) block_data); Page::Put(block_data_addr); @@ -212,8 +217,8 @@ bool BlockCache::AddArea() goto cleanup_addralloc; if ( !Memory::MapRange(area->addralloc.from, area->addralloc.size, prot) ) goto cleanup_blocks; - Memory::Flush(); + blocks_allocated += blocks_per_area; // Add all our new blocks into the unused block linked list. for ( size_t i = blocks_per_area; i != 0; i-- ) diff --git a/kernel/include/sortix/kernel/fcache.h b/kernel/include/sortix/kernel/fcache.h index 1d562282..3093c13e 100644 --- a/kernel/include/sortix/kernel/fcache.h +++ b/kernel/include/sortix/kernel/fcache.h @@ -72,6 +72,8 @@ private: size_t areas_length; size_t blocks_per_area; size_t unused_block_count; + size_t blocks_used; + size_t blocks_allocated; BlockCacheBlock* mru_block; BlockCacheBlock* lru_block; BlockCacheBlock* unused_block;