Fix snapshotted bitmap reads not working in EC pools (fix #92)

This commit is contained in:
Vitaliy Filippov
2025-09-24 02:33:04 +03:00
parent 1e1f395947
commit cff08d2c72
4 changed files with 92 additions and 23 deletions
+15 -3
View File
@@ -17,10 +17,22 @@ void osd_t::continue_chained_read(osd_op_t *cur_op)
else if (op_data->st == 4)
goto resume_4;
cur_op->reply.rw.bitmap_len = 0;
for (int role = 0; role < (pg ? pg->pg_data_size : 1); role++)
if (cur_op->req.rw.len == 0)
{
op_data->stripes[role].read_start = op_data->stripes[role].req_start;
op_data->stripes[role].read_end = op_data->stripes[role].req_end;
// len=0 => bitmap read
for (int role = 0; role < (pg ? pg->pg_data_size : 1); role++)
{
op_data->stripes[role].read_start = 0;
op_data->stripes[role].read_end = UINT32_MAX;
}
}
else
{
for (int role = 0; role < (pg ? pg->pg_data_size : 1); role++)
{
op_data->stripes[role].read_start = op_data->stripes[role].req_start;
op_data->stripes[role].read_end = op_data->stripes[role].req_end;
}
}
resume_1:
resume_2: