From 3cc326500eb658f1c2f4d0ec1f3d824c5df727e7 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Fri, 30 Aug 2024 01:24:52 +0300 Subject: [PATCH] Fix non-working OSD_OP_READ_CHAIN_BITMAP O_o --- src/client/cluster_client.cpp | 2 +- src/osd/osd_primary_chain.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/client/cluster_client.cpp b/src/client/cluster_client.cpp index d9d12ab2..f8f2cacf 100644 --- a/src/client/cluster_client.cpp +++ b/src/client/cluster_client.cpp @@ -1077,7 +1077,7 @@ bool cluster_client_t::try_send(cluster_op_t *op, int i) pool_cfg.scheme == POOL_SCHEME_REPLICATED ? 1 : pool_cfg.pg_size-pool_cfg.parity_chunks ); uint64_t meta_rev = 0; - if (op->opcode != OSD_OP_READ_BITMAP && op->opcode != OSD_OP_READ_CHAIN_BITMAP && op->opcode != OSD_OP_DELETE) + if (op->opcode != OSD_OP_READ_BITMAP && op->opcode != OSD_OP_DELETE) { auto ino_it = st_cli.inode_config.find(op->inode); if (ino_it != st_cli.inode_config.end()) diff --git a/src/osd/osd_primary_chain.cpp b/src/osd/osd_primary_chain.cpp index ac381775..ba6321bd 100644 --- a/src/osd/osd_primary_chain.cpp +++ b/src/osd/osd_primary_chain.cpp @@ -336,8 +336,8 @@ std::vector osd_t::collect_chained_read_requests(osd_op_t *cur for (int chain_pos = 0; chain_pos < op_data->chain_size; chain_pos++) { uint8_t *part_bitmap = ((uint8_t*)op_data->snapshot_bitmaps) + chain_pos*stripe_count*clean_entry_bitmap_size; - int start = (cur_op->req.rw.offset - op_data->oid.stripe)/bs_bitmap_granularity; - int end = start + cur_op->req.rw.len/bs_bitmap_granularity; + int start = !cur_op->req.rw.len ? 0 : (cur_op->req.rw.offset - op_data->oid.stripe)/bs_bitmap_granularity; + int end = !cur_op->req.rw.len ? op_data->pg_data_size*clean_entry_bitmap_size : start + cur_op->req.rw.len/bs_bitmap_granularity; // Skip unneeded part in the beginning while (start < end && ( ((global_bitmap[start>>3] >> (start&7)) & 1) ||