Maintain count of used blocks in the filesystem cache.
This commit is contained in:
parent
36d2dcb745
commit
6971cc59b0
|
@ -85,6 +85,8 @@ BlockCache::BlockCache()
|
||||||
areas_length = 0;
|
areas_length = 0;
|
||||||
blocks_per_area = 1024UL;
|
blocks_per_area = 1024UL;
|
||||||
unused_block_count = 0;
|
unused_block_count = 0;
|
||||||
|
blocks_used = 0;
|
||||||
|
blocks_allocated = 0;
|
||||||
mru_block = NULL;
|
mru_block = NULL;
|
||||||
lru_block = NULL;
|
lru_block = NULL;
|
||||||
unused_block = NULL;
|
unused_block = NULL;
|
||||||
|
@ -110,6 +112,7 @@ BlockCacheBlock* BlockCache::AcquireBlock()
|
||||||
unused_block->prev_block = NULL;
|
unused_block->prev_block = NULL;
|
||||||
ret->information |= BCACHE_USED;
|
ret->information |= BCACHE_USED;
|
||||||
LinkBlock(ret);
|
LinkBlock(ret);
|
||||||
|
blocks_used++;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,8 +121,10 @@ void BlockCache::ReleaseBlock(BlockCacheBlock* block)
|
||||||
ScopedLock lock(&bcache_mutex);
|
ScopedLock lock(&bcache_mutex);
|
||||||
assert(block->information & BCACHE_PRESENT);
|
assert(block->information & BCACHE_PRESENT);
|
||||||
assert(block->information & BCACHE_USED);
|
assert(block->information & BCACHE_USED);
|
||||||
|
blocks_used--;
|
||||||
if ( blocks_per_area < unused_block_count )
|
if ( blocks_per_area < unused_block_count )
|
||||||
{
|
{
|
||||||
|
blocks_allocated--;
|
||||||
uint8_t* block_data = BlockDataUnlocked(block);
|
uint8_t* block_data = BlockDataUnlocked(block);
|
||||||
addr_t block_data_addr = Memory::Unmap((addr_t) block_data);
|
addr_t block_data_addr = Memory::Unmap((addr_t) block_data);
|
||||||
Page::Put(block_data_addr);
|
Page::Put(block_data_addr);
|
||||||
|
@ -212,8 +217,8 @@ bool BlockCache::AddArea()
|
||||||
goto cleanup_addralloc;
|
goto cleanup_addralloc;
|
||||||
if ( !Memory::MapRange(area->addralloc.from, area->addralloc.size, prot) )
|
if ( !Memory::MapRange(area->addralloc.from, area->addralloc.size, prot) )
|
||||||
goto cleanup_blocks;
|
goto cleanup_blocks;
|
||||||
|
|
||||||
Memory::Flush();
|
Memory::Flush();
|
||||||
|
blocks_allocated += blocks_per_area;
|
||||||
|
|
||||||
// Add all our new blocks into the unused block linked list.
|
// Add all our new blocks into the unused block linked list.
|
||||||
for ( size_t i = blocks_per_area; i != 0; i-- )
|
for ( size_t i = blocks_per_area; i != 0; i-- )
|
||||||
|
|
|
@ -72,6 +72,8 @@ private:
|
||||||
size_t areas_length;
|
size_t areas_length;
|
||||||
size_t blocks_per_area;
|
size_t blocks_per_area;
|
||||||
size_t unused_block_count;
|
size_t unused_block_count;
|
||||||
|
size_t blocks_used;
|
||||||
|
size_t blocks_allocated;
|
||||||
BlockCacheBlock* mru_block;
|
BlockCacheBlock* mru_block;
|
||||||
BlockCacheBlock* lru_block;
|
BlockCacheBlock* lru_block;
|
||||||
BlockCacheBlock* unused_block;
|
BlockCacheBlock* unused_block;
|
||||||
|
|
Loading…
Reference in New Issue