diff --git a/headers/private/kernel/block_cache.h b/headers/private/kernel/block_cache.h index 321a549087..a15a0d8447 100644 --- a/headers/private/kernel/block_cache.h +++ b/headers/private/kernel/block_cache.h @@ -14,9 +14,10 @@ extern "C" { #endif extern status_t block_cache_init(void); +extern size_t block_cache_used_memory(); #ifdef __cplusplus } #endif -#endif /* _KRENEL_BLOCK_CACHE_H */ +#endif /* _KERNEL_BLOCK_CACHE_H */ diff --git a/src/system/kernel/cache/block_cache.cpp b/src/system/kernel/cache/block_cache.cpp index d882a55492..bc089ff6d3 100644 --- a/src/system/kernel/cache/block_cache.cpp +++ b/src/system/kernel/cache/block_cache.cpp @@ -1807,6 +1807,27 @@ block_cache_init(void) } +extern "C" size_t +block_cache_used_memory() +{ + size_t usedMemory = 0; + + MutexLocker _(sCachesLock); + + DoublyLinkedList::Iterator it = sCaches.GetIterator(); + while (block_cache* cache = it.Next()) { + if (cache == (block_cache*)&sMarkCache) + continue; + + size_t cacheUsedMemory; + object_cache_get_usage(cache->buffer_cache, &cacheUsedMemory); + usedMemory += cacheUsedMemory; + } + + return usedMemory; +} + + // #pragma mark - public transaction API