Mark in-memory data reads as SKIP_CSUM
This commit is contained in:
@@ -629,8 +629,8 @@ bool journal_flusher_co::read_buffered(int wait_base)
|
|||||||
}
|
}
|
||||||
for (i = 0; i < read_vec.size(); i++)
|
for (i = 0; i < read_vec.size(); i++)
|
||||||
{
|
{
|
||||||
if (read_vec[i].copy_flags == COPY_BUF_JOURNAL && !bs->dsk.inmemory_journal ||
|
if (!(read_vec[i].copy_flags & COPY_BUF_COALESCED) &&
|
||||||
(read_vec[i].copy_flags & COPY_BUF_DATA) && !(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);
|
await_sqe(0);
|
||||||
auto & vec = read_vec[i];
|
auto & vec = read_vec[i];
|
||||||
|
|||||||
@@ -79,15 +79,19 @@ int blockstore_impl_t::fulfill_read(blockstore_op_t *op)
|
|||||||
{
|
{
|
||||||
for (auto & vec: PRIV(op)->read_vec)
|
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);
|
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);
|
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);
|
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 };
|
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 buffered data from memory
|
||||||
read_vec.insert(read_vec.begin() + (pos++), (copy_buffer_t){
|
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,
|
.offset = start,
|
||||||
.len = end-start,
|
.len = end-start,
|
||||||
.disk_offset = wr->location + start - wr->offset,
|
.disk_offset = wr->location + start - wr->offset,
|
||||||
|
|||||||
Reference in New Issue
Block a user