- remove strip_size since it can be deduced from passed struct fec *ctx - remove nr_stripe because nr_stripe for the buffer as a whole is always fixed and there is no use case to decode a partial buffer.
Signed-off-by: Liu Yuan <[email protected]> --- dog/vdi.c | 7 ++----- include/fec.h | 3 ++- lib/fec.c | 5 +++-- sheep/recovery.c | 4 +--- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/dog/vdi.c b/dog/vdi.c index 08f154e..dc3d1f1 100644 --- a/dog/vdi.c +++ b/dog/vdi.c @@ -1556,7 +1556,6 @@ static void check_erasure_object(struct vdi_check_info *info) int dp = ec_policy_to_dp(info->copy_policy, &d, &p); struct fec *ctx = ec_init(d, dp); int miss_idx[dp], input_idx[dp]; - size_t strip_size = SD_EC_DATA_STRIPE_SIZE / d; uint64_t oid = info->oid; size_t len = get_store_objsize(info->copy_policy, oid); char *obj = xmalloc(len); @@ -1584,8 +1583,7 @@ static void check_erasure_object(struct vdi_check_info *info) uint8_t *ds[d]; for (j = 0; j < d; j++) ds[j] = info->vcw[j].buf; - ec_decode_buffer(ctx, ds, idx, obj, d + k, strip_size, - SD_EC_NR_STRIPE_PER_OBJECT); + ec_decode_buffer(ctx, ds, idx, obj, d + k); if (memcmp(obj, info->vcw[d + k].buf, len) != 0) { /* TODO repair the inconsistency */ sd_err("object %"PRIx64" is inconsistent", oid); @@ -1603,8 +1601,7 @@ static void check_erasure_object(struct vdi_check_info *info) for (i = 0; i < d; i++) ds[i] = input[i]; - ec_decode_buffer(ctx, ds, input_idx, obj, m, strip_size, - SD_EC_NR_STRIPE_PER_OBJECT); + ec_decode_buffer(ctx, ds, input_idx, obj, m); write_object_to(info->vcw[m].vnode, oid, obj, true, info->vcw[m].ec_index); fprintf(stdout, "fixed missing %"PRIx64", " diff --git a/include/fec.h b/include/fec.h index 1a61671..0297f33 100644 --- a/include/fec.h +++ b/include/fec.h @@ -63,6 +63,7 @@ #include <stdint.h> #include "util.h" +#include "sheepdog_proto.h" struct fec { unsigned long magic; @@ -197,5 +198,5 @@ static inline void ec_destroy(struct fec *ctx) } void ec_decode_buffer(struct fec *ctx, uint8_t *input[], const int in_idx[], - char *buf, int idx, size_t strip_size, int nr_stripe); + char *buf, int idx); #endif diff --git a/lib/fec.c b/lib/fec.c index 7c1c57d..7d897e4 100644 --- a/lib/fec.c +++ b/lib/fec.c @@ -683,11 +683,12 @@ out: } void ec_decode_buffer(struct fec *ctx, uint8_t *input[], const int in_idx[], - char *buf, int idx, size_t strip_size, int nr_stripe) + char *buf, int idx) { int i, j, d = ctx->d; + size_t strip_size = SD_EC_DATA_STRIPE_SIZE / d; - for (i = 0; i < nr_stripe; i++) { + for (i = 0; i < SD_EC_NR_STRIPE_PER_OBJECT; i++) { const uint8_t *in[d]; uint8_t out[strip_size]; diff --git a/sheep/recovery.c b/sheep/recovery.c index 37dde3c..39ca2b1 100644 --- a/sheep/recovery.c +++ b/sheep/recovery.c @@ -423,9 +423,7 @@ static void *rebuild_erasure_object(uint64_t oid, uint8_t idx, } /* Rebuild the lost replica */ - ec_decode_buffer(ctx, bufs, idxs, lost, idx, - SD_EC_DATA_STRIPE_SIZE / ed, - SD_EC_NR_STRIPE_PER_OBJECT); + ec_decode_buffer(ctx, bufs, idxs, lost, idx); out: ec_destroy(ctx); for (i = 0; i < ed; i++) -- 1.7.9.5 -- sheepdog mailing list [email protected] http://lists.wpkg.org/mailman/listinfo/sheepdog
