Merge "Jerasure: Handle initialization errors correctly"

This commit is contained in:
Jenkins 2017-05-10 15:19:35 +00:00 committed by Gerrit Code Review
commit 345f1a93a2
2 changed files with 34 additions and 8 deletions

View File

@ -357,17 +357,21 @@ static void * jerasure_rs_cauchy_init(struct ec_backend_args *args,
} }
desc->bitmatrix = desc->jerasure_matrix_to_bitmatrix(k, m, w, desc->matrix); desc->bitmatrix = desc->jerasure_matrix_to_bitmatrix(k, m, w, desc->matrix);
if (NULL == desc->bitmatrix) { if (NULL == desc->bitmatrix) {
goto error; goto bitmatrix_error;
} }
desc->schedule = desc->jerasure_smart_bitmatrix_to_schedule(k, m, w, desc->bitmatrix); desc->schedule = desc->jerasure_smart_bitmatrix_to_schedule(k, m, w, desc->bitmatrix);
if (NULL == desc->schedule) { if (NULL == desc->schedule) {
goto error; goto schedule_error;
} }
return desc; return desc;
schedule_error:
free(desc->bitmatrix);
bitmatrix_error:
free(desc->matrix);
error: error:
free_rs_cauchy_desc(desc); free(desc);
return NULL; return NULL;
} }

View File

@ -1428,8 +1428,7 @@ static void test_decode_with_missing_multi_data_parity(
} }
} }
static void test_decode_reconstruct_specific_error_case( static void test_isa_l_rs_vand_decode_reconstruct_specific_error_case()
const ec_backend_id_t be_id, struct ec_args *args)
{ {
struct ec_args specific_1010_args = { struct ec_args specific_1010_args = {
.k = 10, .k = 10,
@ -1523,6 +1522,25 @@ static void test_decode_reconstruct_specific_error_case(
free(skips); free(skips);
} }
static void test_jerasure_rs_cauchy_init_failure()
{
struct ec_args bad_args = {
.k = 10,
.m = 10,
.w = 4,
};
// NB: (k + m) > (1 << w) => too many frags!
int desc = -1;
desc = liberasurecode_instance_create(
EC_BACKEND_JERASURE_RS_CAUCHY, &bad_args);
if (-EBACKENDNOTAVAIL == desc) {
fprintf (stderr, "Backend library not available!\n");
return;
}
assert(-EBACKENDINITERR == desc);
}
static void test_simple_encode_decode(const ec_backend_id_t be_id, static void test_simple_encode_decode(const ec_backend_id_t be_id,
struct ec_args *args) struct ec_args *args)
{ {
@ -2003,6 +2021,10 @@ struct testcase testcases[] = {
test_verify_stripe_metadata_frag_idx_invalid, test_verify_stripe_metadata_frag_idx_invalid,
EC_BACKEND_JERASURE_RS_CAUCHY, CHKSUM_CRC32, EC_BACKEND_JERASURE_RS_CAUCHY, CHKSUM_CRC32,
.skip = false}, .skip = false},
{"test_jerasure_rs_cauchy_init_failure",
test_jerasure_rs_cauchy_init_failure,
EC_BACKENDS_MAX, 0,
.skip = false},
// ISA-L rs_vand tests // ISA-L rs_vand tests
{"create_and_destroy_backend", {"create_and_destroy_backend",
test_create_and_destroy_backend, test_create_and_destroy_backend,
@ -2064,10 +2086,10 @@ struct testcase testcases[] = {
test_verify_stripe_metadata_frag_idx_invalid, test_verify_stripe_metadata_frag_idx_invalid,
EC_BACKEND_ISA_L_RS_VAND, CHKSUM_CRC32, EC_BACKEND_ISA_L_RS_VAND, CHKSUM_CRC32,
.skip = false}, .skip = false},
{"test_isa_l_decode_reconstruct_specific_error_case", {"test_isa_l_rs_vand_decode_reconstruct_specific_error_case",
test_decode_reconstruct_specific_error_case, test_isa_l_rs_vand_decode_reconstruct_specific_error_case,
EC_BACKENDS_MAX, 0, // note this test is using ISA-L in hard coded EC_BACKENDS_MAX, 0, // note this test is using ISA-L in hard coded
.skip = false}, .skip = false},
// ISA-L rs cauchy tests // ISA-L rs cauchy tests
{"create_and_destroy_backend", {"create_and_destroy_backend",
test_create_and_destroy_backend, test_create_and_destroy_backend,