Mark in-memory data reads as SKIP_CSUM

This commit is contained in:
Vitaliy Filippov
2025-11-23 19:08:24 +03:00
parent b14fbbf5cc
commit 915be747d6
2 changed files with 10 additions and 6 deletions
+2 -2
View File
@@ -629,8 +629,8 @@ bool journal_flusher_co::read_buffered(int wait_base)
}
for (i = 0; i < read_vec.size(); i++)
{
if (read_vec[i].copy_flags == COPY_BUF_JOURNAL && !bs->dsk.inmemory_journal ||
(read_vec[i].copy_flags & COPY_BUF_DATA) && !(read_vec[i].copy_flags & COPY_BUF_COALESCED))
if (!(read_vec[i].copy_flags & COPY_BUF_COALESCED) &&
((read_vec[i].copy_flags & COPY_BUF_JOURNAL) && !bs->dsk.inmemory_journal || (read_vec[i].copy_flags & COPY_BUF_DATA)))
{
await_sqe(0);
auto & vec = read_vec[i];
+8 -4
View File
@@ -79,15 +79,19 @@ int blockstore_impl_t::fulfill_read(blockstore_op_t *op)
{
for (auto & vec: PRIV(op)->read_vec)
{
if (vec.copy_flags == COPY_BUF_ZERO)
if (vec.copy_flags & (COPY_BUF_COALESCED|COPY_BUF_CSUM_FILL))
{
// This buffer references another one
}
else if (vec.copy_flags == COPY_BUF_ZERO)
{
memset(op->buf + vec.offset - op->offset, 0, vec.len);
}
else if (vec.copy_flags == COPY_BUF_JOURNAL && dsk.inmemory_journal)
else if ((vec.copy_flags & COPY_BUF_JOURNAL) && dsk.inmemory_journal)
{
memcpy(op->buf + vec.offset - op->offset, buffer_area + vec.disk_offset, vec.len);
}
else if (!(vec.copy_flags & COPY_BUF_COALESCED))
else
{
BS_SUBMIT_GET_SQE(sqe, data);
data->iov = (struct iovec){ vec.buf ? vec.buf : (op->buf + vec.offset - op->offset), (size_t)vec.disk_len };
@@ -178,7 +182,7 @@ uint32_t blockstore_impl_t::prepare_read_simple(std::vector<copy_buffer_t> & rea
{
// read buffered data from memory
read_vec.insert(read_vec.begin() + (pos++), (copy_buffer_t){
.copy_flags = COPY_BUF_JOURNAL,
.copy_flags = COPY_BUF_JOURNAL | COPY_BUF_SKIP_CSUM,
.offset = start,
.len = end-start,
.disk_offset = wr->location + start - wr->offset,