From a6491a8e84979a5a838f0a91ba5b4ba938818b50 Mon Sep 17 00:00:00 2001 From: Jamie Pryde Date: Wed, 13 Aug 2025 21:42:17 +0100 Subject: [PATCH] erasure-code: Fix to set FLAG_EC_PLUGIN_CRC_ENCODE_DECODE_SUPPORT for ISA-L cauchy Signed-off-by: Jamie Pryde --- src/erasure-code/isa/ErasureCodeIsa.h | 14 ++++++++------ src/erasure-code/isa/ErasureCodePluginIsa.cc | 7 +++++-- src/test/erasure-code/TestErasureCodePluginIsa.cc | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/erasure-code/isa/ErasureCodeIsa.h b/src/erasure-code/isa/ErasureCodeIsa.h index 19e654f2ea8..ae14b1d6aac 100644 --- a/src/erasure-code/isa/ErasureCodeIsa.h +++ b/src/erasure-code/isa/ErasureCodeIsa.h @@ -57,7 +57,8 @@ public: uint64_t flags; ErasureCodeIsa(const std::string &_technique, - ErasureCodeIsaTableCache &_tcache) : + ErasureCodeIsaTableCache &_tcache, + const std::string &_m = "0") : k(0), m(0), w(0), @@ -71,9 +72,9 @@ public: FLAG_EC_PLUGIN_PARITY_DELTA_OPTIMIZATION; if (technique == "reed_sol_van"sv) { - flags |= FLAG_EC_PLUGIN_CRC_ENCODE_DECODE_SUPPORT; - } else if (technique == "cauchy"sv && m == 1) { - flags |= FLAG_EC_PLUGIN_CRC_ENCODE_DECODE_SUPPORT; + flags |= FLAG_EC_PLUGIN_CRC_ENCODE_DECODE_SUPPORT; + } else if (technique == "cauchy"sv && _m == "1"sv) { + flags |= FLAG_EC_PLUGIN_CRC_ENCODE_DECODE_SUPPORT; } } @@ -154,8 +155,9 @@ public: ErasureCodeIsaDefault(ErasureCodeIsaTableCache &_tcache, const std::string& technique, - int matrix = kVandermonde) : - ErasureCodeIsa(technique, _tcache), + int matrix = kVandermonde, + const std::string &_m = "0") : + ErasureCodeIsa(technique, _tcache, _m), encode_coeff(0), encode_tbls(0) { matrixtype = matrix; diff --git a/src/erasure-code/isa/ErasureCodePluginIsa.cc b/src/erasure-code/isa/ErasureCodePluginIsa.cc index 80a4b803de1..7904f407d7c 100644 --- a/src/erasure-code/isa/ErasureCodePluginIsa.cc +++ b/src/erasure-code/isa/ErasureCodePluginIsa.cc @@ -38,14 +38,17 @@ int ErasureCodePluginIsa::factory(const std::string &directory, ErasureCodeIsa *interface; std::string technique; technique = profile.find("technique")->second; + std::string _m = profile.find("m")->second; if ((technique == "reed_sol_van")) { interface = new ErasureCodeIsaDefault(tcache, technique, - ErasureCodeIsaDefault::kVandermonde); + ErasureCodeIsaDefault::kVandermonde, + _m); } else if ((technique == "cauchy")) { interface = new ErasureCodeIsaDefault(tcache, technique, - ErasureCodeIsaDefault::kCauchy); + ErasureCodeIsaDefault::kCauchy, + _m); } else { *ss << "technique=" << technique << " is not a valid coding technique. " << " Choose one of the following: " diff --git a/src/test/erasure-code/TestErasureCodePluginIsa.cc b/src/test/erasure-code/TestErasureCodePluginIsa.cc index 86bac636dcc..26032169e46 100644 --- a/src/test/erasure-code/TestErasureCodePluginIsa.cc +++ b/src/test/erasure-code/TestErasureCodePluginIsa.cc @@ -43,6 +43,7 @@ TEST(ErasureCodePlugin, factory) for(const char **technique = techniques; *technique; technique++) { ErasureCodeInterfaceRef erasure_code; profile["technique"] = *technique; + profile["m"] = "2"; EXPECT_FALSE(erasure_code); EXPECT_EQ(0, instance.factory("isa", g_conf().get_val("erasure_code_dir"), -- 2.39.5