From 25ae54223a3fccbebe776a21ed61e1a5eb941ba4 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 13 Apr 2022 13:53:04 +0200 Subject: [PATCH] os/part_block: simplify split block-I/O handling Issue #4474 --- repos/os/src/server/part_block/main.cc | 11 ++++------- repos/os/src/server/part_block/partition_table.h | 9 ++++----- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/repos/os/src/server/part_block/main.cc b/repos/os/src/server/part_block/main.cc index 0888ed3998..8b059750ab 100644 --- a/repos/os/src/server/part_block/main.cc +++ b/repos/os/src/server/part_block/main.cc @@ -396,19 +396,16 @@ class Block::Main : Rpc_object>, ** Update_jobs_policy ** ************************/ - void consume_read_result(Job &job, seek_off_t, - char const *src, size_t length) + void consume_read_result(Job &job, off_t offset, char const *src, size_t length) { if (!_sessions[job.number]) return; - memcpy((void *)(job.addr + job.offset), src, length); - job.offset += length; + memcpy((void *)(job.addr + offset), src, length); } - void produce_write_content(Job &job, seek_off_t, char *dst, size_t length) + void produce_write_content(Job &job, off_t offset, char *dst, size_t length) { - memcpy(dst, (void *)(job.addr + job.offset), length); - job.offset += length; + memcpy(dst, (void *)(job.addr + offset), length); } void completed(Job &job, bool success) diff --git a/repos/os/src/server/part_block/partition_table.h b/repos/os/src/server/part_block/partition_table.h index d41f3c2f8c..a9896c2e01 100644 --- a/repos/os/src/server/part_block/partition_table.h +++ b/repos/os/src/server/part_block/partition_table.h @@ -49,7 +49,6 @@ struct Block::Job : public Block_connection::Job Request request; addr_t const addr; /* target payload address */ bool completed { false }; - off_t offset { 0 }; /* current offset in payload for partial jobs */ Job(Block_connection &connection, Operation operation, @@ -128,15 +127,15 @@ struct Block::Partition_table : Interface _data.block.update_jobs(*this); } - void consume_read_result(Block_connection::Job &, seek_off_t, + void consume_read_result(Block_connection::Job &, off_t offset, char const *src, size_t length) { _buffer = _data.alloc.alloc(length); - memcpy(_buffer, src, length); - _size = length; + memcpy((char *)_buffer + offset, src, length); + _size += length; } - void produce_write_content(Block_connection::Job &, seek_off_t, + void produce_write_content(Block_connection::Job &, off_t, char *, size_t) { } void completed(Block_connection::Job &, bool success)