MCPcopy Create free account
hub / github.com/LemonOSProject/LemonOS / ReadBlockCached

Method ReadBlockCached

Kernel/src/fs/ext2.cpp:389–415  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

387 }
388
389 int Ext2Volume::ReadBlockCached(uint32_t block, void* buffer){
390 if(block > super.blockCount)
391 return 1;
392
393 #ifndef EXT2_NO_CACHE
394 uint8_t* cachedBlock;
395 if((cachedBlock = blockCache.get(block))){
396 memcpy(buffer, cachedBlock, blocksize);
397 } else {
398 cachedBlock = (uint8_t*)kmalloc(blocksize);
399 if(int e = part->ReadBlock(BlockToLBA(block), blocksize, cachedBlock)){
400 Log::Error("[Ext2] Disk error (%d) reading block %d (blocksize: %d)", e, block, blocksize);
401 return e;
402 }
403 blockCache.insert(block, cachedBlock);
404 blockCacheMemoryUsage += blocksize;
405
406 memcpy(buffer, cachedBlock, blocksize);
407 }
408 #else
409 if(int e = part->ReadBlock(BlockToLBA(block), blocksize, buffer)){
410 Log::Error("[Ext2] Disk error (%d) reading block %d (blocksize: %d)", e, block, blocksize);
411 return e;
412 }
413 #endif
414 return 0;
415 }
416
417 int Ext2Volume::WriteBlockCached(uint32_t block, void* buffer){
418 if(block > super.blockCount)

Callers

nothing calls this directly

Calls 6

memcpyFunction · 0.85
kmallocFunction · 0.85
ErrorFunction · 0.85
getMethod · 0.45
ReadBlockMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected