|
|
|
@ -2,6 +2,7 @@
|
|
|
|
|
// License: VNPL-1.1 (see README.md for details)
|
|
|
|
|
|
|
|
|
|
#include "osd_primary.h"
|
|
|
|
|
#include "allocator.h"
|
|
|
|
|
|
|
|
|
|
// read: read directly or read paired stripe(s), reconstruct, return
|
|
|
|
|
// write: read paired stripe(s), reconstruct, modify, calculate parity, write
|
|
|
|
@ -51,7 +52,8 @@ bool osd_t::prepare_primary_rw(osd_op_t *cur_op)
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
osd_primary_op_data_t *op_data = (osd_primary_op_data_t*)calloc_or_die(
|
|
|
|
|
1, sizeof(osd_primary_op_data_t) + sizeof(osd_rmw_stripe_t) * (pool_cfg.scheme == POOL_SCHEME_REPLICATED ? 1 : pg_it->second.pg_size)
|
|
|
|
|
1, sizeof(osd_primary_op_data_t) + entry_attr_size +
|
|
|
|
|
sizeof(osd_rmw_stripe_t) * (pool_cfg.scheme == POOL_SCHEME_REPLICATED ? 1 : pg_it->second.pg_size)
|
|
|
|
|
);
|
|
|
|
|
op_data->pg_num = pg_num;
|
|
|
|
|
op_data->oid = oid;
|
|
|
|
@ -115,7 +117,7 @@ void osd_t::continue_primary_read(osd_op_t *cur_op)
|
|
|
|
|
if (pg.state == PG_ACTIVE || op_data->scheme == POOL_SCHEME_REPLICATED)
|
|
|
|
|
{
|
|
|
|
|
// Fast happy-path
|
|
|
|
|
cur_op->buf = alloc_read_buffer(op_data->stripes, op_data->pg_data_size, 0, 0);
|
|
|
|
|
cur_op->buf = alloc_read_buffer(op_data->stripes, op_data->pg_data_size, 0, entry_attr_size);
|
|
|
|
|
submit_primary_subops(SUBMIT_READ, op_data->target_ver,
|
|
|
|
|
(op_data->scheme == POOL_SCHEME_REPLICATED ? pg.pg_size : op_data->pg_data_size), pg.cur_set.data(), cur_op);
|
|
|
|
|
op_data->st = 1;
|
|
|
|
@ -133,7 +135,7 @@ void osd_t::continue_primary_read(osd_op_t *cur_op)
|
|
|
|
|
op_data->pg_size = pg.pg_size;
|
|
|
|
|
op_data->scheme = pg.scheme;
|
|
|
|
|
op_data->degraded = 1;
|
|
|
|
|
cur_op->buf = alloc_read_buffer(op_data->stripes, pg.pg_size, 0, 0);
|
|
|
|
|
cur_op->buf = alloc_read_buffer(op_data->stripes, pg.pg_size, 0, entry_attr_size);
|
|
|
|
|
submit_primary_subops(SUBMIT_READ, op_data->target_ver, pg.pg_size, cur_set, cur_op);
|
|
|
|
|
op_data->st = 1;
|
|
|
|
|
}
|
|
|
|
@ -152,11 +154,11 @@ resume_2:
|
|
|
|
|
osd_rmw_stripe_t *stripes = op_data->stripes;
|
|
|
|
|
if (op_data->scheme == POOL_SCHEME_XOR)
|
|
|
|
|
{
|
|
|
|
|
reconstruct_stripes_xor(stripes, op_data->pg_size, 0);
|
|
|
|
|
reconstruct_stripes_xor(stripes, op_data->pg_size, entry_attr_size);
|
|
|
|
|
}
|
|
|
|
|
else if (op_data->scheme == POOL_SCHEME_JERASURE)
|
|
|
|
|
{
|
|
|
|
|
reconstruct_stripes_jerasure(stripes, op_data->pg_size, op_data->pg_data_size, 0);
|
|
|
|
|
reconstruct_stripes_jerasure(stripes, op_data->pg_size, op_data->pg_data_size, entry_attr_size);
|
|
|
|
|
}
|
|
|
|
|
for (int role = 0; role < op_data->pg_size; role++)
|
|
|
|
|
{
|
|
|
|
|