From 915be747d6598628f63c3c2d3dcbc910cda676a3 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sun, 31 Aug 2025 01:33:48 +0300 Subject: [PATCH] Mark in-memory data reads as SKIP_CSUM --- src/blockstore/blockstore_flush.cpp | 4 ++-- src/blockstore/blockstore_read.cpp | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/blockstore/blockstore_flush.cpp b/src/blockstore/blockstore_flush.cpp index bcd134fc..8c64e1c9 100644 --- a/src/blockstore/blockstore_flush.cpp +++ b/src/blockstore/blockstore_flush.cpp @@ -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]; diff --git a/src/blockstore/blockstore_read.cpp b/src/blockstore/blockstore_read.cpp index a466913a..4410cd55 100644 --- a/src/blockstore/blockstore_read.cpp +++ b/src/blockstore/blockstore_read.cpp @@ -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 & 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,