mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 16:12:44 +00:00 
			
		
		
		
	Kernel: Update block cache on write.
If a block is present in the cache, just overwrite the cached block.
This commit is contained in:
		
							parent
							
								
									26230c0647
								
							
						
					
					
						commit
						14c0f18de9
					
				
					 1 changed files with 14 additions and 0 deletions
				
			
		|  | @ -60,6 +60,12 @@ bool DiskBackedFS::write_block(unsigned index, const ByteBuffer& data) | |||
|     kprintf("DiskBackedFileSystem::write_block %u, size=%u\n", index, data.size()); | ||||
| #endif | ||||
|     ASSERT(data.size() == block_size()); | ||||
| 
 | ||||
|     { | ||||
|         LOCKER(block_cache().lock()); | ||||
|         if (auto* cached_block = block_cache().resource().get({ fsid(), index })) | ||||
|             cached_block->m_buffer = data; | ||||
|     } | ||||
|     DiskOffset base_offset = static_cast<DiskOffset>(index) * static_cast<DiskOffset>(block_size()); | ||||
|     return device().write(base_offset, block_size(), data.pointer()); | ||||
| } | ||||
|  | @ -69,6 +75,14 @@ bool DiskBackedFS::write_blocks(unsigned index, unsigned count, const ByteBuffer | |||
| #ifdef DBFS_DEBUG | ||||
|     kprintf("DiskBackedFileSystem::write_blocks %u x%u\n", index, count); | ||||
| #endif | ||||
|     // FIXME: Maybe reorder this so we send out the write commands before updating cache?
 | ||||
|     { | ||||
|         LOCKER(block_cache().lock()); | ||||
|         for (unsigned i = 0; i < count; ++i) { | ||||
|             if (auto* cached_block = block_cache().resource().get({ fsid(), index + i })) | ||||
|                 cached_block->m_buffer = data.slice(i * block_size(), block_size()); | ||||
|         } | ||||
|     } | ||||
|     DiskOffset base_offset = static_cast<DiskOffset>(index) * static_cast<DiskOffset>(block_size()); | ||||
|     return device().write(base_offset, count * block_size(), data.pointer()); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling