From 18f71b059a60796b4064ca110464d9b2a66c7278 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Tue, 2 Feb 2021 23:45:05 +0300 Subject: [PATCH] Fix part bitmap addresses --- src/cluster_client.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/cluster_client.cpp b/src/cluster_client.cpp index b47a41e13..7d3125cb9 100644 --- a/src/cluster_client.cpp +++ b/src/cluster_client.cpp @@ -887,8 +887,12 @@ void cluster_client_t::handle_op_part(cluster_op_part_t *part) if (op->opcode == OSD_OP_READ) { // Copy (OR) bitmap + auto & pool_cfg = st_cli.pool_config[INODE_POOL(op->cur_inode)]; + uint32_t pg_block_size = bs_block_size * ( + pool_cfg.scheme == POOL_SCHEME_REPLICATED ? 1 : pool_cfg.pg_size-pool_cfg.parity_chunks + ); uint32_t object_offset = (part->op.req.rw.offset - op->offset) / bs_bitmap_granularity; - uint32_t part_offset = part->op.req.rw.offset / bs_bitmap_granularity; + uint32_t part_offset = (part->op.req.rw.offset % pg_block_size) / bs_bitmap_granularity; uint32_t part_len = part->op.req.rw.len / bs_bitmap_granularity; if (!(object_offset & 0x7) && !(part_offset & 0x7) && (part_len >= 8)) {