From 1e372d32a033dfae1884d04391cfb81490c1c55b Mon Sep 17 00:00:00 2001 From: Aravind Ramesh Date: Tue, 30 Aug 2022 17:03:27 +0530 Subject: [PATCH] crimson/block: fix the device size calculation. In BlockSegmentManager, super block is updated with device size. But a small amount of device capacity is reserved to store the super block information and other tracking information. Number of segments is calculated after discounting super block size and tracking information size. This creates a mismatch with the actual available size versus actual number of segments. Update the available size after considering the reserved device capacity and the number of segments and segment size. Signed-off-by: Aravind Ramesh --- src/crimson/os/seastore/segment_manager/block.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/crimson/os/seastore/segment_manager/block.cc b/src/crimson/os/seastore/segment_manager/block.cc index 7b4b004dd95e7..36be358bde684 100644 --- a/src/crimson/os/seastore/segment_manager/block.cc +++ b/src/crimson/os/seastore/segment_manager/block.cc @@ -219,11 +219,13 @@ block_sm_superblock_t make_superblock( size_t tracker_off = data.block_size; size_t first_seg_off = tracker_size + tracker_off; size_t segments = (size - first_seg_off) / config_segment_size; + size_t available_size = segments * config_segment_size; - INFO("{} disk_size={}, segment_size={}, segments={}, block_size={}, " - "tracker_off={}, first_seg_off={}", + INFO("{} disk_size={}, available_size={}, segment_size={}, segments={}, " + "block_size={}, tracker_off={}, first_seg_off={}", device_id_printer_t{device_id}, size, + available_size, config_segment_size, segments, data.block_size, @@ -231,7 +233,7 @@ block_sm_superblock_t make_superblock( first_seg_off); return block_sm_superblock_t{ - size, + available_size, config_segment_size, data.block_size, segments, -- 2.39.5