diff options
Diffstat (limited to 'xlators/cluster/ec')
21 files changed, 13766 insertions, 14016 deletions
diff --git a/xlators/cluster/ec/src/ec-code-avx.c b/xlators/cluster/ec/src/ec-code-avx.c index 92bd3e83c5e..70afaa00f54 100644 --- a/xlators/cluster/ec/src/ec-code-avx.c +++ b/xlators/cluster/ec/src/ec-code-avx.c @@ -34,10 +34,9 @@ ec_code_avx_load(ec_code_builder_t *builder, uint32_t dst, uint32_t idx, uint32_t bit) { if (builder->linear) { - ec_code_intel_op_mov_m2avx(builder, REG_SI, REG_DX, 1, - idx * builder->width * builder->bits + - bit * builder->width, - dst); + ec_code_intel_op_mov_m2avx( + builder, REG_SI, REG_DX, 1, + idx * builder->width * builder->bits + bit * builder->width, dst); } else { if (builder->base != idx) { ec_code_intel_op_mov_m2r(builder, REG_SI, REG_NULL, 0, idx * 8, @@ -81,10 +80,9 @@ ec_code_avx_xorm(ec_code_builder_t *builder, uint32_t dst, uint32_t idx, uint32_t bit) { if (builder->linear) { - ec_code_intel_op_xor_m2avx(builder, REG_SI, REG_DX, 1, - idx * builder->width * builder->bits + - bit * builder->width, - dst); + ec_code_intel_op_xor_m2avx( + builder, REG_SI, REG_DX, 1, + idx * builder->width * builder->bits + bit * builder->width, dst); } else { if (builder->base != idx) { ec_code_intel_op_mov_m2r(builder, REG_SI, REG_NULL, 0, idx * 8, @@ -96,21 +94,16 @@ ec_code_avx_xorm(ec_code_builder_t *builder, uint32_t dst, uint32_t idx, } } -static char *ec_code_avx_needed_flags[] = { - "avx2", - NULL -}; +static char *ec_code_avx_needed_flags[] = {"avx2", NULL}; -ec_code_gen_t ec_code_gen_avx = { - .name = "avx", - .flags = ec_code_avx_needed_flags, - .width = 32, - .prolog = ec_code_avx_prolog, - .epilog = ec_code_avx_epilog, - .load = ec_code_avx_load, - .store = ec_code_avx_store, - .copy = ec_code_avx_copy, - .xor2 = ec_code_avx_xor2, - .xor3 = ec_code_avx_xor3, - .xorm = ec_code_avx_xorm -}; +ec_code_gen_t ec_code_gen_avx = {.name = "avx", + .flags = ec_code_avx_needed_flags, + .width = 32, + .prolog = ec_code_avx_prolog, + .epilog = ec_code_avx_epilog, + .load = ec_code_avx_load, + .store = ec_code_avx_store, + .copy = ec_code_avx_copy, + .xor2 = ec_code_avx_xor2, + .xor3 = ec_code_avx_xor3, + .xorm = ec_code_avx_xorm}; diff --git a/xlators/cluster/ec/src/ec-code-c.c b/xlators/cluster/ec/src/ec-code-c.c index 7387f3ea435..acdc665c2cf 100644 --- a/xlators/cluster/ec/src/ec-code-c.c +++ b/xlators/cluster/ec/src/ec-code-c.c @@ -16,12 +16,14 @@ #define WIDTH (EC_METHOD_WORD_SIZE / sizeof(uint64_t)) -static void gf8_muladd_00(void *out, void *in) +static void +gf8_muladd_00(void *out, void *in) { memcpy(out, in, EC_METHOD_WORD_SIZE * 8); } -static void gf8_muladd_01(void *out, void *in) +static void +gf8_muladd_01(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -42,7 +44,8 @@ static void gf8_muladd_01(void *out, void *in) } } -static void gf8_muladd_02(void *out, void *in) +static void +gf8_muladd_02(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -83,7 +86,8 @@ static void gf8_muladd_02(void *out, void *in) } } -static void gf8_muladd_03(void *out, void *in) +static void +gf8_muladd_03(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -126,7 +130,8 @@ static void gf8_muladd_03(void *out, void *in) } } -static void gf8_muladd_04(void *out, void *in) +static void +gf8_muladd_04(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -169,7 +174,8 @@ static void gf8_muladd_04(void *out, void *in) } } -static void gf8_muladd_05(void *out, void *in) +static void +gf8_muladd_05(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -210,7 +216,8 @@ static void gf8_muladd_05(void *out, void *in) } } -static void gf8_muladd_06(void *out, void *in) +static void +gf8_muladd_06(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -253,7 +260,8 @@ static void gf8_muladd_06(void *out, void *in) } } -static void gf8_muladd_07(void *out, void *in) +static void +gf8_muladd_07(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -299,7 +307,8 @@ static void gf8_muladd_07(void *out, void *in) } } -static void gf8_muladd_08(void *out, void *in) +static void +gf8_muladd_08(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -340,7 +349,8 @@ static void gf8_muladd_08(void *out, void *in) } } -static void gf8_muladd_09(void *out, void *in) +static void +gf8_muladd_09(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -383,7 +393,8 @@ static void gf8_muladd_09(void *out, void *in) } } -static void gf8_muladd_0A(void *out, void *in) +static void +gf8_muladd_0A(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -424,7 +435,8 @@ static void gf8_muladd_0A(void *out, void *in) } } -static void gf8_muladd_0B(void *out, void *in) +static void +gf8_muladd_0B(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -469,7 +481,8 @@ static void gf8_muladd_0B(void *out, void *in) } } -static void gf8_muladd_0C(void *out, void *in) +static void +gf8_muladd_0C(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -513,7 +526,8 @@ static void gf8_muladd_0C(void *out, void *in) } } -static void gf8_muladd_0D(void *out, void *in) +static void +gf8_muladd_0D(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -558,7 +572,8 @@ static void gf8_muladd_0D(void *out, void *in) } } -static void gf8_muladd_0E(void *out, void *in) +static void +gf8_muladd_0E(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -604,7 +619,8 @@ static void gf8_muladd_0E(void *out, void *in) } } -static void gf8_muladd_0F(void *out, void *in) +static void +gf8_muladd_0F(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -650,7 +666,8 @@ static void gf8_muladd_0F(void *out, void *in) } } -static void gf8_muladd_10(void *out, void *in) +static void +gf8_muladd_10(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -694,7 +711,8 @@ static void gf8_muladd_10(void *out, void *in) } } -static void gf8_muladd_11(void *out, void *in) +static void +gf8_muladd_11(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -735,7 +753,8 @@ static void gf8_muladd_11(void *out, void *in) } } -static void gf8_muladd_12(void *out, void *in) +static void +gf8_muladd_12(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -779,7 +798,8 @@ static void gf8_muladd_12(void *out, void *in) } } -static void gf8_muladd_13(void *out, void *in) +static void +gf8_muladd_13(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -823,7 +843,8 @@ static void gf8_muladd_13(void *out, void *in) } } -static void gf8_muladd_14(void *out, void *in) +static void +gf8_muladd_14(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -867,7 +888,8 @@ static void gf8_muladd_14(void *out, void *in) } } -static void gf8_muladd_15(void *out, void *in) +static void +gf8_muladd_15(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -910,7 +932,8 @@ static void gf8_muladd_15(void *out, void *in) } } -static void gf8_muladd_16(void *out, void *in) +static void +gf8_muladd_16(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -956,7 +979,8 @@ static void gf8_muladd_16(void *out, void *in) } } -static void gf8_muladd_17(void *out, void *in) +static void +gf8_muladd_17(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1002,7 +1026,8 @@ static void gf8_muladd_17(void *out, void *in) } } -static void gf8_muladd_18(void *out, void *in) +static void +gf8_muladd_18(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1046,7 +1071,8 @@ static void gf8_muladd_18(void *out, void *in) } } -static void gf8_muladd_19(void *out, void *in) +static void +gf8_muladd_19(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1090,7 +1116,8 @@ static void gf8_muladd_19(void *out, void *in) } } -static void gf8_muladd_1A(void *out, void *in) +static void +gf8_muladd_1A(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1136,7 +1163,8 @@ static void gf8_muladd_1A(void *out, void *in) } } -static void gf8_muladd_1B(void *out, void *in) +static void +gf8_muladd_1B(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1183,7 +1211,8 @@ static void gf8_muladd_1B(void *out, void *in) } } -static void gf8_muladd_1C(void *out, void *in) +static void +gf8_muladd_1C(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1230,7 +1259,8 @@ static void gf8_muladd_1C(void *out, void *in) } } -static void gf8_muladd_1D(void *out, void *in) +static void +gf8_muladd_1D(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1277,7 +1307,8 @@ static void gf8_muladd_1D(void *out, void *in) } } -static void gf8_muladd_1E(void *out, void *in) +static void +gf8_muladd_1E(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1323,7 +1354,8 @@ static void gf8_muladd_1E(void *out, void *in) } } -static void gf8_muladd_1F(void *out, void *in) +static void +gf8_muladd_1F(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1367,7 +1399,8 @@ static void gf8_muladd_1F(void *out, void *in) } } -static void gf8_muladd_20(void *out, void *in) +static void +gf8_muladd_20(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1411,7 +1444,8 @@ static void gf8_muladd_20(void *out, void *in) } } -static void gf8_muladd_21(void *out, void *in) +static void +gf8_muladd_21(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1454,7 +1488,8 @@ static void gf8_muladd_21(void *out, void *in) } } -static void gf8_muladd_22(void *out, void *in) +static void +gf8_muladd_22(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1495,7 +1530,8 @@ static void gf8_muladd_22(void *out, void *in) } } -static void gf8_muladd_23(void *out, void *in) +static void +gf8_muladd_23(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1536,7 +1572,8 @@ static void gf8_muladd_23(void *out, void *in) } } -static void gf8_muladd_24(void *out, void *in) +static void +gf8_muladd_24(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1580,7 +1617,8 @@ static void gf8_muladd_24(void *out, void *in) } } -static void gf8_muladd_25(void *out, void *in) +static void +gf8_muladd_25(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1623,7 +1661,8 @@ static void gf8_muladd_25(void *out, void *in) } } -static void gf8_muladd_26(void *out, void *in) +static void +gf8_muladd_26(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1668,7 +1707,8 @@ static void gf8_muladd_26(void *out, void *in) } } -static void gf8_muladd_27(void *out, void *in) +static void +gf8_muladd_27(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1709,7 +1749,8 @@ static void gf8_muladd_27(void *out, void *in) } } -static void gf8_muladd_28(void *out, void *in) +static void +gf8_muladd_28(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1754,7 +1795,8 @@ static void gf8_muladd_28(void *out, void *in) } } -static void gf8_muladd_29(void *out, void *in) +static void +gf8_muladd_29(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1799,7 +1841,8 @@ static void gf8_muladd_29(void *out, void *in) } } -static void gf8_muladd_2A(void *out, void *in) +static void +gf8_muladd_2A(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1843,7 +1886,8 @@ static void gf8_muladd_2A(void *out, void *in) } } -static void gf8_muladd_2B(void *out, void *in) +static void +gf8_muladd_2B(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1887,7 +1931,8 @@ static void gf8_muladd_2B(void *out, void *in) } } -static void gf8_muladd_2C(void *out, void *in) +static void +gf8_muladd_2C(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1933,7 +1978,8 @@ static void gf8_muladd_2C(void *out, void *in) } } -static void gf8_muladd_2D(void *out, void *in) +static void +gf8_muladd_2D(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -1979,7 +2025,8 @@ static void gf8_muladd_2D(void *out, void *in) } } -static void gf8_muladd_2E(void *out, void *in) +static void +gf8_muladd_2E(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2024,7 +2071,8 @@ static void gf8_muladd_2E(void *out, void *in) } } -static void gf8_muladd_2F(void *out, void *in) +static void +gf8_muladd_2F(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2069,7 +2117,8 @@ static void gf8_muladd_2F(void *out, void *in) } } -static void gf8_muladd_30(void *out, void *in) +static void +gf8_muladd_30(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2113,7 +2162,8 @@ static void gf8_muladd_30(void *out, void *in) } } -static void gf8_muladd_31(void *out, void *in) +static void +gf8_muladd_31(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2158,7 +2208,8 @@ static void gf8_muladd_31(void *out, void *in) } } -static void gf8_muladd_32(void *out, void *in) +static void +gf8_muladd_32(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2202,7 +2253,8 @@ static void gf8_muladd_32(void *out, void *in) } } -static void gf8_muladd_33(void *out, void *in) +static void +gf8_muladd_33(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2249,7 +2301,8 @@ static void gf8_muladd_33(void *out, void *in) } } -static void gf8_muladd_34(void *out, void *in) +static void +gf8_muladd_34(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2296,7 +2349,8 @@ static void gf8_muladd_34(void *out, void *in) } } -static void gf8_muladd_35(void *out, void *in) +static void +gf8_muladd_35(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2341,7 +2395,8 @@ static void gf8_muladd_35(void *out, void *in) } } -static void gf8_muladd_36(void *out, void *in) +static void +gf8_muladd_36(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2385,7 +2440,8 @@ static void gf8_muladd_36(void *out, void *in) } } -static void gf8_muladd_37(void *out, void *in) +static void +gf8_muladd_37(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2431,7 +2487,8 @@ static void gf8_muladd_37(void *out, void *in) } } -static void gf8_muladd_38(void *out, void *in) +static void +gf8_muladd_38(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2476,7 +2533,8 @@ static void gf8_muladd_38(void *out, void *in) } } -static void gf8_muladd_39(void *out, void *in) +static void +gf8_muladd_39(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2521,7 +2579,8 @@ static void gf8_muladd_39(void *out, void *in) } } -static void gf8_muladd_3A(void *out, void *in) +static void +gf8_muladd_3A(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2569,7 +2628,8 @@ static void gf8_muladd_3A(void *out, void *in) } } -static void gf8_muladd_3B(void *out, void *in) +static void +gf8_muladd_3B(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2614,7 +2674,8 @@ static void gf8_muladd_3B(void *out, void *in) } } -static void gf8_muladd_3C(void *out, void *in) +static void +gf8_muladd_3C(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2659,7 +2720,8 @@ static void gf8_muladd_3C(void *out, void *in) } } -static void gf8_muladd_3D(void *out, void *in) +static void +gf8_muladd_3D(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2704,7 +2766,8 @@ static void gf8_muladd_3D(void *out, void *in) } } -static void gf8_muladd_3E(void *out, void *in) +static void +gf8_muladd_3E(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2748,7 +2811,8 @@ static void gf8_muladd_3E(void *out, void *in) } } -static void gf8_muladd_3F(void *out, void *in) +static void +gf8_muladd_3F(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2793,7 +2857,8 @@ static void gf8_muladd_3F(void *out, void *in) } } -static void gf8_muladd_40(void *out, void *in) +static void +gf8_muladd_40(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2837,7 +2902,8 @@ static void gf8_muladd_40(void *out, void *in) } } -static void gf8_muladd_41(void *out, void *in) +static void +gf8_muladd_41(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2881,7 +2947,8 @@ static void gf8_muladd_41(void *out, void *in) } } -static void gf8_muladd_42(void *out, void *in) +static void +gf8_muladd_42(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2922,7 +2989,8 @@ static void gf8_muladd_42(void *out, void *in) } } -static void gf8_muladd_43(void *out, void *in) +static void +gf8_muladd_43(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -2963,7 +3031,8 @@ static void gf8_muladd_43(void *out, void *in) } } -static void gf8_muladd_44(void *out, void *in) +static void +gf8_muladd_44(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3006,7 +3075,8 @@ static void gf8_muladd_44(void *out, void *in) } } -static void gf8_muladd_45(void *out, void *in) +static void +gf8_muladd_45(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3047,7 +3117,8 @@ static void gf8_muladd_45(void *out, void *in) } } -static void gf8_muladd_46(void *out, void *in) +static void +gf8_muladd_46(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3088,7 +3159,8 @@ static void gf8_muladd_46(void *out, void *in) } } -static void gf8_muladd_47(void *out, void *in) +static void +gf8_muladd_47(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3131,7 +3203,8 @@ static void gf8_muladd_47(void *out, void *in) } } -static void gf8_muladd_48(void *out, void *in) +static void +gf8_muladd_48(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3175,7 +3248,8 @@ static void gf8_muladd_48(void *out, void *in) } } -static void gf8_muladd_49(void *out, void *in) +static void +gf8_muladd_49(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3219,7 +3293,8 @@ static void gf8_muladd_49(void *out, void *in) } } -static void gf8_muladd_4A(void *out, void *in) +static void +gf8_muladd_4A(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3263,7 +3338,8 @@ static void gf8_muladd_4A(void *out, void *in) } } -static void gf8_muladd_4B(void *out, void *in) +static void +gf8_muladd_4B(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3309,7 +3385,8 @@ static void gf8_muladd_4B(void *out, void *in) } } -static void gf8_muladd_4C(void *out, void *in) +static void +gf8_muladd_4C(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3354,7 +3431,8 @@ static void gf8_muladd_4C(void *out, void *in) } } -static void gf8_muladd_4D(void *out, void *in) +static void +gf8_muladd_4D(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3399,7 +3477,8 @@ static void gf8_muladd_4D(void *out, void *in) } } -static void gf8_muladd_4E(void *out, void *in) +static void +gf8_muladd_4E(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3440,7 +3519,8 @@ static void gf8_muladd_4E(void *out, void *in) } } -static void gf8_muladd_4F(void *out, void *in) +static void +gf8_muladd_4F(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3481,7 +3561,8 @@ static void gf8_muladd_4F(void *out, void *in) } } -static void gf8_muladd_50(void *out, void *in) +static void +gf8_muladd_50(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3526,7 +3607,8 @@ static void gf8_muladd_50(void *out, void *in) } } -static void gf8_muladd_51(void *out, void *in) +static void +gf8_muladd_51(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3567,7 +3649,8 @@ static void gf8_muladd_51(void *out, void *in) } } -static void gf8_muladd_52(void *out, void *in) +static void +gf8_muladd_52(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3613,7 +3696,8 @@ static void gf8_muladd_52(void *out, void *in) } } -static void gf8_muladd_53(void *out, void *in) +static void +gf8_muladd_53(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3654,7 +3738,8 @@ static void gf8_muladd_53(void *out, void *in) } } -static void gf8_muladd_54(void *out, void *in) +static void +gf8_muladd_54(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3700,7 +3785,8 @@ static void gf8_muladd_54(void *out, void *in) } } -static void gf8_muladd_55(void *out, void *in) +static void +gf8_muladd_55(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3745,7 +3831,8 @@ static void gf8_muladd_55(void *out, void *in) } } -static void gf8_muladd_56(void *out, void *in) +static void +gf8_muladd_56(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3788,7 +3875,8 @@ static void gf8_muladd_56(void *out, void *in) } } -static void gf8_muladd_57(void *out, void *in) +static void +gf8_muladd_57(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3832,7 +3920,8 @@ static void gf8_muladd_57(void *out, void *in) } } -static void gf8_muladd_58(void *out, void *in) +static void +gf8_muladd_58(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3876,7 +3965,8 @@ static void gf8_muladd_58(void *out, void *in) } } -static void gf8_muladd_59(void *out, void *in) +static void +gf8_muladd_59(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3920,7 +4010,8 @@ static void gf8_muladd_59(void *out, void *in) } } -static void gf8_muladd_5A(void *out, void *in) +static void +gf8_muladd_5A(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -3965,7 +4056,8 @@ static void gf8_muladd_5A(void *out, void *in) } } -static void gf8_muladd_5B(void *out, void *in) +static void +gf8_muladd_5B(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4012,7 +4104,8 @@ static void gf8_muladd_5B(void *out, void *in) } } -static void gf8_muladd_5C(void *out, void *in) +static void +gf8_muladd_5C(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4057,7 +4150,8 @@ static void gf8_muladd_5C(void *out, void *in) } } -static void gf8_muladd_5D(void *out, void *in) +static void +gf8_muladd_5D(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4104,7 +4198,8 @@ static void gf8_muladd_5D(void *out, void *in) } } -static void gf8_muladd_5E(void *out, void *in) +static void +gf8_muladd_5E(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4151,7 +4246,8 @@ static void gf8_muladd_5E(void *out, void *in) } } -static void gf8_muladd_5F(void *out, void *in) +static void +gf8_muladd_5F(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4197,7 +4293,8 @@ static void gf8_muladd_5F(void *out, void *in) } } -static void gf8_muladd_60(void *out, void *in) +static void +gf8_muladd_60(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4241,7 +4338,8 @@ static void gf8_muladd_60(void *out, void *in) } } -static void gf8_muladd_61(void *out, void *in) +static void +gf8_muladd_61(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4285,7 +4383,8 @@ static void gf8_muladd_61(void *out, void *in) } } -static void gf8_muladd_62(void *out, void *in) +static void +gf8_muladd_62(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4331,7 +4430,8 @@ static void gf8_muladd_62(void *out, void *in) } } -static void gf8_muladd_63(void *out, void *in) +static void +gf8_muladd_63(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4378,7 +4478,8 @@ static void gf8_muladd_63(void *out, void *in) } } -static void gf8_muladd_64(void *out, void *in) +static void +gf8_muladd_64(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4422,7 +4523,8 @@ static void gf8_muladd_64(void *out, void *in) } } -static void gf8_muladd_65(void *out, void *in) +static void +gf8_muladd_65(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4468,7 +4570,8 @@ static void gf8_muladd_65(void *out, void *in) } } -static void gf8_muladd_66(void *out, void *in) +static void +gf8_muladd_66(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4515,7 +4618,8 @@ static void gf8_muladd_66(void *out, void *in) } } -static void gf8_muladd_67(void *out, void *in) +static void +gf8_muladd_67(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4561,7 +4665,8 @@ static void gf8_muladd_67(void *out, void *in) } } -static void gf8_muladd_68(void *out, void *in) +static void +gf8_muladd_68(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4607,7 +4712,8 @@ static void gf8_muladd_68(void *out, void *in) } } -static void gf8_muladd_69(void *out, void *in) +static void +gf8_muladd_69(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4650,7 +4756,8 @@ static void gf8_muladd_69(void *out, void *in) } } -static void gf8_muladd_6A(void *out, void *in) +static void +gf8_muladd_6A(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4695,7 +4802,8 @@ static void gf8_muladd_6A(void *out, void *in) } } -static void gf8_muladd_6B(void *out, void *in) +static void +gf8_muladd_6B(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4739,7 +4847,8 @@ static void gf8_muladd_6B(void *out, void *in) } } -static void gf8_muladd_6C(void *out, void *in) +static void +gf8_muladd_6C(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4783,7 +4892,8 @@ static void gf8_muladd_6C(void *out, void *in) } } -static void gf8_muladd_6D(void *out, void *in) +static void +gf8_muladd_6D(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4827,7 +4937,8 @@ static void gf8_muladd_6D(void *out, void *in) } } -static void gf8_muladd_6E(void *out, void *in) +static void +gf8_muladd_6E(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4872,7 +4983,8 @@ static void gf8_muladd_6E(void *out, void *in) } } -static void gf8_muladd_6F(void *out, void *in) +static void +gf8_muladd_6F(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4917,7 +5029,8 @@ static void gf8_muladd_6F(void *out, void *in) } } -static void gf8_muladd_70(void *out, void *in) +static void +gf8_muladd_70(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -4962,7 +5075,8 @@ static void gf8_muladd_70(void *out, void *in) } } -static void gf8_muladd_71(void *out, void *in) +static void +gf8_muladd_71(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5007,7 +5121,8 @@ static void gf8_muladd_71(void *out, void *in) } } -static void gf8_muladd_72(void *out, void *in) +static void +gf8_muladd_72(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5052,7 +5167,8 @@ static void gf8_muladd_72(void *out, void *in) } } -static void gf8_muladd_73(void *out, void *in) +static void +gf8_muladd_73(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5093,7 +5209,8 @@ static void gf8_muladd_73(void *out, void *in) } } -static void gf8_muladd_74(void *out, void *in) +static void +gf8_muladd_74(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5137,7 +5254,8 @@ static void gf8_muladd_74(void *out, void *in) } } -static void gf8_muladd_75(void *out, void *in) +static void +gf8_muladd_75(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5182,7 +5300,8 @@ static void gf8_muladd_75(void *out, void *in) } } -static void gf8_muladd_76(void *out, void *in) +static void +gf8_muladd_76(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5228,7 +5347,8 @@ static void gf8_muladd_76(void *out, void *in) } } -static void gf8_muladd_77(void *out, void *in) +static void +gf8_muladd_77(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5274,7 +5394,8 @@ static void gf8_muladd_77(void *out, void *in) } } -static void gf8_muladd_78(void *out, void *in) +static void +gf8_muladd_78(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5319,7 +5440,8 @@ static void gf8_muladd_78(void *out, void *in) } } -static void gf8_muladd_79(void *out, void *in) +static void +gf8_muladd_79(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5365,7 +5487,8 @@ static void gf8_muladd_79(void *out, void *in) } } -static void gf8_muladd_7A(void *out, void *in) +static void +gf8_muladd_7A(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5409,7 +5532,8 @@ static void gf8_muladd_7A(void *out, void *in) } } -static void gf8_muladd_7B(void *out, void *in) +static void +gf8_muladd_7B(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5454,7 +5578,8 @@ static void gf8_muladd_7B(void *out, void *in) } } -static void gf8_muladd_7C(void *out, void *in) +static void +gf8_muladd_7C(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5498,7 +5623,8 @@ static void gf8_muladd_7C(void *out, void *in) } } -static void gf8_muladd_7D(void *out, void *in) +static void +gf8_muladd_7D(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5544,7 +5670,8 @@ static void gf8_muladd_7D(void *out, void *in) } } -static void gf8_muladd_7E(void *out, void *in) +static void +gf8_muladd_7E(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5589,7 +5716,8 @@ static void gf8_muladd_7E(void *out, void *in) } } -static void gf8_muladd_7F(void *out, void *in) +static void +gf8_muladd_7F(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5635,7 +5763,8 @@ static void gf8_muladd_7F(void *out, void *in) } } -static void gf8_muladd_80(void *out, void *in) +static void +gf8_muladd_80(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5680,7 +5809,8 @@ static void gf8_muladd_80(void *out, void *in) } } -static void gf8_muladd_81(void *out, void *in) +static void +gf8_muladd_81(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5724,7 +5854,8 @@ static void gf8_muladd_81(void *out, void *in) } } -static void gf8_muladd_82(void *out, void *in) +static void +gf8_muladd_82(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5767,7 +5898,8 @@ static void gf8_muladd_82(void *out, void *in) } } -static void gf8_muladd_83(void *out, void *in) +static void +gf8_muladd_83(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5814,7 +5946,8 @@ static void gf8_muladd_83(void *out, void *in) } } -static void gf8_muladd_84(void *out, void *in) +static void +gf8_muladd_84(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5855,7 +5988,8 @@ static void gf8_muladd_84(void *out, void *in) } } -static void gf8_muladd_85(void *out, void *in) +static void +gf8_muladd_85(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5901,7 +6035,8 @@ static void gf8_muladd_85(void *out, void *in) } } -static void gf8_muladd_86(void *out, void *in) +static void +gf8_muladd_86(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5942,7 +6077,8 @@ static void gf8_muladd_86(void *out, void *in) } } -static void gf8_muladd_87(void *out, void *in) +static void +gf8_muladd_87(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -5986,7 +6122,8 @@ static void gf8_muladd_87(void *out, void *in) } } -static void gf8_muladd_88(void *out, void *in) +static void +gf8_muladd_88(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6030,7 +6167,8 @@ static void gf8_muladd_88(void *out, void *in) } } -static void gf8_muladd_89(void *out, void *in) +static void +gf8_muladd_89(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6075,7 +6213,8 @@ static void gf8_muladd_89(void *out, void *in) } } -static void gf8_muladd_8A(void *out, void *in) +static void +gf8_muladd_8A(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6116,7 +6255,8 @@ static void gf8_muladd_8A(void *out, void *in) } } -static void gf8_muladd_8B(void *out, void *in) +static void +gf8_muladd_8B(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6163,7 +6303,8 @@ static void gf8_muladd_8B(void *out, void *in) } } -static void gf8_muladd_8C(void *out, void *in) +static void +gf8_muladd_8C(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6204,7 +6345,8 @@ static void gf8_muladd_8C(void *out, void *in) } } -static void gf8_muladd_8D(void *out, void *in) +static void +gf8_muladd_8D(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6247,7 +6389,8 @@ static void gf8_muladd_8D(void *out, void *in) } } -static void gf8_muladd_8E(void *out, void *in) +static void +gf8_muladd_8E(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6288,7 +6431,8 @@ static void gf8_muladd_8E(void *out, void *in) } } -static void gf8_muladd_8F(void *out, void *in) +static void +gf8_muladd_8F(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6331,7 +6475,8 @@ static void gf8_muladd_8F(void *out, void *in) } } -static void gf8_muladd_90(void *out, void *in) +static void +gf8_muladd_90(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6376,7 +6521,8 @@ static void gf8_muladd_90(void *out, void *in) } } -static void gf8_muladd_91(void *out, void *in) +static void +gf8_muladd_91(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6422,7 +6568,8 @@ static void gf8_muladd_91(void *out, void *in) } } -static void gf8_muladd_92(void *out, void *in) +static void +gf8_muladd_92(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6466,7 +6613,8 @@ static void gf8_muladd_92(void *out, void *in) } } -static void gf8_muladd_93(void *out, void *in) +static void +gf8_muladd_93(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6511,7 +6659,8 @@ static void gf8_muladd_93(void *out, void *in) } } -static void gf8_muladd_94(void *out, void *in) +static void +gf8_muladd_94(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6554,7 +6703,8 @@ static void gf8_muladd_94(void *out, void *in) } } -static void gf8_muladd_95(void *out, void *in) +static void +gf8_muladd_95(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6602,7 +6752,8 @@ static void gf8_muladd_95(void *out, void *in) } } -static void gf8_muladd_96(void *out, void *in) +static void +gf8_muladd_96(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6647,7 +6798,8 @@ static void gf8_muladd_96(void *out, void *in) } } -static void gf8_muladd_97(void *out, void *in) +static void +gf8_muladd_97(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6693,7 +6845,8 @@ static void gf8_muladd_97(void *out, void *in) } } -static void gf8_muladd_98(void *out, void *in) +static void +gf8_muladd_98(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6737,7 +6890,8 @@ static void gf8_muladd_98(void *out, void *in) } } -static void gf8_muladd_99(void *out, void *in) +static void +gf8_muladd_99(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6782,7 +6936,8 @@ static void gf8_muladd_99(void *out, void *in) } } -static void gf8_muladd_9A(void *out, void *in) +static void +gf8_muladd_9A(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6827,7 +6982,8 @@ static void gf8_muladd_9A(void *out, void *in) } } -static void gf8_muladd_9B(void *out, void *in) +static void +gf8_muladd_9B(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6870,7 +7026,8 @@ static void gf8_muladd_9B(void *out, void *in) } } -static void gf8_muladd_9C(void *out, void *in) +static void +gf8_muladd_9C(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6913,7 +7070,8 @@ static void gf8_muladd_9C(void *out, void *in) } } -static void gf8_muladd_9D(void *out, void *in) +static void +gf8_muladd_9D(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6956,7 +7114,8 @@ static void gf8_muladd_9D(void *out, void *in) } } -static void gf8_muladd_9E(void *out, void *in) +static void +gf8_muladd_9E(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -6999,7 +7158,8 @@ static void gf8_muladd_9E(void *out, void *in) } } -static void gf8_muladd_9F(void *out, void *in) +static void +gf8_muladd_9F(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7042,7 +7202,8 @@ static void gf8_muladd_9F(void *out, void *in) } } -static void gf8_muladd_A0(void *out, void *in) +static void +gf8_muladd_A0(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7088,7 +7249,8 @@ static void gf8_muladd_A0(void *out, void *in) } } -static void gf8_muladd_A1(void *out, void *in) +static void +gf8_muladd_A1(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7133,7 +7295,8 @@ static void gf8_muladd_A1(void *out, void *in) } } -static void gf8_muladd_A2(void *out, void *in) +static void +gf8_muladd_A2(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7176,7 +7339,8 @@ static void gf8_muladd_A2(void *out, void *in) } } -static void gf8_muladd_A3(void *out, void *in) +static void +gf8_muladd_A3(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7220,7 +7384,8 @@ static void gf8_muladd_A3(void *out, void *in) } } -static void gf8_muladd_A4(void *out, void *in) +static void +gf8_muladd_A4(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7267,7 +7432,8 @@ static void gf8_muladd_A4(void *out, void *in) } } -static void gf8_muladd_A5(void *out, void *in) +static void +gf8_muladd_A5(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7312,7 +7478,8 @@ static void gf8_muladd_A5(void *out, void *in) } } -static void gf8_muladd_A6(void *out, void *in) +static void +gf8_muladd_A6(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7353,7 +7520,8 @@ static void gf8_muladd_A6(void *out, void *in) } } -static void gf8_muladd_A7(void *out, void *in) +static void +gf8_muladd_A7(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7394,7 +7562,8 @@ static void gf8_muladd_A7(void *out, void *in) } } -static void gf8_muladd_A8(void *out, void *in) +static void +gf8_muladd_A8(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7439,7 +7608,8 @@ static void gf8_muladd_A8(void *out, void *in) } } -static void gf8_muladd_A9(void *out, void *in) +static void +gf8_muladd_A9(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7480,7 +7650,8 @@ static void gf8_muladd_A9(void *out, void *in) } } -static void gf8_muladd_AA(void *out, void *in) +static void +gf8_muladd_AA(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7525,7 +7696,8 @@ static void gf8_muladd_AA(void *out, void *in) } } -static void gf8_muladd_AB(void *out, void *in) +static void +gf8_muladd_AB(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7569,7 +7741,8 @@ static void gf8_muladd_AB(void *out, void *in) } } -static void gf8_muladd_AC(void *out, void *in) +static void +gf8_muladd_AC(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7612,7 +7785,8 @@ static void gf8_muladd_AC(void *out, void *in) } } -static void gf8_muladd_AD(void *out, void *in) +static void +gf8_muladd_AD(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7653,7 +7827,8 @@ static void gf8_muladd_AD(void *out, void *in) } } -static void gf8_muladd_AE(void *out, void *in) +static void +gf8_muladd_AE(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7698,7 +7873,8 @@ static void gf8_muladd_AE(void *out, void *in) } } -static void gf8_muladd_AF(void *out, void *in) +static void +gf8_muladd_AF(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7741,7 +7917,8 @@ static void gf8_muladd_AF(void *out, void *in) } } -static void gf8_muladd_B0(void *out, void *in) +static void +gf8_muladd_B0(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7787,7 +7964,8 @@ static void gf8_muladd_B0(void *out, void *in) } } -static void gf8_muladd_B1(void *out, void *in) +static void +gf8_muladd_B1(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7831,7 +8009,8 @@ static void gf8_muladd_B1(void *out, void *in) } } -static void gf8_muladd_B2(void *out, void *in) +static void +gf8_muladd_B2(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7878,7 +8057,8 @@ static void gf8_muladd_B2(void *out, void *in) } } -static void gf8_muladd_B3(void *out, void *in) +static void +gf8_muladd_B3(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7923,7 +8103,8 @@ static void gf8_muladd_B3(void *out, void *in) } } -static void gf8_muladd_B4(void *out, void *in) +static void +gf8_muladd_B4(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -7966,7 +8147,8 @@ static void gf8_muladd_B4(void *out, void *in) } } -static void gf8_muladd_B5(void *out, void *in) +static void +gf8_muladd_B5(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8011,7 +8193,8 @@ static void gf8_muladd_B5(void *out, void *in) } } -static void gf8_muladd_B6(void *out, void *in) +static void +gf8_muladd_B6(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8057,7 +8240,8 @@ static void gf8_muladd_B6(void *out, void *in) } } -static void gf8_muladd_B7(void *out, void *in) +static void +gf8_muladd_B7(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8101,7 +8285,8 @@ static void gf8_muladd_B7(void *out, void *in) } } -static void gf8_muladd_B8(void *out, void *in) +static void +gf8_muladd_B8(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8146,7 +8331,8 @@ static void gf8_muladd_B8(void *out, void *in) } } -static void gf8_muladd_B9(void *out, void *in) +static void +gf8_muladd_B9(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8191,7 +8377,8 @@ static void gf8_muladd_B9(void *out, void *in) } } -static void gf8_muladd_BA(void *out, void *in) +static void +gf8_muladd_BA(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8236,7 +8423,8 @@ static void gf8_muladd_BA(void *out, void *in) } } -static void gf8_muladd_BB(void *out, void *in) +static void +gf8_muladd_BB(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8280,7 +8468,8 @@ static void gf8_muladd_BB(void *out, void *in) } } -static void gf8_muladd_BC(void *out, void *in) +static void +gf8_muladd_BC(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8325,7 +8514,8 @@ static void gf8_muladd_BC(void *out, void *in) } } -static void gf8_muladd_BD(void *out, void *in) +static void +gf8_muladd_BD(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8370,7 +8560,8 @@ static void gf8_muladd_BD(void *out, void *in) } } -static void gf8_muladd_BE(void *out, void *in) +static void +gf8_muladd_BE(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8413,7 +8604,8 @@ static void gf8_muladd_BE(void *out, void *in) } } -static void gf8_muladd_BF(void *out, void *in) +static void +gf8_muladd_BF(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8459,7 +8651,8 @@ static void gf8_muladd_BF(void *out, void *in) } } -static void gf8_muladd_C0(void *out, void *in) +static void +gf8_muladd_C0(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8503,7 +8696,8 @@ static void gf8_muladd_C0(void *out, void *in) } } -static void gf8_muladd_C1(void *out, void *in) +static void +gf8_muladd_C1(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8547,7 +8741,8 @@ static void gf8_muladd_C1(void *out, void *in) } } -static void gf8_muladd_C2(void *out, void *in) +static void +gf8_muladd_C2(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8591,7 +8786,8 @@ static void gf8_muladd_C2(void *out, void *in) } } -static void gf8_muladd_C3(void *out, void *in) +static void +gf8_muladd_C3(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8636,7 +8832,8 @@ static void gf8_muladd_C3(void *out, void *in) } } -static void gf8_muladd_C4(void *out, void *in) +static void +gf8_muladd_C4(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8680,7 +8877,8 @@ static void gf8_muladd_C4(void *out, void *in) } } -static void gf8_muladd_C5(void *out, void *in) +static void +gf8_muladd_C5(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8723,7 +8921,8 @@ static void gf8_muladd_C5(void *out, void *in) } } -static void gf8_muladd_C6(void *out, void *in) +static void +gf8_muladd_C6(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8771,7 +8970,8 @@ static void gf8_muladd_C6(void *out, void *in) } } -static void gf8_muladd_C7(void *out, void *in) +static void +gf8_muladd_C7(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8815,7 +9015,8 @@ static void gf8_muladd_C7(void *out, void *in) } } -static void gf8_muladd_C8(void *out, void *in) +static void +gf8_muladd_C8(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8859,7 +9060,8 @@ static void gf8_muladd_C8(void *out, void *in) } } -static void gf8_muladd_C9(void *out, void *in) +static void +gf8_muladd_C9(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8902,7 +9104,8 @@ static void gf8_muladd_C9(void *out, void *in) } } -static void gf8_muladd_CA(void *out, void *in) +static void +gf8_muladd_CA(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8948,7 +9151,8 @@ static void gf8_muladd_CA(void *out, void *in) } } -static void gf8_muladd_CB(void *out, void *in) +static void +gf8_muladd_CB(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -8993,7 +9197,8 @@ static void gf8_muladd_CB(void *out, void *in) } } -static void gf8_muladd_CC(void *out, void *in) +static void +gf8_muladd_CC(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9039,7 +9244,8 @@ static void gf8_muladd_CC(void *out, void *in) } } -static void gf8_muladd_CD(void *out, void *in) +static void +gf8_muladd_CD(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9083,7 +9289,8 @@ static void gf8_muladd_CD(void *out, void *in) } } -static void gf8_muladd_CE(void *out, void *in) +static void +gf8_muladd_CE(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9128,7 +9335,8 @@ static void gf8_muladd_CE(void *out, void *in) } } -static void gf8_muladd_CF(void *out, void *in) +static void +gf8_muladd_CF(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9173,7 +9381,8 @@ static void gf8_muladd_CF(void *out, void *in) } } -static void gf8_muladd_D0(void *out, void *in) +static void +gf8_muladd_D0(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9220,7 +9429,8 @@ static void gf8_muladd_D0(void *out, void *in) } } -static void gf8_muladd_D1(void *out, void *in) +static void +gf8_muladd_D1(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9265,7 +9475,8 @@ static void gf8_muladd_D1(void *out, void *in) } } -static void gf8_muladd_D2(void *out, void *in) +static void +gf8_muladd_D2(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9308,7 +9519,8 @@ static void gf8_muladd_D2(void *out, void *in) } } -static void gf8_muladd_D3(void *out, void *in) +static void +gf8_muladd_D3(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9354,7 +9566,8 @@ static void gf8_muladd_D3(void *out, void *in) } } -static void gf8_muladd_D4(void *out, void *in) +static void +gf8_muladd_D4(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9399,7 +9612,8 @@ static void gf8_muladd_D4(void *out, void *in) } } -static void gf8_muladd_D5(void *out, void *in) +static void +gf8_muladd_D5(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9444,7 +9658,8 @@ static void gf8_muladd_D5(void *out, void *in) } } -static void gf8_muladd_D6(void *out, void *in) +static void +gf8_muladd_D6(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9488,7 +9703,8 @@ static void gf8_muladd_D6(void *out, void *in) } } -static void gf8_muladd_D7(void *out, void *in) +static void +gf8_muladd_D7(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9533,7 +9749,8 @@ static void gf8_muladd_D7(void *out, void *in) } } -static void gf8_muladd_D8(void *out, void *in) +static void +gf8_muladd_D8(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9577,7 +9794,8 @@ static void gf8_muladd_D8(void *out, void *in) } } -static void gf8_muladd_D9(void *out, void *in) +static void +gf8_muladd_D9(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9618,7 +9836,8 @@ static void gf8_muladd_D9(void *out, void *in) } } -static void gf8_muladd_DA(void *out, void *in) +static void +gf8_muladd_DA(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9662,7 +9881,8 @@ static void gf8_muladd_DA(void *out, void *in) } } -static void gf8_muladd_DB(void *out, void *in) +static void +gf8_muladd_DB(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9709,7 +9929,8 @@ static void gf8_muladd_DB(void *out, void *in) } } -static void gf8_muladd_DC(void *out, void *in) +static void +gf8_muladd_DC(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9755,7 +9976,8 @@ static void gf8_muladd_DC(void *out, void *in) } } -static void gf8_muladd_DD(void *out, void *in) +static void +gf8_muladd_DD(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9796,7 +10018,8 @@ static void gf8_muladd_DD(void *out, void *in) } } -static void gf8_muladd_DE(void *out, void *in) +static void +gf8_muladd_DE(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9840,7 +10063,8 @@ static void gf8_muladd_DE(void *out, void *in) } } -static void gf8_muladd_DF(void *out, void *in) +static void +gf8_muladd_DF(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9885,7 +10109,8 @@ static void gf8_muladd_DF(void *out, void *in) } } -static void gf8_muladd_E0(void *out, void *in) +static void +gf8_muladd_E0(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9929,7 +10154,8 @@ static void gf8_muladd_E0(void *out, void *in) } } -static void gf8_muladd_E1(void *out, void *in) +static void +gf8_muladd_E1(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -9975,7 +10201,8 @@ static void gf8_muladd_E1(void *out, void *in) } } -static void gf8_muladd_E2(void *out, void *in) +static void +gf8_muladd_E2(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10016,7 +10243,8 @@ static void gf8_muladd_E2(void *out, void *in) } } -static void gf8_muladd_E3(void *out, void *in) +static void +gf8_muladd_E3(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10063,7 +10291,8 @@ static void gf8_muladd_E3(void *out, void *in) } } -static void gf8_muladd_E4(void *out, void *in) +static void +gf8_muladd_E4(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10108,7 +10337,8 @@ static void gf8_muladd_E4(void *out, void *in) } } -static void gf8_muladd_E5(void *out, void *in) +static void +gf8_muladd_E5(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10153,7 +10383,8 @@ static void gf8_muladd_E5(void *out, void *in) } } -static void gf8_muladd_E6(void *out, void *in) +static void +gf8_muladd_E6(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10194,7 +10425,8 @@ static void gf8_muladd_E6(void *out, void *in) } } -static void gf8_muladd_E7(void *out, void *in) +static void +gf8_muladd_E7(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10241,7 +10473,8 @@ static void gf8_muladd_E7(void *out, void *in) } } -static void gf8_muladd_E8(void *out, void *in) +static void +gf8_muladd_E8(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10287,7 +10520,8 @@ static void gf8_muladd_E8(void *out, void *in) } } -static void gf8_muladd_E9(void *out, void *in) +static void +gf8_muladd_E9(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10332,7 +10566,8 @@ static void gf8_muladd_E9(void *out, void *in) } } -static void gf8_muladd_EA(void *out, void *in) +static void +gf8_muladd_EA(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10373,7 +10608,8 @@ static void gf8_muladd_EA(void *out, void *in) } } -static void gf8_muladd_EB(void *out, void *in) +static void +gf8_muladd_EB(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10417,7 +10653,8 @@ static void gf8_muladd_EB(void *out, void *in) } } -static void gf8_muladd_EC(void *out, void *in) +static void +gf8_muladd_EC(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10458,7 +10695,8 @@ static void gf8_muladd_EC(void *out, void *in) } } -static void gf8_muladd_ED(void *out, void *in) +static void +gf8_muladd_ED(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10502,7 +10740,8 @@ static void gf8_muladd_ED(void *out, void *in) } } -static void gf8_muladd_EE(void *out, void *in) +static void +gf8_muladd_EE(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10548,7 +10787,8 @@ static void gf8_muladd_EE(void *out, void *in) } } -static void gf8_muladd_EF(void *out, void *in) +static void +gf8_muladd_EF(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10592,7 +10832,8 @@ static void gf8_muladd_EF(void *out, void *in) } } -static void gf8_muladd_F0(void *out, void *in) +static void +gf8_muladd_F0(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10638,7 +10879,8 @@ static void gf8_muladd_F0(void *out, void *in) } } -static void gf8_muladd_F1(void *out, void *in) +static void +gf8_muladd_F1(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10684,7 +10926,8 @@ static void gf8_muladd_F1(void *out, void *in) } } -static void gf8_muladd_F2(void *out, void *in) +static void +gf8_muladd_F2(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10730,7 +10973,8 @@ static void gf8_muladd_F2(void *out, void *in) } } -static void gf8_muladd_F3(void *out, void *in) +static void +gf8_muladd_F3(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10774,7 +11018,8 @@ static void gf8_muladd_F3(void *out, void *in) } } -static void gf8_muladd_F4(void *out, void *in) +static void +gf8_muladd_F4(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10817,7 +11062,8 @@ static void gf8_muladd_F4(void *out, void *in) } } -static void gf8_muladd_F5(void *out, void *in) +static void +gf8_muladd_F5(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10860,7 +11106,8 @@ static void gf8_muladd_F5(void *out, void *in) } } -static void gf8_muladd_F6(void *out, void *in) +static void +gf8_muladd_F6(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10904,7 +11151,8 @@ static void gf8_muladd_F6(void *out, void *in) } } -static void gf8_muladd_F7(void *out, void *in) +static void +gf8_muladd_F7(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10947,7 +11195,8 @@ static void gf8_muladd_F7(void *out, void *in) } } -static void gf8_muladd_F8(void *out, void *in) +static void +gf8_muladd_F8(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -10992,7 +11241,8 @@ static void gf8_muladd_F8(void *out, void *in) } } -static void gf8_muladd_F9(void *out, void *in) +static void +gf8_muladd_F9(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -11039,7 +11289,8 @@ static void gf8_muladd_F9(void *out, void *in) } } -static void gf8_muladd_FA(void *out, void *in) +static void +gf8_muladd_FA(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -11085,7 +11336,8 @@ static void gf8_muladd_FA(void *out, void *in) } } -static void gf8_muladd_FB(void *out, void *in) +static void +gf8_muladd_FB(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -11129,7 +11381,8 @@ static void gf8_muladd_FB(void *out, void *in) } } -static void gf8_muladd_FC(void *out, void *in) +static void +gf8_muladd_FC(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -11175,7 +11428,8 @@ static void gf8_muladd_FC(void *out, void *in) } } -static void gf8_muladd_FD(void *out, void *in) +static void +gf8_muladd_FD(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -11221,7 +11475,8 @@ static void gf8_muladd_FD(void *out, void *in) } } -static void gf8_muladd_FE(void *out, void *in) +static void +gf8_muladd_FE(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -11268,7 +11523,8 @@ static void gf8_muladd_FE(void *out, void *in) } } -static void gf8_muladd_FF(void *out, void *in) +static void +gf8_muladd_FF(void *out, void *in) { unsigned int i; uint64_t *in_ptr = (uint64_t *)in; @@ -11315,75 +11571,65 @@ static void gf8_muladd_FF(void *out, void *in) } static void (*gf8_muladd[])(void *out, void *in) = { - gf8_muladd_00, gf8_muladd_01, gf8_muladd_02, gf8_muladd_03, - gf8_muladd_04, gf8_muladd_05, gf8_muladd_06, gf8_muladd_07, - gf8_muladd_08, gf8_muladd_09, gf8_muladd_0A, gf8_muladd_0B, - gf8_muladd_0C, gf8_muladd_0D, gf8_muladd_0E, gf8_muladd_0F, - gf8_muladd_10, gf8_muladd_11, gf8_muladd_12, gf8_muladd_13, - gf8_muladd_14, gf8_muladd_15, gf8_muladd_16, gf8_muladd_17, - gf8_muladd_18, gf8_muladd_19, gf8_muladd_1A, gf8_muladd_1B, - gf8_muladd_1C, gf8_muladd_1D, gf8_muladd_1E, gf8_muladd_1F, - gf8_muladd_20, gf8_muladd_21, gf8_muladd_22, gf8_muladd_23, - gf8_muladd_24, gf8_muladd_25, gf8_muladd_26, gf8_muladd_27, - gf8_muladd_28, gf8_muladd_29, gf8_muladd_2A, gf8_muladd_2B, - gf8_muladd_2C, gf8_muladd_2D, gf8_muladd_2E, gf8_muladd_2F, - gf8_muladd_30, gf8_muladd_31, gf8_muladd_32, gf8_muladd_33, - gf8_muladd_34, gf8_muladd_35, gf8_muladd_36, gf8_muladd_37, - gf8_muladd_38, gf8_muladd_39, gf8_muladd_3A, gf8_muladd_3B, - gf8_muladd_3C, gf8_muladd_3D, gf8_muladd_3E, gf8_muladd_3F, - gf8_muladd_40, gf8_muladd_41, gf8_muladd_42, gf8_muladd_43, - gf8_muladd_44, gf8_muladd_45, gf8_muladd_46, gf8_muladd_47, - gf8_muladd_48, gf8_muladd_49, gf8_muladd_4A, gf8_muladd_4B, - gf8_muladd_4C, gf8_muladd_4D, gf8_muladd_4E, gf8_muladd_4F, - gf8_muladd_50, gf8_muladd_51, gf8_muladd_52, gf8_muladd_53, - gf8_muladd_54, gf8_muladd_55, gf8_muladd_56, gf8_muladd_57, - gf8_muladd_58, gf8_muladd_59, gf8_muladd_5A, gf8_muladd_5B, - gf8_muladd_5C, gf8_muladd_5D, gf8_muladd_5E, gf8_muladd_5F, - gf8_muladd_60, gf8_muladd_61, gf8_muladd_62, gf8_muladd_63, - gf8_muladd_64, gf8_muladd_65, gf8_muladd_66, gf8_muladd_67, - gf8_muladd_68, gf8_muladd_69, gf8_muladd_6A, gf8_muladd_6B, - gf8_muladd_6C, gf8_muladd_6D, gf8_muladd_6E, gf8_muladd_6F, - gf8_muladd_70, gf8_muladd_71, gf8_muladd_72, gf8_muladd_73, - gf8_muladd_74, gf8_muladd_75, gf8_muladd_76, gf8_muladd_77, - gf8_muladd_78, gf8_muladd_79, gf8_muladd_7A, gf8_muladd_7B, - gf8_muladd_7C, gf8_muladd_7D, gf8_muladd_7E, gf8_muladd_7F, - gf8_muladd_80, gf8_muladd_81, gf8_muladd_82, gf8_muladd_83, - gf8_muladd_84, gf8_muladd_85, gf8_muladd_86, gf8_muladd_87, - gf8_muladd_88, gf8_muladd_89, gf8_muladd_8A, gf8_muladd_8B, - gf8_muladd_8C, gf8_muladd_8D, gf8_muladd_8E, gf8_muladd_8F, - gf8_muladd_90, gf8_muladd_91, gf8_muladd_92, gf8_muladd_93, - gf8_muladd_94, gf8_muladd_95, gf8_muladd_96, gf8_muladd_97, - gf8_muladd_98, gf8_muladd_99, gf8_muladd_9A, gf8_muladd_9B, - gf8_muladd_9C, gf8_muladd_9D, gf8_muladd_9E, gf8_muladd_9F, - gf8_muladd_A0, gf8_muladd_A1, gf8_muladd_A2, gf8_muladd_A3, - gf8_muladd_A4, gf8_muladd_A5, gf8_muladd_A6, gf8_muladd_A7, - gf8_muladd_A8, gf8_muladd_A9, gf8_muladd_AA, gf8_muladd_AB, - gf8_muladd_AC, gf8_muladd_AD, gf8_muladd_AE, gf8_muladd_AF, - gf8_muladd_B0, gf8_muladd_B1, gf8_muladd_B2, gf8_muladd_B3, - gf8_muladd_B4, gf8_muladd_B5, gf8_muladd_B6, gf8_muladd_B7, - gf8_muladd_B8, gf8_muladd_B9, gf8_muladd_BA, gf8_muladd_BB, - gf8_muladd_BC, gf8_muladd_BD, gf8_muladd_BE, gf8_muladd_BF, - gf8_muladd_C0, gf8_muladd_C1, gf8_muladd_C2, gf8_muladd_C3, - gf8_muladd_C4, gf8_muladd_C5, gf8_muladd_C6, gf8_muladd_C7, - gf8_muladd_C8, gf8_muladd_C9, gf8_muladd_CA, gf8_muladd_CB, - gf8_muladd_CC, gf8_muladd_CD, gf8_muladd_CE, gf8_muladd_CF, - gf8_muladd_D0, gf8_muladd_D1, gf8_muladd_D2, gf8_muladd_D3, - gf8_muladd_D4, gf8_muladd_D5, gf8_muladd_D6, gf8_muladd_D7, - gf8_muladd_D8, gf8_muladd_D9, gf8_muladd_DA, gf8_muladd_DB, - gf8_muladd_DC, gf8_muladd_DD, gf8_muladd_DE, gf8_muladd_DF, - gf8_muladd_E0, gf8_muladd_E1, gf8_muladd_E2, gf8_muladd_E3, - gf8_muladd_E4, gf8_muladd_E5, gf8_muladd_E6, gf8_muladd_E7, - gf8_muladd_E8, gf8_muladd_E9, gf8_muladd_EA, gf8_muladd_EB, - gf8_muladd_EC, gf8_muladd_ED, gf8_muladd_EE, gf8_muladd_EF, - gf8_muladd_F0, gf8_muladd_F1, gf8_muladd_F2, gf8_muladd_F3, - gf8_muladd_F4, gf8_muladd_F5, gf8_muladd_F6, gf8_muladd_F7, - gf8_muladd_F8, gf8_muladd_F9, gf8_muladd_FA, gf8_muladd_FB, - gf8_muladd_FC, gf8_muladd_FD, gf8_muladd_FE, gf8_muladd_FF + gf8_muladd_00, gf8_muladd_01, gf8_muladd_02, gf8_muladd_03, gf8_muladd_04, + gf8_muladd_05, gf8_muladd_06, gf8_muladd_07, gf8_muladd_08, gf8_muladd_09, + gf8_muladd_0A, gf8_muladd_0B, gf8_muladd_0C, gf8_muladd_0D, gf8_muladd_0E, + gf8_muladd_0F, gf8_muladd_10, gf8_muladd_11, gf8_muladd_12, gf8_muladd_13, + gf8_muladd_14, gf8_muladd_15, gf8_muladd_16, gf8_muladd_17, gf8_muladd_18, + gf8_muladd_19, gf8_muladd_1A, gf8_muladd_1B, gf8_muladd_1C, gf8_muladd_1D, + gf8_muladd_1E, gf8_muladd_1F, gf8_muladd_20, gf8_muladd_21, gf8_muladd_22, + gf8_muladd_23, gf8_muladd_24, gf8_muladd_25, gf8_muladd_26, gf8_muladd_27, + gf8_muladd_28, gf8_muladd_29, gf8_muladd_2A, gf8_muladd_2B, gf8_muladd_2C, + gf8_muladd_2D, gf8_muladd_2E, gf8_muladd_2F, gf8_muladd_30, gf8_muladd_31, + gf8_muladd_32, gf8_muladd_33, gf8_muladd_34, gf8_muladd_35, gf8_muladd_36, + gf8_muladd_37, gf8_muladd_38, gf8_muladd_39, gf8_muladd_3A, gf8_muladd_3B, + gf8_muladd_3C, gf8_muladd_3D, gf8_muladd_3E, gf8_muladd_3F, gf8_muladd_40, + gf8_muladd_41, gf8_muladd_42, gf8_muladd_43, gf8_muladd_44, gf8_muladd_45, + gf8_muladd_46, gf8_muladd_47, gf8_muladd_48, gf8_muladd_49, gf8_muladd_4A, + gf8_muladd_4B, gf8_muladd_4C, gf8_muladd_4D, gf8_muladd_4E, gf8_muladd_4F, + gf8_muladd_50, gf8_muladd_51, gf8_muladd_52, gf8_muladd_53, gf8_muladd_54, + gf8_muladd_55, gf8_muladd_56, gf8_muladd_57, gf8_muladd_58, gf8_muladd_59, + gf8_muladd_5A, gf8_muladd_5B, gf8_muladd_5C, gf8_muladd_5D, gf8_muladd_5E, + gf8_muladd_5F, gf8_muladd_60, gf8_muladd_61, gf8_muladd_62, gf8_muladd_63, + gf8_muladd_64, gf8_muladd_65, gf8_muladd_66, gf8_muladd_67, gf8_muladd_68, + gf8_muladd_69, gf8_muladd_6A, gf8_muladd_6B, gf8_muladd_6C, gf8_muladd_6D, + gf8_muladd_6E, gf8_muladd_6F, gf8_muladd_70, gf8_muladd_71, gf8_muladd_72, + gf8_muladd_73, gf8_muladd_74, gf8_muladd_75, gf8_muladd_76, gf8_muladd_77, + gf8_muladd_78, gf8_muladd_79, gf8_muladd_7A, gf8_muladd_7B, gf8_muladd_7C, + gf8_muladd_7D, gf8_muladd_7E, gf8_muladd_7F, gf8_muladd_80, gf8_muladd_81, + gf8_muladd_82, gf8_muladd_83, gf8_muladd_84, gf8_muladd_85, gf8_muladd_86, + gf8_muladd_87, gf8_muladd_88, gf8_muladd_89, gf8_muladd_8A, gf8_muladd_8B, + gf8_muladd_8C, gf8_muladd_8D, gf8_muladd_8E, gf8_muladd_8F, gf8_muladd_90, + gf8_muladd_91, gf8_muladd_92, gf8_muladd_93, gf8_muladd_94, gf8_muladd_95, + gf8_muladd_96, gf8_muladd_97, gf8_muladd_98, gf8_muladd_99, gf8_muladd_9A, + gf8_muladd_9B, gf8_muladd_9C, gf8_muladd_9D, gf8_muladd_9E, gf8_muladd_9F, + gf8_muladd_A0, gf8_muladd_A1, gf8_muladd_A2, gf8_muladd_A3, gf8_muladd_A4, + gf8_muladd_A5, gf8_muladd_A6, gf8_muladd_A7, gf8_muladd_A8, gf8_muladd_A9, + gf8_muladd_AA, gf8_muladd_AB, gf8_muladd_AC, gf8_muladd_AD, gf8_muladd_AE, + gf8_muladd_AF, gf8_muladd_B0, gf8_muladd_B1, gf8_muladd_B2, gf8_muladd_B3, + gf8_muladd_B4, gf8_muladd_B5, gf8_muladd_B6, gf8_muladd_B7, gf8_muladd_B8, + gf8_muladd_B9, gf8_muladd_BA, gf8_muladd_BB, gf8_muladd_BC, gf8_muladd_BD, + gf8_muladd_BE, gf8_muladd_BF, gf8_muladd_C0, gf8_muladd_C1, gf8_muladd_C2, + gf8_muladd_C3, gf8_muladd_C4, gf8_muladd_C5, gf8_muladd_C6, gf8_muladd_C7, + gf8_muladd_C8, gf8_muladd_C9, gf8_muladd_CA, gf8_muladd_CB, gf8_muladd_CC, + gf8_muladd_CD, gf8_muladd_CE, gf8_muladd_CF, gf8_muladd_D0, gf8_muladd_D1, + gf8_muladd_D2, gf8_muladd_D3, gf8_muladd_D4, gf8_muladd_D5, gf8_muladd_D6, + gf8_muladd_D7, gf8_muladd_D8, gf8_muladd_D9, gf8_muladd_DA, gf8_muladd_DB, + gf8_muladd_DC, gf8_muladd_DD, gf8_muladd_DE, gf8_muladd_DF, gf8_muladd_E0, + gf8_muladd_E1, gf8_muladd_E2, gf8_muladd_E3, gf8_muladd_E4, gf8_muladd_E5, + gf8_muladd_E6, gf8_muladd_E7, gf8_muladd_E8, gf8_muladd_E9, gf8_muladd_EA, + gf8_muladd_EB, gf8_muladd_EC, gf8_muladd_ED, gf8_muladd_EE, gf8_muladd_EF, + gf8_muladd_F0, gf8_muladd_F1, gf8_muladd_F2, gf8_muladd_F3, gf8_muladd_F4, + gf8_muladd_F5, gf8_muladd_F6, gf8_muladd_F7, gf8_muladd_F8, gf8_muladd_F9, + gf8_muladd_FA, gf8_muladd_FB, gf8_muladd_FC, gf8_muladd_FD, gf8_muladd_FE, + gf8_muladd_FF}; + +static uint64_t zero[EC_METHOD_WORD_SIZE * 8] = { + 0, }; -static uint64_t zero[EC_METHOD_WORD_SIZE * 8] = {0, }; - -void ec_code_c_prepare(ec_gf_t *gf, uint32_t *values, uint32_t count) +void +ec_code_c_prepare(ec_gf_t *gf, uint32_t *values, uint32_t count) { uint32_t i, last, tmp; @@ -11397,8 +11643,9 @@ void ec_code_c_prepare(ec_gf_t *gf, uint32_t *values, uint32_t count) } } -void ec_code_c_linear(void *dst, void *src, uint64_t offset, uint32_t *values, - uint32_t count) +void +ec_code_c_linear(void *dst, void *src, uint64_t offset, uint32_t *values, + uint32_t count) { src += offset; gf8_muladd_00(dst, src); @@ -11409,8 +11656,9 @@ void ec_code_c_linear(void *dst, void *src, uint64_t offset, uint32_t *values, } } -void ec_code_c_interleaved(void *dst, void **src, uint64_t offset, - uint32_t *values, uint32_t count) +void +ec_code_c_interleaved(void *dst, void **src, uint64_t offset, uint32_t *values, + uint32_t count) { uint32_t i, last, tmp; diff --git a/xlators/cluster/ec/src/ec-code-intel.c b/xlators/cluster/ec/src/ec-code-intel.c index b9fdcad4421..f1c4e13e321 100644 --- a/xlators/cluster/ec/src/ec-code-intel.c +++ b/xlators/cluster/ec/src/ec-code-intel.c @@ -71,16 +71,15 @@ ec_code_intel_vex(ec_code_intel_t *intel, gf_boolean_t w, gf_boolean_t l, uint32_t reg) { ec_code_intel_rex(intel, w); - if (((intel->rex.w == 1) || - (intel->rex.x == 0) || - (intel->rex.b == 0)) || + if (((intel->rex.w == 1) || (intel->rex.x == 0) || (intel->rex.b == 0)) || ((opcode != VEX_OPCODE_NONE) && (opcode != VEX_OPCODE_0F))) { intel->rex.present = _gf_false; intel->vex.bytes = 3; intel->vex.data[0] = 0xC4; intel->vex.data[1] = ((intel->rex.r << 7) | (intel->rex.x << 6) | - (intel->rex.b << 5) | opcode) ^ 0xE0; + (intel->rex.b << 5) | opcode) ^ + 0xE0; intel->vex.data[2] = (intel->rex.w << 7) | ((~reg & 0x0F) << 3) | (l ? 0x04 : 0x00) | prefix; } else { @@ -214,22 +213,17 @@ ec_code_intel_emit(ec_code_builder_t *builder, ec_code_intel_t *intel) insn[count++] = intel->vex.data[i]; } if (intel->rex.present) { - insn[count++] = 0x40 | - (intel->rex.w << 3) | - (intel->rex.r << 2) | - (intel->rex.x << 1) | - (intel->rex.b << 0); + insn[count++] = 0x40 | (intel->rex.w << 3) | (intel->rex.r << 2) | + (intel->rex.x << 1) | (intel->rex.b << 0); } for (i = 0; i < intel->opcode.bytes; i++) { insn[count++] = intel->opcode.data[i]; } if (intel->modrm.present) { - insn[count++] = (intel->modrm.mod << 6) | - (intel->modrm.reg << 3) | + insn[count++] = (intel->modrm.mod << 6) | (intel->modrm.reg << 3) | (intel->modrm.rm << 0); if (intel->sib.present) { - insn[count++] = (intel->sib.scale << 6) | - (intel->sib.index << 3) | + insn[count++] = (intel->sib.scale << 6) | (intel->sib.index << 3) | (intel->sib.base << 0); } } @@ -467,9 +461,9 @@ ec_code_intel_op_mov_sse2m(ec_code_builder_t *builder, uint32_t src, } void -ec_code_intel_op_mov_m2sse(ec_code_builder_t *builder, - ec_code_intel_reg_t base, ec_code_intel_reg_t index, - uint32_t scale, int32_t offset, uint32_t dst) +ec_code_intel_op_mov_m2sse(ec_code_builder_t *builder, ec_code_intel_reg_t base, + ec_code_intel_reg_t index, uint32_t scale, + int32_t offset, uint32_t dst) { ec_code_intel_t intel; @@ -500,9 +494,9 @@ ec_code_intel_op_xor_sse2sse(ec_code_builder_t *builder, uint32_t src, } void -ec_code_intel_op_xor_m2sse(ec_code_builder_t *builder, - ec_code_intel_reg_t base, ec_code_intel_reg_t index, - uint32_t scale, int32_t offset, uint32_t dst) +ec_code_intel_op_xor_m2sse(ec_code_builder_t *builder, ec_code_intel_reg_t base, + ec_code_intel_reg_t index, uint32_t scale, + int32_t offset, uint32_t dst) { ec_code_intel_t intel; @@ -526,8 +520,8 @@ ec_code_intel_op_mov_avx2avx(ec_code_builder_t *builder, uint32_t src, ec_code_intel_modrm_reg(&intel, src, dst); ec_code_intel_op_1(&intel, 0x6F, 0); - ec_code_intel_vex(&intel, _gf_false, _gf_true, VEX_OPCODE_0F, - VEX_PREFIX_66, VEX_REG_NONE); + ec_code_intel_vex(&intel, _gf_false, _gf_true, VEX_OPCODE_0F, VEX_PREFIX_66, + VEX_REG_NONE); ec_code_intel_emit(builder, &intel); } @@ -543,16 +537,16 @@ ec_code_intel_op_mov_avx2m(ec_code_builder_t *builder, uint32_t src, ec_code_intel_modrm_mem(&intel, src, base, index, scale, offset); ec_code_intel_op_1(&intel, 0x7F, 0); - ec_code_intel_vex(&intel, _gf_false, _gf_true, VEX_OPCODE_0F, - VEX_PREFIX_66, VEX_REG_NONE); + ec_code_intel_vex(&intel, _gf_false, _gf_true, VEX_OPCODE_0F, VEX_PREFIX_66, + VEX_REG_NONE); ec_code_intel_emit(builder, &intel); } void -ec_code_intel_op_mov_m2avx(ec_code_builder_t *builder, - ec_code_intel_reg_t base, ec_code_intel_reg_t index, - uint32_t scale, int32_t offset, uint32_t dst) +ec_code_intel_op_mov_m2avx(ec_code_builder_t *builder, ec_code_intel_reg_t base, + ec_code_intel_reg_t index, uint32_t scale, + int32_t offset, uint32_t dst) { ec_code_intel_t intel; @@ -560,8 +554,8 @@ ec_code_intel_op_mov_m2avx(ec_code_builder_t *builder, ec_code_intel_modrm_mem(&intel, dst, base, index, scale, offset); ec_code_intel_op_1(&intel, 0x6F, 0); - ec_code_intel_vex(&intel, _gf_false, _gf_true, VEX_OPCODE_0F, - VEX_PREFIX_66, VEX_REG_NONE); + ec_code_intel_vex(&intel, _gf_false, _gf_true, VEX_OPCODE_0F, VEX_PREFIX_66, + VEX_REG_NONE); ec_code_intel_emit(builder, &intel); } @@ -576,16 +570,16 @@ ec_code_intel_op_xor_avx2avx(ec_code_builder_t *builder, uint32_t src, ec_code_intel_modrm_reg(&intel, src, dst); ec_code_intel_op_1(&intel, 0xEF, 0); - ec_code_intel_vex(&intel, _gf_false, _gf_true, VEX_OPCODE_0F, - VEX_PREFIX_66, dst); + ec_code_intel_vex(&intel, _gf_false, _gf_true, VEX_OPCODE_0F, VEX_PREFIX_66, + dst); ec_code_intel_emit(builder, &intel); } void -ec_code_intel_op_xor_m2avx(ec_code_builder_t *builder, - ec_code_intel_reg_t base, ec_code_intel_reg_t index, - uint32_t scale, int32_t offset, uint32_t dst) +ec_code_intel_op_xor_m2avx(ec_code_builder_t *builder, ec_code_intel_reg_t base, + ec_code_intel_reg_t index, uint32_t scale, + int32_t offset, uint32_t dst) { ec_code_intel_t intel; @@ -593,8 +587,8 @@ ec_code_intel_op_xor_m2avx(ec_code_builder_t *builder, ec_code_intel_modrm_mem(&intel, dst, base, index, scale, offset); ec_code_intel_op_1(&intel, 0xEF, 0); - ec_code_intel_vex(&intel, _gf_false, _gf_true, VEX_OPCODE_0F, - VEX_PREFIX_66, dst); + ec_code_intel_vex(&intel, _gf_false, _gf_true, VEX_OPCODE_0F, VEX_PREFIX_66, + dst); ec_code_intel_emit(builder, &intel); } diff --git a/xlators/cluster/ec/src/ec-code-sse.c b/xlators/cluster/ec/src/ec-code-sse.c index 6f2c6fa593f..e11e7ff8400 100644 --- a/xlators/cluster/ec/src/ec-code-sse.c +++ b/xlators/cluster/ec/src/ec-code-sse.c @@ -34,10 +34,9 @@ ec_code_sse_load(ec_code_builder_t *builder, uint32_t dst, uint32_t idx, uint32_t bit) { if (builder->linear) { - ec_code_intel_op_mov_m2sse(builder, REG_SI, REG_DX, 1, - idx * builder->width * builder->bits + - bit * builder->width, - dst); + ec_code_intel_op_mov_m2sse( + builder, REG_SI, REG_DX, 1, + idx * builder->width * builder->bits + bit * builder->width, dst); } else { if (builder->base != idx) { ec_code_intel_op_mov_m2r(builder, REG_SI, REG_NULL, 0, idx * 8, @@ -73,10 +72,9 @@ ec_code_sse_xorm(ec_code_builder_t *builder, uint32_t dst, uint32_t idx, uint32_t bit) { if (builder->linear) { - ec_code_intel_op_xor_m2sse(builder, REG_SI, REG_DX, 1, - idx * builder->width * builder->bits + - bit * builder->width, - dst); + ec_code_intel_op_xor_m2sse( + builder, REG_SI, REG_DX, 1, + idx * builder->width * builder->bits + bit * builder->width, dst); } else { if (builder->base != idx) { ec_code_intel_op_mov_m2r(builder, REG_SI, REG_NULL, 0, idx * 8, @@ -88,21 +86,16 @@ ec_code_sse_xorm(ec_code_builder_t *builder, uint32_t dst, uint32_t idx, } } -static char *ec_code_sse_needed_flags[] = { - "sse2", - NULL -}; +static char *ec_code_sse_needed_flags[] = {"sse2", NULL}; -ec_code_gen_t ec_code_gen_sse = { - .name = "sse", - .flags = ec_code_sse_needed_flags, - .width = 16, - .prolog = ec_code_sse_prolog, - .epilog = ec_code_sse_epilog, - .load = ec_code_sse_load, - .store = ec_code_sse_store, - .copy = ec_code_sse_copy, - .xor2 = ec_code_sse_xor2, - .xor3 = NULL, - .xorm = ec_code_sse_xorm -}; +ec_code_gen_t ec_code_gen_sse = {.name = "sse", + .flags = ec_code_sse_needed_flags, + .width = 16, + .prolog = ec_code_sse_prolog, + .epilog = ec_code_sse_epilog, + .load = ec_code_sse_load, + .store = ec_code_sse_store, + .copy = ec_code_sse_copy, + .xor2 = ec_code_sse_xor2, + .xor3 = NULL, + .xorm = ec_code_sse_xorm}; diff --git a/xlators/cluster/ec/src/ec-code-x64.c b/xlators/cluster/ec/src/ec-code-x64.c index cfec4b3be7a..26565b4493f 100644 --- a/xlators/cluster/ec/src/ec-code-x64.c +++ b/xlators/cluster/ec/src/ec-code-x64.c @@ -14,8 +14,7 @@ static ec_code_intel_reg_t ec_code_x64_regmap[] = { REG_AX, REG_CX, REG_BP, REG_8, REG_9, REG_10, - REG_11, REG_12, REG_13, REG_14, REG_15 -}; + REG_11, REG_12, REG_13, REG_14, REG_15}; static void ec_code_x64_prolog(ec_code_builder_t *builder) @@ -68,10 +67,9 @@ ec_code_x64_load(ec_code_builder_t *builder, uint32_t dst, uint32_t idx, dst = ec_code_x64_regmap[dst]; if (builder->linear) { - ec_code_intel_op_mov_m2r(builder, REG_SI, REG_DX, 1, - idx * builder->width * builder->bits + - bit * builder->width, - dst); + ec_code_intel_op_mov_m2r( + builder, REG_SI, REG_DX, 1, + idx * builder->width * builder->bits + bit * builder->width, dst); } else { if (builder->base != idx) { ec_code_intel_op_mov_m2r(builder, REG_SI, REG_NULL, 0, idx * 8, @@ -117,10 +115,9 @@ ec_code_x64_xorm(ec_code_builder_t *builder, uint32_t dst, uint32_t idx, dst = ec_code_x64_regmap[dst]; if (builder->linear) { - ec_code_intel_op_xor_m2r(builder, REG_SI, REG_DX, 1, - idx * builder->width * builder->bits + - bit * builder->width, - dst); + ec_code_intel_op_xor_m2r( + builder, REG_SI, REG_DX, 1, + idx * builder->width * builder->bits + bit * builder->width, dst); } else { if (builder->base != idx) { ec_code_intel_op_mov_m2r(builder, REG_SI, REG_NULL, 0, idx * 8, @@ -132,20 +129,16 @@ ec_code_x64_xorm(ec_code_builder_t *builder, uint32_t dst, uint32_t idx, } } -static char *ec_code_x64_needed_flags[] = { - NULL -}; - -ec_code_gen_t ec_code_gen_x64 = { - .name = "x64", - .flags = ec_code_x64_needed_flags, - .width = sizeof(uint64_t), - .prolog = ec_code_x64_prolog, - .epilog = ec_code_x64_epilog, - .load = ec_code_x64_load, - .store = ec_code_x64_store, - .copy = ec_code_x64_copy, - .xor2 = ec_code_x64_xor2, - .xor3 = NULL, - .xorm = ec_code_x64_xorm -}; +static char *ec_code_x64_needed_flags[] = {NULL}; + +ec_code_gen_t ec_code_gen_x64 = {.name = "x64", + .flags = ec_code_x64_needed_flags, + .width = sizeof(uint64_t), + .prolog = ec_code_x64_prolog, + .epilog = ec_code_x64_epilog, + .load = ec_code_x64_load, + .store = ec_code_x64_store, + .copy = ec_code_x64_copy, + .xor2 = ec_code_x64_xor2, + .xor3 = NULL, + .xorm = ec_code_x64_xorm}; diff --git a/xlators/cluster/ec/src/ec-code.c b/xlators/cluster/ec/src/ec-code.c index e33cb42d9dc..70878d794ca 100644 --- a/xlators/cluster/ec/src/ec-code.c +++ b/xlators/cluster/ec/src/ec-code.c @@ -47,13 +47,13 @@ struct _ec_code_proc; typedef struct _ec_code_proc ec_code_proc_t; struct _ec_code_proc { - int32_t fd; + int32_t fd; gf_boolean_t eof; gf_boolean_t error; gf_boolean_t skip; - ssize_t size; - ssize_t pos; - char buffer[EC_PROC_BUFFER_SIZE]; + ssize_t size; + ssize_t pos; + char buffer[EC_PROC_BUFFER_SIZE]; }; static ec_code_gen_t *ec_code_gen_table[] = { @@ -66,8 +66,7 @@ static ec_code_gen_t *ec_code_gen_table[] = { #ifdef USE_EC_DYNAMIC_X64 &ec_code_gen_x64, #endif - NULL -}; + NULL}; static void ec_code_arg_set(ec_code_arg_t *arg, uint32_t value) @@ -84,7 +83,6 @@ ec_code_arg_assign(ec_code_builder_t *builder, ec_code_op_t *op, if (builder->regs <= reg) { builder->regs = reg + 1; } - } static void @@ -202,17 +200,17 @@ static void ec_code_dup(ec_code_builder_t *builder, ec_gf_op_t *op) { switch (op->op) { - case EC_GF_OP_COPY: - ec_code_copy(builder, op->arg1, op->arg2); - break; - case EC_GF_OP_XOR2: - ec_code_xor2(builder, op->arg1, op->arg2); - break; - case EC_GF_OP_XOR3: - ec_code_xor3(builder, op->arg1, op->arg2, op->arg3); - break; - default: - break; + case EC_GF_OP_COPY: + ec_code_copy(builder, op->arg1, op->arg2); + break; + case EC_GF_OP_XOR2: + ec_code_xor2(builder, op->arg1, op->arg2); + break; + case EC_GF_OP_XOR3: + ec_code_xor3(builder, op->arg1, op->arg2, op->arg3); + break; + default: + break; } } @@ -285,8 +283,9 @@ ec_code_prepare(ec_code_t *code, uint32_t count, uint32_t width, count *= code->gf->bits + code->gf->max_ops; count += code->gf->bits; - builder = GF_MALLOC(sizeof(ec_code_builder_t) + - sizeof(ec_code_op_t) * count, ec_mt_ec_code_builder_t); + builder = GF_MALLOC( + sizeof(ec_code_builder_t) + sizeof(ec_code_op_t) * count, + ec_mt_ec_code_builder_t); if (builder == NULL) { return EC_ERR(ENOMEM); } @@ -331,15 +330,15 @@ ec_code_chunk_from_space(ec_code_space_t *space) static void * ec_code_to_executable(ec_code_space_t *space, void *addr) { - return (void *)((uintptr_t)addr - (uintptr_t)space - + (uintptr_t)space->exec); + return (void *)((uintptr_t)addr - (uintptr_t)space + + (uintptr_t)space->exec); } static void * ec_code_from_executable(ec_code_space_t *space, void *addr) { - return (void *)((uintptr_t)addr - (uintptr_t)space->exec - + (uintptr_t)space); + return (void *)((uintptr_t)addr - (uintptr_t)space->exec + + (uintptr_t)space); } static void * @@ -395,105 +394,105 @@ ec_code_chunk_touch(ec_code_chunk_t *prev, ec_code_chunk_t *next) static ec_code_space_t * ec_code_space_create(ec_code_t *code, size_t size) { - char path[] = GLUSTERFS_LIBEXECDIR "/ec-code-dynamic.XXXXXX"; - ec_code_space_t *space; - void *exec; - int32_t fd, err; - - /* We need to create memory areas to store the generated dynamic code. - * Obviously these areas need to be written to be able to create the - * code and they also need to be executable to execute it. - * - * However it's a bad practice to have a memory region that is both - * writable *and* executable. In fact, selinux forbids this and causes - * attempts to do so to fail (unless specifically configured). - * - * To solve the problem we'll use two distinct memory areas mapped to - * the same physical storage. One of the memory areas will have write - * permission, and the other will have execute permission. Both areas - * will have the same contents. The physical storage will be a regular - * file that will be mmapped to both areas. - */ - - /* We need to create a temporary file as the backend storage for the - * memory mapped areas. */ - /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */ - fd = mkstemp(path); - if (fd < 0) { - err = errno; - gf_msg(THIS->name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED, - "Unable to create a temporary file for the ec dynamic " - "code"); - space = EC_ERR(err); - goto done; - } - /* Once created we don't need to keep it in the file system. It will - * still exist until we close the last file descriptor or unmap the - * memory areas bound to the file. */ - sys_unlink(path); - - size = (size + EC_CODE_ALIGN - 1) & ~(EC_CODE_ALIGN - 1); - if (sys_ftruncate(fd, size) < 0) { - err = errno; - gf_msg(THIS->name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED, - "Unable to resize the file for the ec dynamic code"); - space = EC_ERR(err); - goto done_close; - } + char path[] = GLUSTERFS_LIBEXECDIR "/ec-code-dynamic.XXXXXX"; + ec_code_space_t *space; + void *exec; + int32_t fd, err; + + /* We need to create memory areas to store the generated dynamic code. + * Obviously these areas need to be written to be able to create the + * code and they also need to be executable to execute it. + * + * However it's a bad practice to have a memory region that is both + * writable *and* executable. In fact, selinux forbids this and causes + * attempts to do so to fail (unless specifically configured). + * + * To solve the problem we'll use two distinct memory areas mapped to + * the same physical storage. One of the memory areas will have write + * permission, and the other will have execute permission. Both areas + * will have the same contents. The physical storage will be a regular + * file that will be mmapped to both areas. + */ + + /* We need to create a temporary file as the backend storage for the + * memory mapped areas. */ + /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */ + fd = mkstemp(path); + if (fd < 0) { + err = errno; + gf_msg(THIS->name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED, + "Unable to create a temporary file for the ec dynamic " + "code"); + space = EC_ERR(err); + goto done; + } + /* Once created we don't need to keep it in the file system. It will + * still exist until we close the last file descriptor or unmap the + * memory areas bound to the file. */ + sys_unlink(path); + + size = (size + EC_CODE_ALIGN - 1) & ~(EC_CODE_ALIGN - 1); + if (sys_ftruncate(fd, size) < 0) { + err = errno; + gf_msg(THIS->name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED, + "Unable to resize the file for the ec dynamic code"); + space = EC_ERR(err); + goto done_close; + } - /* This creates an executable memory area to be able to run the - * generated fragments of code. */ - exec = mmap(NULL, size, PROT_READ | PROT_EXEC, MAP_SHARED, fd, 0); - if (exec == MAP_FAILED) { - err = errno; - gf_msg(THIS->name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED, - "Unable to map the executable area for the ec dynamic " - "code"); - space = EC_ERR(err); - goto done_close; - } - /* It's not important to check the return value of mlock(). If it fails - * everything will continue to work normally. */ - mlock(exec, size); - - /* This maps a read/write memory area to be able to create the dynamici - * code. */ - space = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - if (space == MAP_FAILED) { - err = errno; - gf_msg(THIS->name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED, - "Unable to map the writable area for the ec dynamic " - "code"); - space = EC_ERR(err); - - munmap(exec, size); - - goto done_close; - } + /* This creates an executable memory area to be able to run the + * generated fragments of code. */ + exec = mmap(NULL, size, PROT_READ | PROT_EXEC, MAP_SHARED, fd, 0); + if (exec == MAP_FAILED) { + err = errno; + gf_msg(THIS->name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED, + "Unable to map the executable area for the ec dynamic " + "code"); + space = EC_ERR(err); + goto done_close; + } + /* It's not important to check the return value of mlock(). If it fails + * everything will continue to work normally. */ + mlock(exec, size); + + /* This maps a read/write memory area to be able to create the dynamici + * code. */ + space = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (space == MAP_FAILED) { + err = errno; + gf_msg(THIS->name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED, + "Unable to map the writable area for the ec dynamic " + "code"); + space = EC_ERR(err); + + munmap(exec, size); + + goto done_close; + } - space->exec = exec; - space->size = size; - space->code = code; - list_add_tail(&space->list, &code->spaces); - INIT_LIST_HEAD(&space->chunks); + space->exec = exec; + space->size = size; + space->code = code; + list_add_tail(&space->list, &code->spaces); + INIT_LIST_HEAD(&space->chunks); done_close: - /* If everything has succeeded, we already have the memory areas - * mapped. We don't need the file descriptor anymore because the - * backend storage will be there until the mmap()'d regions are - * unmapped. */ - sys_close(fd); + /* If everything has succeeded, we already have the memory areas + * mapped. We don't need the file descriptor anymore because the + * backend storage will be there until the mmap()'d regions are + * unmapped. */ + sys_close(fd); done: - return space; + return space; } static void ec_code_space_destroy(ec_code_space_t *space) { - list_del_init(&space->list); + list_del_init(&space->list); - munmap(space->exec, space->size); - munmap(space, space->size); + munmap(space->exec, space->size); + munmap(space, space->size); } static void @@ -501,7 +500,8 @@ ec_code_chunk_merge(ec_code_chunk_t *chunk) { ec_code_chunk_t *item, *tmp; - list_for_each_entry_safe(item, tmp, &chunk->space->chunks, list) { + list_for_each_entry_safe(item, tmp, &chunk->space->chunks, list) + { if ((uintptr_t)item > (uintptr_t)chunk) { list_add_tail(&chunk->list, &item->list); if (ec_code_chunk_touch(chunk, item)) { @@ -520,8 +520,8 @@ ec_code_chunk_merge(ec_code_chunk_t *chunk) list_add_tail(&chunk->list, &chunk->space->chunks); check: - if (chunk->size == chunk->space->size - ec_code_space_size() - - ec_code_chunk_size()) { + if (chunk->size == + chunk->space->size - ec_code_space_size() - ec_code_chunk_size()) { ec_code_space_destroy(chunk->space); } } @@ -536,9 +536,12 @@ ec_code_space_alloc(ec_code_t *code, size_t size) /* To minimize fragmentation, we only allocate chunks of sizes multiples * of EC_CODE_CHUNK_MIN_SIZE. */ size = ((size + ec_code_chunk_size() + EC_CODE_CHUNK_MIN_SIZE - 1) & - ~(EC_CODE_CHUNK_MIN_SIZE - 1)) - ec_code_chunk_size(); - list_for_each_entry(space, &code->spaces, list) { - list_for_each_entry(chunk, &space->chunks, list) { + ~(EC_CODE_CHUNK_MIN_SIZE - 1)) - + ec_code_chunk_size(); + list_for_each_entry(space, &code->spaces, list) + { + list_for_each_entry(chunk, &space->chunks, list) + { if (chunk->size >= size) { goto out; } @@ -608,26 +611,29 @@ ec_code_write(ec_code_builder_t *builder) for (i = 0; i < builder->count; i++) { op = &builder->ops[i]; switch (op->op) { - case EC_GF_OP_LOAD: - gen->load(builder, op->arg1.value, op->arg2.value, op->arg3.value); - break; - case EC_GF_OP_STORE: - gen->store(builder, op->arg1.value, op->arg3.value); - break; - case EC_GF_OP_COPY: - gen->copy(builder, op->arg1.value, op->arg2.value); - break; - case EC_GF_OP_XOR2: - gen->xor2(builder, op->arg1.value, op->arg2.value); - break; - case EC_GF_OP_XOR3: - gen->xor3(builder, op->arg1.value, op->arg2.value, op->arg3.value); - break; - case EC_GF_OP_XORM: - gen->xorm(builder, op->arg1.value, op->arg2.value, op->arg3.value); - break; - default: - break; + case EC_GF_OP_LOAD: + gen->load(builder, op->arg1.value, op->arg2.value, + op->arg3.value); + break; + case EC_GF_OP_STORE: + gen->store(builder, op->arg1.value, op->arg3.value); + break; + case EC_GF_OP_COPY: + gen->copy(builder, op->arg1.value, op->arg2.value); + break; + case EC_GF_OP_XOR2: + gen->xor2(builder, op->arg1.value, op->arg2.value); + break; + case EC_GF_OP_XOR3: + gen->xor3(builder, op->arg1.value, op->arg2.value, + op->arg3.value); + break; + case EC_GF_OP_XORM: + gen->xorm(builder, op->arg1.value, op->arg2.value, + op->arg3.value); + break; + default: + break; } } gen->epilog(builder); @@ -716,67 +722,65 @@ static void * ec_code_build_dynamic(ec_code_t *code, uint32_t width, uint32_t *values, uint32_t count, gf_boolean_t linear) { - ec_code_builder_t *builder; - uint32_t offset, val, next; + ec_code_builder_t *builder; + uint32_t offset, val, next; - builder = ec_code_prepare(code, count, width, linear); - if (EC_IS_ERR(builder)) { - return builder; - } + builder = ec_code_prepare(code, count, width, linear); + if (EC_IS_ERR(builder)) { + return builder; + } - offset = -1; - next = ec_code_value_next(values, count, &offset); - if (next != 0) { - ec_code_gf_load(builder, offset); - do { - val = next; - next = ec_code_value_next(values, count, &offset); - if (next != 0) { - ec_code_gf_mul(builder, ec_gf_div(code->gf, - val, next)); - ec_code_gf_load_xor(builder, offset); - } - } while (next != 0); - ec_code_gf_mul(builder, val); - ec_code_gf_store(builder); - } else { - ec_code_gf_clear(builder); - } + offset = -1; + next = ec_code_value_next(values, count, &offset); + if (next != 0) { + ec_code_gf_load(builder, offset); + do { + val = next; + next = ec_code_value_next(values, count, &offset); + if (next != 0) { + ec_code_gf_mul(builder, ec_gf_div(code->gf, val, next)); + ec_code_gf_load_xor(builder, offset); + } + } while (next != 0); + ec_code_gf_mul(builder, val); + ec_code_gf_store(builder); + } else { + ec_code_gf_clear(builder); + } - return ec_code_compile(builder); + return ec_code_compile(builder); } static void * -ec_code_build(ec_code_t *code, uint32_t width, uint32_t *values, - uint32_t count, gf_boolean_t linear) +ec_code_build(ec_code_t *code, uint32_t width, uint32_t *values, uint32_t count, + gf_boolean_t linear) { - void *func; + void *func; - if (code->gen != NULL) { - func = ec_code_build_dynamic(code, width, values, count, - linear); - if (!EC_IS_ERR(func)) { - return func; - } + if (code->gen != NULL) { + func = ec_code_build_dynamic(code, width, values, count, linear); + if (!EC_IS_ERR(func)) { + return func; + } - gf_msg_debug(THIS->name, GF_LOG_DEBUG, - "Unable to generate dynamic code. Falling back " - "to precompiled code"); + gf_msg_debug(THIS->name, GF_LOG_DEBUG, + "Unable to generate dynamic code. Falling back " + "to precompiled code"); - /* The dynamic code generation shouldn't fail in normal - * conditions, but if it fails at some point, it's very - * probable that it will fail again, so we completely disable - * dynamic code generation. */ - code->gen = NULL; - } + /* The dynamic code generation shouldn't fail in normal + * conditions, but if it fails at some point, it's very + * probable that it will fail again, so we completely disable + * dynamic code generation. */ + code->gen = NULL; + } - ec_code_c_prepare(code->gf, values, count); + ec_code_c_prepare(code->gf, values, count); - if (linear) { - return ec_code_c_linear; - } + if (linear) { + return ec_code_c_linear; + } - return ec_code_c_interleaved; + return ec_code_c_interleaved; } ec_code_func_linear_t @@ -791,17 +795,17 @@ ec_code_func_interleaved_t ec_code_build_interleaved(ec_code_t *code, uint32_t width, uint32_t *values, uint32_t count) { - return (ec_code_func_interleaved_t)ec_code_build(code, width, values, - count, _gf_false); + return (ec_code_func_interleaved_t)ec_code_build(code, width, values, count, + _gf_false); } void ec_code_release(ec_code_t *code, ec_code_func_t *func) { - if ((func->linear != ec_code_c_linear) && - (func->interleaved != ec_code_c_interleaved)) { - ec_code_free(ec_code_chunk_from_func(func->linear)); - } + if ((func->linear != ec_code_c_linear) && + (func->interleaved != ec_code_c_interleaved)) { + ec_code_free(ec_code_chunk_from_func(func->linear)); + } } void @@ -1003,7 +1007,8 @@ ec_code_detect(xlator_t *xl, const char *def) if (ec_code_gen_table[select] == NULL) { gf_msg(xl->name, GF_LOG_WARNING, EINVAL, EC_MSG_EXTENSION_UNKNOWN, "CPU extension '%s' is not known. Not using any cpu " - "extensions", def); + "extensions", + def); return NULL; } diff --git a/xlators/cluster/ec/src/ec-combine.c b/xlators/cluster/ec/src/ec-combine.c index 90e004336c0..551adfac043 100644 --- a/xlators/cluster/ec/src/ec-combine.c +++ b/xlators/cluster/ec/src/ec-combine.c @@ -30,41 +30,38 @@ typedef struct _ec_dict_info ec_dict_info_t; struct _ec_dict_combine; typedef struct _ec_dict_combine ec_dict_combine_t; -struct _ec_dict_info -{ - dict_t * dict; - int32_t count; +struct _ec_dict_info { + dict_t *dict; + int32_t count; }; -struct _ec_dict_combine -{ - ec_cbk_data_t * cbk; - int32_t which; +struct _ec_dict_combine { + ec_cbk_data_t *cbk; + int32_t which; }; int32_t -ec_combine_write (ec_fop_data_t *fop, ec_cbk_data_t *dst, - ec_cbk_data_t *src) +ec_combine_write(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src) { - int valid = 0; + int valid = 0; - if (!fop || !dst || !src) - return 0; + if (!fop || !dst || !src) + return 0; - switch (fop->id) { + switch (fop->id) { case GF_FOP_REMOVEXATTR: case GF_FOP_FREMOVEXATTR: case GF_FOP_SETXATTR: case GF_FOP_FSETXATTR: - return 1; + return 1; case GF_FOP_SYMLINK: case GF_FOP_LINK: case GF_FOP_CREATE: case GF_FOP_MKNOD: case GF_FOP_MKDIR: - valid = 3; - break; + valid = 3; + break; case GF_FOP_UNLINK: case GF_FOP_RMDIR: case GF_FOP_SETATTR: @@ -75,42 +72,40 @@ ec_combine_write (ec_fop_data_t *fop, ec_cbk_data_t *dst, case GF_FOP_FALLOCATE: case GF_FOP_DISCARD: case GF_FOP_ZEROFILL: - valid = 2; - break; + valid = 2; + break; case GF_FOP_RENAME: - valid = 5; - break; + valid = 5; + break; default: - gf_msg_callingfn (fop->xl->name, GF_LOG_WARNING, EINVAL, - EC_MSG_INVALID_FOP, - "Invalid fop %d", fop->id); - return 0; - break; - } + gf_msg_callingfn(fop->xl->name, GF_LOG_WARNING, EINVAL, + EC_MSG_INVALID_FOP, "Invalid fop %d", fop->id); + return 0; + break; + } - if (!ec_iatt_combine(fop, dst->iatt, src->iatt, valid)) { - gf_msg (fop->xl->name, GF_LOG_NOTICE, 0, - EC_MSG_IATT_MISMATCH, - "Mismatching iatt in " - "answers of '%s'", gf_fop_list[fop->id]); - return 0; - } - return 1; + if (!ec_iatt_combine(fop, dst->iatt, src->iatt, valid)) { + gf_msg(fop->xl->name, GF_LOG_NOTICE, 0, EC_MSG_IATT_MISMATCH, + "Mismatching iatt in " + "answers of '%s'", + gf_fop_list[fop->id]); + return 0; + } + return 1; } -void ec_iatt_time_merge(int64_t *dst_sec, uint32_t *dst_nsec, - int64_t src_sec, uint32_t src_nsec) +void +ec_iatt_time_merge(int64_t *dst_sec, uint32_t *dst_nsec, int64_t src_sec, + uint32_t src_nsec) { if ((*dst_sec < src_sec) || - ((*dst_sec == src_sec) && (*dst_nsec < src_nsec))) - { + ((*dst_sec == src_sec) && (*dst_nsec < src_nsec))) { *dst_sec = src_sec; *dst_nsec = src_nsec; } } -static -gf_boolean_t +static gf_boolean_t ec_iatt_is_trusted(ec_fop_data_t *fop, struct iatt *iatt) { uint64_t ino; @@ -141,14 +136,14 @@ ec_iatt_is_trusted(ec_fop_data_t *fop, struct iatt *iatt) return _gf_false; } -int32_t ec_iatt_combine(ec_fop_data_t *fop, struct iatt *dst, struct iatt *src, - int32_t count) +int32_t +ec_iatt_combine(ec_fop_data_t *fop, struct iatt *dst, struct iatt *src, + int32_t count) { int32_t i; gf_boolean_t failed = _gf_false; - for (i = 0; i < count; i++) - { + for (i = 0; i < count; i++) { /* Check for basic fields. These fields must be equal always, even if * the inode is not locked because in these cases the parent inode * will be locked and differences in these fields require changes in @@ -172,33 +167,30 @@ int32_t ec_iatt_combine(ec_fop_data_t *fop, struct iatt *dst, struct iatt *src, * data is returned. */ failed = _gf_true; } else { - gf_msg_debug (fop->xl->name, 0, - "Ignoring iatt differences because inode is not " - "locked"); + gf_msg_debug(fop->xl->name, 0, + "Ignoring iatt differences because inode is not " + "locked"); } } if (failed) { - gf_msg (fop->xl->name, GF_LOG_WARNING, 0, - EC_MSG_IATT_COMBINE_FAIL, - "Failed to combine iatt (inode: %lu-%lu, links: %u-%u, " - "uid: %u-%u, gid: %u-%u, rdev: %lu-%lu, size: %lu-%lu, " - "mode: %o-%o)", - dst[i].ia_ino, src[i].ia_ino, dst[i].ia_nlink, - src[i].ia_nlink, dst[i].ia_uid, src[i].ia_uid, - dst[i].ia_gid, src[i].ia_gid, dst[i].ia_rdev, - src[i].ia_rdev, dst[i].ia_size, src[i].ia_size, - st_mode_from_ia(dst[i].ia_prot, dst[i].ia_type), - st_mode_from_ia(src[i].ia_prot, dst[i].ia_type)); + gf_msg(fop->xl->name, GF_LOG_WARNING, 0, EC_MSG_IATT_COMBINE_FAIL, + "Failed to combine iatt (inode: %lu-%lu, links: %u-%u, " + "uid: %u-%u, gid: %u-%u, rdev: %lu-%lu, size: %lu-%lu, " + "mode: %o-%o)", + dst[i].ia_ino, src[i].ia_ino, dst[i].ia_nlink, + src[i].ia_nlink, dst[i].ia_uid, src[i].ia_uid, dst[i].ia_gid, + src[i].ia_gid, dst[i].ia_rdev, src[i].ia_rdev, + dst[i].ia_size, src[i].ia_size, + st_mode_from_ia(dst[i].ia_prot, dst[i].ia_type), + st_mode_from_ia(src[i].ia_prot, dst[i].ia_type)); return 0; } } - while (count-- > 0) - { + while (count-- > 0) { dst[count].ia_blocks += src[count].ia_blocks; - if (dst[count].ia_blksize < src[count].ia_blksize) - { + if (dst[count].ia_blksize < src[count].ia_blksize) { dst[count].ia_blksize = src[count].ia_blksize; } @@ -213,13 +205,12 @@ int32_t ec_iatt_combine(ec_fop_data_t *fop, struct iatt *dst, struct iatt *src, return 1; } -void ec_iatt_rebuild(ec_t * ec, struct iatt * iatt, int32_t count, - int32_t answers) +void +ec_iatt_rebuild(ec_t *ec, struct iatt *iatt, int32_t count, int32_t answers) { uint64_t blocks; - while (count-- > 0) - { + while (count-- > 0) { blocks = iatt[count].ia_blocks * ec->fragments + answers - 1; blocks /= answers; iatt[count].ia_blocks = blocks; @@ -227,93 +218,93 @@ void ec_iatt_rebuild(ec_t * ec, struct iatt * iatt, int32_t count, } gf_boolean_t -ec_xattr_match (dict_t *dict, char *key, data_t *value, void *arg) +ec_xattr_match(dict_t *dict, char *key, data_t *value, void *arg) { - if ((fnmatch(GF_XATTR_STIME_PATTERN, key, 0) == 0) || - (strcmp(key, GET_LINK_COUNT) == 0) || - (strcmp(key, GLUSTERFS_INODELK_COUNT) == 0) || - (strcmp(key, GLUSTERFS_ENTRYLK_COUNT) == 0) || - (strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0)) { - return _gf_false; - } + if ((fnmatch(GF_XATTR_STIME_PATTERN, key, 0) == 0) || + (strcmp(key, GET_LINK_COUNT) == 0) || + (strcmp(key, GLUSTERFS_INODELK_COUNT) == 0) || + (strcmp(key, GLUSTERFS_ENTRYLK_COUNT) == 0) || + (strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0)) { + return _gf_false; + } - return _gf_true; + return _gf_true; } gf_boolean_t -ec_value_ignore (char *key) +ec_value_ignore(char *key) { - if ((strcmp(key, GF_CONTENT_KEY) == 0) || - (strcmp(key, GF_XATTR_PATHINFO_KEY) == 0) || - (strcmp(key, GF_XATTR_USER_PATHINFO_KEY) == 0) || - (strcmp(key, GF_XATTR_LOCKINFO_KEY) == 0) || - (strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0) || - (strcmp(key, GLUSTERFS_INODELK_COUNT) == 0) || - (strcmp(key, GLUSTERFS_ENTRYLK_COUNT) == 0) || - (strncmp(key, GF_XATTR_CLRLK_CMD, - SLEN (GF_XATTR_CLRLK_CMD)) == 0) || - (strcmp(key, DHT_IATT_IN_XDATA_KEY) == 0) || - (strncmp(key, EC_QUOTA_PREFIX, SLEN (EC_QUOTA_PREFIX)) == 0) || - (fnmatch(MARKER_XATTR_PREFIX ".*." XTIME, key, 0) == 0) || - (fnmatch(GF_XATTR_MARKER_KEY ".*", key, 0) == 0) || - (XATTR_IS_NODE_UUID(key))) { - return _gf_true; - } + if ((strcmp(key, GF_CONTENT_KEY) == 0) || + (strcmp(key, GF_XATTR_PATHINFO_KEY) == 0) || + (strcmp(key, GF_XATTR_USER_PATHINFO_KEY) == 0) || + (strcmp(key, GF_XATTR_LOCKINFO_KEY) == 0) || + (strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0) || + (strcmp(key, GLUSTERFS_INODELK_COUNT) == 0) || + (strcmp(key, GLUSTERFS_ENTRYLK_COUNT) == 0) || + (strncmp(key, GF_XATTR_CLRLK_CMD, SLEN(GF_XATTR_CLRLK_CMD)) == 0) || + (strcmp(key, DHT_IATT_IN_XDATA_KEY) == 0) || + (strncmp(key, EC_QUOTA_PREFIX, SLEN(EC_QUOTA_PREFIX)) == 0) || + (fnmatch(MARKER_XATTR_PREFIX ".*." XTIME, key, 0) == 0) || + (fnmatch(GF_XATTR_MARKER_KEY ".*", key, 0) == 0) || + (XATTR_IS_NODE_UUID(key))) { + return _gf_true; + } - return _gf_false; + return _gf_false; } int32_t -ec_dict_compare (dict_t *dict1, dict_t *dict2) +ec_dict_compare(dict_t *dict1, dict_t *dict2) { - if (are_dicts_equal (dict1, dict2, ec_xattr_match, ec_value_ignore)) - return 1; - return 0; + if (are_dicts_equal(dict1, dict2, ec_xattr_match, ec_value_ignore)) + return 1; + return 0; } static uint32_t ec_dict_list(data_t **list, ec_cbk_data_t *cbk, int32_t which, char *key, gf_boolean_t global) { - ec_t *ec = cbk->fop->xl->private; - ec_cbk_data_t *ans = NULL; - dict_t *dict = NULL; - data_t *data; - uint32_t count; - int32_t i; - - for (i = 0; i < ec->nodes; i++) { - /* We initialize the list with EC_MISSING_DATA if we are - * returning a global list or the current subvolume belongs - * to the group of the accepted answer. Note that if some - * subvolume is known to be down before issuing the request, - * we won't have any answer from it, so we set here the - * appropriate default value. */ - if (global || ((cbk->mask & (1ULL << i)) != 0)) { - list[i] = EC_MISSING_DATA; - } else { - list[i] = NULL; - } + ec_t *ec = cbk->fop->xl->private; + ec_cbk_data_t *ans = NULL; + dict_t *dict = NULL; + data_t *data; + uint32_t count; + int32_t i; + + for (i = 0; i < ec->nodes; i++) { + /* We initialize the list with EC_MISSING_DATA if we are + * returning a global list or the current subvolume belongs + * to the group of the accepted answer. Note that if some + * subvolume is known to be down before issuing the request, + * we won't have any answer from it, so we set here the + * appropriate default value. */ + if (global || ((cbk->mask & (1ULL << i)) != 0)) { + list[i] = EC_MISSING_DATA; + } else { + list[i] = NULL; } + } - count = 0; - list_for_each_entry(ans, &cbk->fop->answer_list, answer_list) { - if (global || ((cbk->mask & ans->mask) != 0)) { - dict = (which == EC_COMBINE_XDATA) ? ans->xdata - : ans->dict; - data = dict_get(dict, key); - if (data != NULL) { - list[ans->idx] = data; - count++; - } - } + count = 0; + list_for_each_entry(ans, &cbk->fop->answer_list, answer_list) + { + if (global || ((cbk->mask & ans->mask) != 0)) { + dict = (which == EC_COMBINE_XDATA) ? ans->xdata : ans->dict; + data = dict_get(dict, key); + if (data != NULL) { + list[ans->idx] = data; + count++; + } } + } - return count; + return count; } -int32_t ec_concat_prepare(xlator_t *xl, char **str, char **sep, char **post, - const char *fmt, va_list args) +int32_t +ec_concat_prepare(xlator_t *xl, char **str, char **sep, char **post, + const char *fmt, va_list args) { char *tmp; int32_t len; @@ -339,9 +330,8 @@ int32_t ec_concat_prepare(xlator_t *xl, char **str, char **sep, char **post, return 0; out: - gf_msg (xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_INVALID_FORMAT, - "Invalid concat format"); + gf_msg(xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_FORMAT, + "Invalid concat format"); GF_FREE(*str); @@ -449,7 +439,8 @@ out: return err; } -int32_t ec_dict_data_merge(ec_cbk_data_t *cbk, int32_t which, char *key) +int32_t +ec_dict_data_merge(ec_cbk_data_t *cbk, int32_t which, char *key) { ec_t *ec = cbk->fop->xl->private; data_t *data[ec->nodes]; @@ -458,7 +449,6 @@ int32_t ec_dict_data_merge(ec_cbk_data_t *cbk, int32_t which, char *key) int32_t i, len; int32_t err; - ec_dict_list(data, cbk, which, key, _gf_false); lockinfo = dict_new(); @@ -526,11 +516,12 @@ out: return err; } -int32_t ec_dict_data_uuid(ec_cbk_data_t * cbk, int32_t which, char * key) +int32_t +ec_dict_data_uuid(ec_cbk_data_t *cbk, int32_t which, char *key) { - ec_cbk_data_t * ans, * min; - dict_t * src, * dst; - data_t * data; + ec_cbk_data_t *ans, *min; + dict_t *src, *dst; + data_t *data; min = cbk; for (ans = cbk->next; ans != NULL; ans = ans->next) { @@ -555,7 +546,8 @@ int32_t ec_dict_data_uuid(ec_cbk_data_t * cbk, int32_t which, char * key) return 0; } -int32_t ec_dict_data_iatt(ec_cbk_data_t *cbk, int32_t which, char *key) +int32_t +ec_dict_data_iatt(ec_cbk_data_t *cbk, int32_t which, char *key) { ec_t *ec = cbk->fop->xl->private; data_t *data[ec->nodes]; @@ -578,12 +570,12 @@ int32_t ec_dict_data_iatt(ec_cbk_data_t *cbk, int32_t which, char *key) if (stbuf == NULL) { stbuf = GF_MALLOC(sizeof(struct iatt), gf_common_mt_char); if (stbuf == NULL) { - ret = -ENOMEM; - goto out; + ret = -ENOMEM; + goto out; } *stbuf = *tmp; } else { - if (!ec_iatt_combine (cbk->fop, stbuf, tmp, 1)) { + if (!ec_iatt_combine(cbk->fop, stbuf, tmp, 1)) { ret = -EINVAL; goto out; } @@ -613,7 +605,8 @@ out: return ret; } -int32_t ec_dict_data_max32(ec_cbk_data_t *cbk, int32_t which, char *key) +int32_t +ec_dict_data_max32(ec_cbk_data_t *cbk, int32_t which, char *key) { ec_t *ec = cbk->fop->xl->private; data_t *data[ec->nodes]; @@ -639,7 +632,8 @@ int32_t ec_dict_data_max32(ec_cbk_data_t *cbk, int32_t which, char *key) return dict_set_uint32(dict, key, max); } -int32_t ec_dict_data_max64(ec_cbk_data_t *cbk, int32_t which, char *key) +int32_t +ec_dict_data_max64(ec_cbk_data_t *cbk, int32_t which, char *key) { ec_t *ec = cbk->fop->xl->private; data_t *data[ec->nodes]; @@ -665,14 +659,19 @@ int32_t ec_dict_data_max64(ec_cbk_data_t *cbk, int32_t which, char *key) return dict_set_uint64(dict, key, max); } -int32_t ec_dict_data_quota(ec_cbk_data_t *cbk, int32_t which, char *key) +int32_t +ec_dict_data_quota(ec_cbk_data_t *cbk, int32_t which, char *key) { - ec_t *ec = cbk->fop->xl->private; - data_t *data[ec->nodes]; - dict_t *dict = NULL; - int32_t i = 0; - quota_meta_t size = {0, }; - quota_meta_t max_size = {0, }; + ec_t *ec = cbk->fop->xl->private; + data_t *data[ec->nodes]; + dict_t *dict = NULL; + int32_t i = 0; + quota_meta_t size = { + 0, + }; + quota_meta_t max_size = { + 0, + }; if (ec_dict_list(data, cbk, which, key, _gf_false) == 0) { return 0; @@ -685,25 +684,26 @@ int32_t ec_dict_data_quota(ec_cbk_data_t *cbk, int32_t which, char *key) */ for (i = 0; i < ec->nodes; i++) { if ((data[i] == NULL) || (data[i] == EC_MISSING_DATA) || - (quota_data_to_meta (data[i], QUOTA_SIZE_KEY, &size) < 0)) { - continue; + (quota_data_to_meta(data[i], QUOTA_SIZE_KEY, &size) < 0)) { + continue; } if (size.size > max_size.size) - max_size.size = size.size; + max_size.size = size.size; if (size.file_count > max_size.file_count) - max_size.file_count = size.file_count; + max_size.file_count = size.file_count; if (size.dir_count > max_size.dir_count) - max_size.dir_count = size.dir_count; + max_size.dir_count = size.dir_count; } max_size.size *= ec->fragments; dict = (which == EC_COMBINE_XDATA) ? cbk->xdata : cbk->dict; - return quota_dict_set_meta (dict, key, &max_size, IA_IFDIR); + return quota_dict_set_meta(dict, key, &max_size, IA_IFDIR); } -int32_t ec_dict_data_stime(ec_cbk_data_t * cbk, int32_t which, char * key) +int32_t +ec_dict_data_stime(ec_cbk_data_t *cbk, int32_t which, char *key) { ec_t *ec = cbk->fop->xl->private; data_t *data[ec->nodes]; @@ -719,8 +719,8 @@ int32_t ec_dict_data_stime(ec_cbk_data_t * cbk, int32_t which, char * key) } err = gf_get_max_stime(cbk->fop->xl, dict, key, data[i]); if (err != 0) { - gf_msg (cbk->fop->xl->name, GF_LOG_ERROR, -err, - EC_MSG_STIME_COMBINE_FAIL, "STIME combination failed"); + gf_msg(cbk->fop->xl->name, GF_LOG_ERROR, -err, + EC_MSG_STIME_COMBINE_FAIL, "STIME combination failed"); return err; } @@ -729,28 +729,24 @@ int32_t ec_dict_data_stime(ec_cbk_data_t * cbk, int32_t which, char * key) return 0; } -int32_t ec_dict_data_combine(dict_t * dict, char * key, data_t * value, - void * arg) +int32_t +ec_dict_data_combine(dict_t *dict, char *key, data_t *value, void *arg) { - ec_dict_combine_t * data = arg; + ec_dict_combine_t *data = arg; if ((strcmp(key, GF_XATTR_PATHINFO_KEY) == 0) || - (strcmp(key, GF_XATTR_USER_PATHINFO_KEY) == 0)) - { - return ec_dict_data_concat("(<EC:%s> { })", data->cbk, data->which, - key, NULL, NULL, _gf_false, + (strcmp(key, GF_XATTR_USER_PATHINFO_KEY) == 0)) { + return ec_dict_data_concat("(<EC:%s> { })", data->cbk, data->which, key, + NULL, NULL, _gf_false, data->cbk->fop->xl->name); } - if (strncmp(key, GF_XATTR_CLRLK_CMD, SLEN (GF_XATTR_CLRLK_CMD)) == 0) - { + if (strncmp(key, GF_XATTR_CLRLK_CMD, SLEN(GF_XATTR_CLRLK_CMD)) == 0) { return ec_dict_data_concat("{\n}", data->cbk, data->which, key, NULL, NULL, _gf_false); } - if (strncmp(key, GF_XATTR_LOCKINFO_KEY, - SLEN (GF_XATTR_LOCKINFO_KEY)) == 0) - { + if (strncmp(key, GF_XATTR_LOCKINFO_KEY, SLEN(GF_XATTR_LOCKINFO_KEY)) == 0) { return ec_dict_data_merge(data->cbk, data->which, key); } @@ -758,8 +754,7 @@ int32_t ec_dict_data_combine(dict_t * dict, char * key, data_t * value, return ec_dict_data_max32(data->cbk, data->which, key); } - if (strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0) - { + if (strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0) { return ec_dict_data_max32(data->cbk, data->which, key); } if ((strcmp(key, GLUSTERFS_INODELK_COUNT) == 0) || @@ -771,23 +766,22 @@ int32_t ec_dict_data_combine(dict_t * dict, char * key, data_t * value, return ec_dict_data_quota(data->cbk, data->which, key); } /* Ignore all other quota attributes */ - if (strncmp(key, EC_QUOTA_PREFIX, SLEN (EC_QUOTA_PREFIX)) == 0) { + if (strncmp(key, EC_QUOTA_PREFIX, SLEN(EC_QUOTA_PREFIX)) == 0) { return 0; } if (XATTR_IS_NODE_UUID(key)) { if (data->cbk->fop->int32) { - /* List of node uuid is requested */ - return ec_dict_data_concat("{ }", data->cbk, data->which, key, - GF_XATTR_LIST_NODE_UUIDS_KEY, - UUID0_STR, _gf_true); + /* List of node uuid is requested */ + return ec_dict_data_concat("{ }", data->cbk, data->which, key, + GF_XATTR_LIST_NODE_UUIDS_KEY, UUID0_STR, + _gf_true); } else { - return ec_dict_data_uuid(data->cbk, data->which, key); + return ec_dict_data_uuid(data->cbk, data->which, key); } } - if (fnmatch(GF_XATTR_STIME_PATTERN, key, FNM_NOESCAPE) == 0) - { + if (fnmatch(GF_XATTR_STIME_PATTERN, key, FNM_NOESCAPE) == 0) { return ec_dict_data_stime(data->cbk, data->which, key); } @@ -795,14 +789,15 @@ int32_t ec_dict_data_combine(dict_t * dict, char * key, data_t * value, return ec_dict_data_max64(data->cbk, data->which, key); } - if (strcmp (key, GF_PRESTAT) == 0 || strcmp (key, GF_POSTSTAT) == 0) { + if (strcmp(key, GF_PRESTAT) == 0 || strcmp(key, GF_POSTSTAT) == 0) { return ec_dict_data_iatt(data->cbk, data->which, key); } return 0; } -int32_t ec_dict_combine(ec_cbk_data_t * cbk, int32_t which) +int32_t +ec_dict_combine(ec_cbk_data_t *cbk, int32_t which) { dict_t *dict = NULL; ec_dict_combine_t data; @@ -815,9 +810,8 @@ int32_t ec_dict_combine(ec_cbk_data_t * cbk, int32_t which) if (dict != NULL) { err = dict_foreach(dict, ec_dict_data_combine, &data); if (err != 0) { - gf_msg (cbk->fop->xl->name, GF_LOG_ERROR, -err, - EC_MSG_DICT_COMBINE_FAIL, - "Dictionary combination failed"); + gf_msg(cbk->fop->xl->name, GF_LOG_ERROR, -err, + EC_MSG_DICT_COMBINE_FAIL, "Dictionary combination failed"); return err; } @@ -826,47 +820,43 @@ int32_t ec_dict_combine(ec_cbk_data_t * cbk, int32_t which) return 0; } -int32_t ec_vector_compare(struct iovec * dst_vector, int32_t dst_count, - struct iovec * src_vector, int32_t src_count) +int32_t +ec_vector_compare(struct iovec *dst_vector, int32_t dst_count, + struct iovec *src_vector, int32_t src_count) { int32_t dst_size = 0, src_size = 0; - if (dst_count > 0) - { + if (dst_count > 0) { dst_size = iov_length(dst_vector, dst_count); } - if (src_count > 0) - { + if (src_count > 0) { src_size = iov_length(src_vector, src_count); } return (dst_size == src_size); } -int32_t ec_flock_compare(struct gf_flock * dst, struct gf_flock * src) +int32_t +ec_flock_compare(struct gf_flock *dst, struct gf_flock *src) { - if ((dst->l_type != src->l_type) || - (dst->l_whence != src->l_whence) || - (dst->l_start != src->l_start) || - (dst->l_len != src->l_len) || + if ((dst->l_type != src->l_type) || (dst->l_whence != src->l_whence) || + (dst->l_start != src->l_start) || (dst->l_len != src->l_len) || (dst->l_pid != src->l_pid) || - !is_same_lkowner(&dst->l_owner, &src->l_owner)) - { + !is_same_lkowner(&dst->l_owner, &src->l_owner)) { return 0; } return 1; } -void ec_statvfs_combine(struct statvfs * dst, struct statvfs * src) +void +ec_statvfs_combine(struct statvfs *dst, struct statvfs *src) { - if (dst->f_bsize < src->f_bsize) - { + if (dst->f_bsize < src->f_bsize) { dst->f_bsize = src->f_bsize; } - if (dst->f_frsize < src->f_frsize) - { + if (dst->f_frsize < src->f_frsize) { dst->f_blocks *= dst->f_frsize; dst->f_blocks /= src->f_frsize; @@ -877,9 +867,7 @@ void ec_statvfs_combine(struct statvfs * dst, struct statvfs * src) dst->f_bavail /= src->f_frsize; dst->f_frsize = src->f_frsize; - } - else if (dst->f_frsize > src->f_frsize) - { + } else if (dst->f_frsize > src->f_frsize) { src->f_blocks *= src->f_frsize; src->f_blocks /= dst->f_frsize; @@ -889,90 +877,80 @@ void ec_statvfs_combine(struct statvfs * dst, struct statvfs * src) src->f_bavail *= src->f_frsize; src->f_bavail /= dst->f_frsize; } - if (dst->f_blocks > src->f_blocks) - { + if (dst->f_blocks > src->f_blocks) { dst->f_blocks = src->f_blocks; } - if (dst->f_bfree > src->f_bfree) - { + if (dst->f_bfree > src->f_bfree) { dst->f_bfree = src->f_bfree; } - if (dst->f_bavail > src->f_bavail) - { + if (dst->f_bavail > src->f_bavail) { dst->f_bavail = src->f_bavail; } - if (dst->f_files < src->f_files) - { + if (dst->f_files < src->f_files) { dst->f_files = src->f_files; } - if (dst->f_ffree > src->f_ffree) - { + if (dst->f_ffree > src->f_ffree) { dst->f_ffree = src->f_ffree; } - if (dst->f_favail > src->f_favail) - { + if (dst->f_favail > src->f_favail) { dst->f_favail = src->f_favail; } - if (dst->f_namemax > src->f_namemax) - { + if (dst->f_namemax > src->f_namemax) { dst->f_namemax = src->f_namemax; } - if (dst->f_flag != src->f_flag) - { - gf_msg_debug (THIS->name, 0, - "Mismatching file system flags " - "(%lX, %lX)", - dst->f_flag, src->f_flag); + if (dst->f_flag != src->f_flag) { + gf_msg_debug(THIS->name, 0, + "Mismatching file system flags " + "(%lX, %lX)", + dst->f_flag, src->f_flag); } dst->f_flag &= src->f_flag; } -int32_t ec_combine_check(ec_cbk_data_t * dst, ec_cbk_data_t * src, - ec_combine_f combine) +int32_t +ec_combine_check(ec_cbk_data_t *dst, ec_cbk_data_t *src, ec_combine_f combine) { - ec_fop_data_t * fop = dst->fop; + ec_fop_data_t *fop = dst->fop; - if (dst->op_ret != src->op_ret) - { - gf_msg_debug (fop->xl->name, 0, "Mismatching return code in " - "answers of '%s': %d <-> %d", - ec_fop_name(fop->id), dst->op_ret, src->op_ret); + if (dst->op_ret != src->op_ret) { + gf_msg_debug(fop->xl->name, 0, + "Mismatching return code in " + "answers of '%s': %d <-> %d", + ec_fop_name(fop->id), dst->op_ret, src->op_ret); return 0; } - if (dst->op_ret < 0) - { - if (dst->op_errno != src->op_errno) - { - gf_msg_debug (fop->xl->name, 0, "Mismatching errno code in " - "answers of '%s': %d <-> %d", - ec_fop_name(fop->id), dst->op_errno, src->op_errno); + if (dst->op_ret < 0) { + if (dst->op_errno != src->op_errno) { + gf_msg_debug(fop->xl->name, 0, + "Mismatching errno code in " + "answers of '%s': %d <-> %d", + ec_fop_name(fop->id), dst->op_errno, src->op_errno); return 0; } } - if (!ec_dict_compare(dst->xdata, src->xdata)) - { - gf_msg (fop->xl->name, GF_LOG_DEBUG, 0, - EC_MSG_XDATA_MISMATCH, - "Mismatching xdata in answers " - "of '%s'", ec_fop_name(fop->id)); + if (!ec_dict_compare(dst->xdata, src->xdata)) { + gf_msg(fop->xl->name, GF_LOG_DEBUG, 0, EC_MSG_XDATA_MISMATCH, + "Mismatching xdata in answers " + "of '%s'", + ec_fop_name(fop->id)); return 0; } - if ((dst->op_ret >= 0) && (combine != NULL)) - { + if ((dst->op_ret >= 0) && (combine != NULL)) { return combine(fop, dst, src); } return 1; } -void ec_combine (ec_cbk_data_t *newcbk, ec_combine_f combine) +void +ec_combine(ec_cbk_data_t *newcbk, ec_combine_f combine) { ec_fop_data_t *fop = newcbk->fop; ec_cbk_data_t *cbk = NULL, *tmp = NULL; @@ -987,17 +965,14 @@ void ec_combine (ec_cbk_data_t *newcbk, ec_combine_f combine) item = fop->cbk_list.prev; list_for_each_entry(cbk, &fop->cbk_list, list) { - if (ec_combine_check(newcbk, cbk, combine)) - { + if (ec_combine_check(newcbk, cbk, combine)) { newcbk->count += cbk->count; newcbk->mask |= cbk->mask; item = cbk->list.prev; - while (item != &fop->cbk_list) - { + while (item != &fop->cbk_list) { tmp = list_entry(item, ec_cbk_data_t, list); - if (tmp->count >= newcbk->count) - { + if (tmp->count >= newcbk->count) { break; } item = item->prev; diff --git a/xlators/cluster/ec/src/ec-common.c b/xlators/cluster/ec/src/ec-common.c index 86432bd7da7..0eee0a3363f 100644 --- a/xlators/cluster/ec/src/ec-common.c +++ b/xlators/cluster/ec/src/ec-common.c @@ -24,29 +24,28 @@ #define EC_INVALID_INDEX UINT32_MAX void -ec_update_fd_status (fd_t *fd, xlator_t *xl, int idx, - int32_t ret_status) +ec_update_fd_status(fd_t *fd, xlator_t *xl, int idx, int32_t ret_status) { - ec_fd_t *fd_ctx; + ec_fd_t *fd_ctx; - if (fd == NULL) - return; + if (fd == NULL) + return; - LOCK (&fd->lock); - { - fd_ctx = __ec_fd_get(fd, xl); - if (fd_ctx) { - if (ret_status >= 0) - fd_ctx->fd_status[idx] = EC_FD_OPENED; - else - fd_ctx->fd_status[idx] = EC_FD_NOT_OPENED; - } + LOCK(&fd->lock); + { + fd_ctx = __ec_fd_get(fd, xl); + if (fd_ctx) { + if (ret_status >= 0) + fd_ctx->fd_status[idx] = EC_FD_OPENED; + else + fd_ctx->fd_status[idx] = EC_FD_NOT_OPENED; } - UNLOCK (&fd->lock); + } + UNLOCK(&fd->lock); } static int -ec_fd_ctx_need_open (fd_t *fd, xlator_t *this, uintptr_t *need_open) +ec_fd_ctx_need_open(fd_t *fd, xlator_t *this, uintptr_t *need_open) { int i = 0; int count = 0; @@ -56,22 +55,22 @@ ec_fd_ctx_need_open (fd_t *fd, xlator_t *this, uintptr_t *need_open) ec = this->private; *need_open = 0; - fd_ctx = ec_fd_get (fd, this); + fd_ctx = ec_fd_get(fd, this); if (!fd_ctx) return count; - LOCK (&fd->lock); + LOCK(&fd->lock); { for (i = 0; i < ec->nodes; i++) { - if ((fd_ctx->fd_status[i] == EC_FD_NOT_OPENED) && - (ec->xl_up & (1<<i))) { - fd_ctx->fd_status[i] = EC_FD_OPENING; - *need_open |= (1<<i); - count++; - } + if ((fd_ctx->fd_status[i] == EC_FD_NOT_OPENED) && + (ec->xl_up & (1 << i))) { + fd_ctx->fd_status[i] = EC_FD_OPENING; + *need_open |= (1 << i); + count++; + } } } - UNLOCK (&fd->lock); + UNLOCK(&fd->lock); /* If fd needs to open on minimum number of nodes * then ignore fixing the fd as it has been @@ -84,136 +83,137 @@ ec_fd_ctx_need_open (fd_t *fd, xlator_t *this, uintptr_t *need_open) } static gf_boolean_t -ec_is_fd_fixable (fd_t *fd) +ec_is_fd_fixable(fd_t *fd) { if (!fd || !fd->inode) return _gf_false; - else if (fd_is_anonymous (fd)) + else if (fd_is_anonymous(fd)) return _gf_false; - else if (gf_uuid_is_null (fd->inode->gfid)) + else if (gf_uuid_is_null(fd->inode->gfid)) return _gf_false; return _gf_true; } static void -ec_fix_open (ec_fop_data_t *fop) +ec_fix_open(ec_fop_data_t *fop) { - int call_count = 0; - uintptr_t need_open = 0; - int ret = 0; - loc_t loc = {0, }; + int call_count = 0; + uintptr_t need_open = 0; + int ret = 0; + loc_t loc = { + 0, + }; - if (!ec_is_fd_fixable (fop->fd)) + if (!ec_is_fd_fixable(fop->fd)) goto out; /* Evaluate how many remote fd's to be opened */ - call_count = ec_fd_ctx_need_open (fop->fd, fop->xl, &need_open); + call_count = ec_fd_ctx_need_open(fop->fd, fop->xl, &need_open); if (!call_count) goto out; - loc.inode = inode_ref (fop->fd->inode); - gf_uuid_copy (loc.gfid, fop->fd->inode->gfid); - ret = loc_path (&loc, NULL); + loc.inode = inode_ref(fop->fd->inode); + gf_uuid_copy(loc.gfid, fop->fd->inode->gfid); + ret = loc_path(&loc, NULL); if (ret < 0) { goto out; } if (IA_IFDIR == fop->fd->inode->ia_type) { - ec_opendir(fop->frame, fop->xl, need_open, EC_MINIMUM_ONE, - NULL, NULL, &fop->loc[0], fop->fd, NULL); - } else{ - ec_open(fop->frame, fop->xl, need_open, EC_MINIMUM_ONE, - NULL, NULL, &loc, fop->fd->flags, fop->fd, NULL); + ec_opendir(fop->frame, fop->xl, need_open, EC_MINIMUM_ONE, NULL, NULL, + &fop->loc[0], fop->fd, NULL); + } else { + ec_open(fop->frame, fop->xl, need_open, EC_MINIMUM_ONE, NULL, NULL, + &loc, fop->fd->flags, fop->fd, NULL); } out: - loc_wipe (&loc); + loc_wipe(&loc); } off_t -ec_range_end_get (off_t fl_start, size_t fl_size) +ec_range_end_get(off_t fl_start, size_t fl_size) { - off_t fl_end = 0; - switch (fl_size) { + off_t fl_end = 0; + switch (fl_size) { case 0: - return fl_start; + return fl_start; case LLONG_MAX: /*Infinity*/ - return LLONG_MAX; + return LLONG_MAX; default: - fl_end = fl_start + fl_size - 1; - if (fl_end < 0) /*over-flow*/ - return LLONG_MAX; - else - return fl_end; - } + fl_end = fl_start + fl_size - 1; + if (fl_end < 0) /*over-flow*/ + return LLONG_MAX; + else + return fl_end; + } } static gf_boolean_t -ec_is_range_conflict (ec_lock_link_t *l1, ec_lock_link_t *l2) +ec_is_range_conflict(ec_lock_link_t *l1, ec_lock_link_t *l2) { - return ((l1->fl_end >= l2->fl_start) && (l2->fl_end >= l1->fl_start)); + return ((l1->fl_end >= l2->fl_start) && (l2->fl_end >= l1->fl_start)); } static gf_boolean_t -ec_lock_conflict (ec_lock_link_t *l1, ec_lock_link_t *l2) +ec_lock_conflict(ec_lock_link_t *l1, ec_lock_link_t *l2) { - ec_t *ec = l1->fop->xl->private; + ec_t *ec = l1->fop->xl->private; - /* Fops like access/stat won't have to worry what the other fops are - * modifying as the fop is wound only to one brick. So it can be - * executed in parallel*/ - if (l1->fop->minimum == EC_MINIMUM_ONE || - l2->fop->minimum == EC_MINIMUM_ONE) - return _gf_false; + /* Fops like access/stat won't have to worry what the other fops are + * modifying as the fop is wound only to one brick. So it can be + * executed in parallel*/ + if (l1->fop->minimum == EC_MINIMUM_ONE || + l2->fop->minimum == EC_MINIMUM_ONE) + return _gf_false; - if ((l1->fop->flags & EC_FLAG_LOCK_SHARED) && - (l2->fop->flags & EC_FLAG_LOCK_SHARED)) - return _gf_false; + if ((l1->fop->flags & EC_FLAG_LOCK_SHARED) && + (l2->fop->flags & EC_FLAG_LOCK_SHARED)) + return _gf_false; - if (!ec->parallel_writes) { - return _gf_true; - } + if (!ec->parallel_writes) { + return _gf_true; + } - return ec_is_range_conflict (l1, l2); + return ec_is_range_conflict(l1, l2); } uint32_t -ec_select_first_by_read_policy (ec_t *ec, ec_fop_data_t *fop) -{ - if (ec->read_policy == EC_ROUND_ROBIN) { - return ec->idx; - } else if (ec->read_policy == EC_GFID_HASH) { - if (fop->use_fd) { - return SuperFastHash((char *)fop->fd->inode->gfid, - sizeof(fop->fd->inode->gfid)) % ec->nodes; - } else { - if (gf_uuid_is_null (fop->loc[0].gfid)) - loc_gfid (&fop->loc[0], fop->loc[0].gfid); - return SuperFastHash((char *)fop->loc[0].gfid, - sizeof(fop->loc[0].gfid)) % ec->nodes; - } +ec_select_first_by_read_policy(ec_t *ec, ec_fop_data_t *fop) +{ + if (ec->read_policy == EC_ROUND_ROBIN) { + return ec->idx; + } else if (ec->read_policy == EC_GFID_HASH) { + if (fop->use_fd) { + return SuperFastHash((char *)fop->fd->inode->gfid, + sizeof(fop->fd->inode->gfid)) % + ec->nodes; + } else { + if (gf_uuid_is_null(fop->loc[0].gfid)) + loc_gfid(&fop->loc[0], fop->loc[0].gfid); + return SuperFastHash((char *)fop->loc[0].gfid, + sizeof(fop->loc[0].gfid)) % + ec->nodes; } - return 0; + } + return 0; } -static -gf_boolean_t ec_child_valid(ec_t * ec, ec_fop_data_t * fop, uint32_t idx) +static gf_boolean_t +ec_child_valid(ec_t *ec, ec_fop_data_t *fop, uint32_t idx) { return (idx < ec->nodes) && (((fop->remaining >> idx) & 1) == 1); } -static -uint32_t ec_child_next(ec_t * ec, ec_fop_data_t * fop, uint32_t idx) +static uint32_t +ec_child_next(ec_t *ec, ec_fop_data_t *fop, uint32_t idx) { - while (!ec_child_valid(ec, fop, idx)) - { - if (++idx >= ec->nodes) - { + while (!ec_child_valid(ec, fop, idx)) { + if (++idx >= ec->nodes) { idx = 0; } - if (idx == fop->first) - { + if (idx == fop->first) { return EC_INVALID_INDEX; } } @@ -221,20 +221,21 @@ uint32_t ec_child_next(ec_t * ec, ec_fop_data_t * fop, uint32_t idx) return idx; } -int32_t ec_heal_report(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, uintptr_t mask, - uintptr_t good, uintptr_t bad, dict_t * xdata) +int32_t +ec_heal_report(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, uintptr_t mask, uintptr_t good, + uintptr_t bad, dict_t *xdata) { if (op_ret < 0) { - gf_msg (this->name, GF_LOG_DEBUG, op_errno, - EC_MSG_HEAL_FAIL, "Heal failed"); + gf_msg(this->name, GF_LOG_DEBUG, op_errno, EC_MSG_HEAL_FAIL, + "Heal failed"); } else { if ((mask & ~good) != 0) { - gf_msg (this->name, GF_LOG_DEBUG, 0, - EC_MSG_HEAL_SUCCESS, "Heal succeeded on %d/%d " - "subvolumes", - gf_bits_count(mask & ~(good | bad)), - gf_bits_count(mask & ~good)); + gf_msg(this->name, GF_LOG_DEBUG, 0, EC_MSG_HEAL_SUCCESS, + "Heal succeeded on %d/%d " + "subvolumes", + gf_bits_count(mask & ~(good | bad)), + gf_bits_count(mask & ~good)); } } @@ -242,103 +243,101 @@ int32_t ec_heal_report(call_frame_t * frame, void * cookie, xlator_t * this, } static uintptr_t -ec_fop_needs_name_heal (ec_fop_data_t *fop) +ec_fop_needs_name_heal(ec_fop_data_t *fop) { - ec_t *ec = NULL; - ec_cbk_data_t *cbk = NULL; - ec_cbk_data_t *enoent_cbk = NULL; + ec_t *ec = NULL; + ec_cbk_data_t *cbk = NULL; + ec_cbk_data_t *enoent_cbk = NULL; - ec = fop->xl->private; - if (fop->id != GF_FOP_LOOKUP) - return 0; + ec = fop->xl->private; + if (fop->id != GF_FOP_LOOKUP) + return 0; - if (!fop->loc[0].name || strlen (fop->loc[0].name) == 0) - return 0; + if (!fop->loc[0].name || strlen(fop->loc[0].name) == 0) + return 0; - list_for_each_entry(cbk, &fop->cbk_list, list) - { - if (cbk->op_ret < 0 && cbk->op_errno == ENOENT) { - enoent_cbk = cbk; - break; - } + list_for_each_entry(cbk, &fop->cbk_list, list) + { + if (cbk->op_ret < 0 && cbk->op_errno == ENOENT) { + enoent_cbk = cbk; + break; } + } - if (!enoent_cbk) - return 0; + if (!enoent_cbk) + return 0; - return ec->xl_up & ~enoent_cbk->mask; + return ec->xl_up & ~enoent_cbk->mask; } -int32_t ec_fop_needs_heal(ec_fop_data_t *fop) +int32_t +ec_fop_needs_heal(ec_fop_data_t *fop) { ec_t *ec = fop->xl->private; if (fop->lock_count == 0) { - /* - * if fop->lock_count is zero that means it saw version mismatch - * without any locks so it can't be trusted. If we launch a heal - * based on this it will lead to INODELKs which will affect I/O - * performance. Considering self-heal-daemon and operations on - * the inode from client which take locks can still trigger the - * heal we can choose to not attempt a heal when fop->lock_count - * is zero. - */ - return 0; + /* + * if fop->lock_count is zero that means it saw version mismatch + * without any locks so it can't be trusted. If we launch a heal + * based on this it will lead to INODELKs which will affect I/O + * performance. Considering self-heal-daemon and operations on + * the inode from client which take locks can still trigger the + * heal we can choose to not attempt a heal when fop->lock_count + * is zero. + */ + return 0; } return (ec->xl_up & ~(fop->remaining | fop->good)) != 0; } -void ec_check_status(ec_fop_data_t * fop) +void +ec_check_status(ec_fop_data_t *fop) { - ec_t * ec = fop->xl->private; + ec_t *ec = fop->xl->private; int32_t partial = 0; char str1[32], str2[32], str3[32], str4[32], str5[32]; - if (!ec_fop_needs_name_heal (fop) && !ec_fop_needs_heal(fop)) { + if (!ec_fop_needs_name_heal(fop) && !ec_fop_needs_heal(fop)) { return; } if (fop->answer && fop->answer->op_ret >= 0) { - if ((fop->id == GF_FOP_LOOKUP) || - (fop->id == GF_FOP_STAT) || (fop->id == GF_FOP_FSTAT)) { + if ((fop->id == GF_FOP_LOOKUP) || (fop->id == GF_FOP_STAT) || + (fop->id == GF_FOP_FSTAT)) { partial = fop->answer->iatt[0].ia_type == IA_IFDIR; } else if (fop->id == GF_FOP_OPENDIR) { partial = 1; } } - gf_msg (fop->xl->name, GF_LOG_WARNING, 0, - EC_MSG_OP_FAIL_ON_SUBVOLS, - "Operation failed on %d of %d subvolumes.(up=%s, mask=%s, " - "remaining=%s, good=%s, bad=%s)", - gf_bits_count(ec->xl_up & ~(fop->remaining | fop->good)), ec->nodes, - ec_bin(str1, sizeof(str1), ec->xl_up, ec->nodes), - ec_bin(str2, sizeof(str2), fop->mask, ec->nodes), - ec_bin(str3, sizeof(str3), fop->remaining, ec->nodes), - ec_bin(str4, sizeof(str4), fop->good, ec->nodes), - ec_bin(str5, sizeof(str5), - ec->xl_up & ~(fop->remaining | fop->good), ec->nodes)); - if (fop->use_fd) - { + gf_msg(fop->xl->name, GF_LOG_WARNING, 0, EC_MSG_OP_FAIL_ON_SUBVOLS, + "Operation failed on %d of %d subvolumes.(up=%s, mask=%s, " + "remaining=%s, good=%s, bad=%s)", + gf_bits_count(ec->xl_up & ~(fop->remaining | fop->good)), ec->nodes, + ec_bin(str1, sizeof(str1), ec->xl_up, ec->nodes), + ec_bin(str2, sizeof(str2), fop->mask, ec->nodes), + ec_bin(str3, sizeof(str3), fop->remaining, ec->nodes), + ec_bin(str4, sizeof(str4), fop->good, ec->nodes), + ec_bin(str5, sizeof(str5), ec->xl_up & ~(fop->remaining | fop->good), + ec->nodes)); + if (fop->use_fd) { if (fop->fd != NULL) { ec_fheal(NULL, fop->xl, -1, EC_MINIMUM_ONE, ec_heal_report, NULL, fop->fd, partial, NULL); } - } - else - { + } else { ec_heal(NULL, fop->xl, -1, EC_MINIMUM_ONE, ec_heal_report, NULL, &fop->loc[0], partial, NULL); - if (fop->loc[1].inode != NULL) - { + if (fop->loc[1].inode != NULL) { ec_heal(NULL, fop->xl, -1, EC_MINIMUM_ONE, ec_heal_report, NULL, &fop->loc[1], partial, NULL); } } } -void ec_update_good(ec_fop_data_t *fop, uintptr_t good) +void +ec_update_good(ec_fop_data_t *fop, uintptr_t good) { fop->good = good; @@ -349,7 +348,8 @@ void ec_update_good(ec_fop_data_t *fop, uintptr_t good) } } -void ec_lock_update_good(ec_lock_t *lock, ec_fop_data_t *fop) +void +ec_lock_update_good(ec_lock_t *lock, ec_fop_data_t *fop) { /* Fops that are executed only on one brick do not have enough information * to update the global mask of good bricks. */ @@ -365,15 +365,16 @@ void ec_lock_update_good(ec_lock_t *lock, ec_fop_data_t *fop) lock->good_mask &= fop->good | fop->remaining; } -void __ec_fop_set_error(ec_fop_data_t * fop, int32_t error) +void +__ec_fop_set_error(ec_fop_data_t *fop, int32_t error) { - if ((error != 0) && (fop->error == 0)) - { + if ((error != 0) && (fop->error == 0)) { fop->error = error; } } -void ec_fop_set_error(ec_fop_data_t * fop, int32_t error) +void +ec_fop_set_error(ec_fop_data_t *fop, int32_t error) { LOCK(&fop->lock); @@ -425,18 +426,20 @@ ec_fop_prepare_answer(ec_fop_data_t *fop, gf_boolean_t ro) return cbk; } -void ec_sleep(ec_fop_data_t *fop) +void +ec_sleep(ec_fop_data_t *fop) { LOCK(&fop->lock); - GF_ASSERT (fop->refs > 0); + GF_ASSERT(fop->refs > 0); fop->refs++; fop->jobs++; UNLOCK(&fop->lock); } -int32_t ec_check_complete(ec_fop_data_t * fop, ec_resume_f resume) +int32_t +ec_check_complete(ec_fop_data_t *fop, ec_resume_f resume) { int32_t error = -1; @@ -444,14 +447,11 @@ int32_t ec_check_complete(ec_fop_data_t * fop, ec_resume_f resume) GF_ASSERT(fop->resume == NULL); - if (--fop->jobs != 0) - { + if (--fop->jobs != 0) { ec_trace("WAIT", fop, "resume=%p", resume); fop->resume = resume; - } - else - { + } else { error = fop->error; fop->error = 0; } @@ -461,7 +461,8 @@ int32_t ec_check_complete(ec_fop_data_t * fop, ec_resume_f resume) return error; } -void ec_resume(ec_fop_data_t * fop, int32_t error) +void +ec_resume(ec_fop_data_t *fop, int32_t error) { ec_resume_f resume = NULL; @@ -469,16 +470,13 @@ void ec_resume(ec_fop_data_t * fop, int32_t error) __ec_fop_set_error(fop, error); - if (--fop->jobs == 0) - { + if (--fop->jobs == 0) { resume = fop->resume; fop->resume = NULL; - if (resume != NULL) - { + if (resume != NULL) { ec_trace("RESUME", fop, "error=%d", error); - if (fop->error != 0) - { + if (fop->error != 0) { error = fop->error; } fop->error = 0; @@ -487,21 +485,20 @@ void ec_resume(ec_fop_data_t * fop, int32_t error) UNLOCK(&fop->lock); - if (resume != NULL) - { + if (resume != NULL) { resume(fop, error); } ec_fop_data_release(fop); } -void ec_resume_parent(ec_fop_data_t * fop, int32_t error) +void +ec_resume_parent(ec_fop_data_t *fop, int32_t error) { - ec_fop_data_t * parent; + ec_fop_data_t *parent; parent = fop->parent; - if (parent != NULL) - { + if (parent != NULL) { ec_trace("RESUME_PARENT", fop, "error=%u", error); fop->parent = NULL; ec_resume(parent, error); @@ -509,22 +506,23 @@ void ec_resume_parent(ec_fop_data_t * fop, int32_t error) } gf_boolean_t -ec_is_recoverable_error (int32_t op_errno) +ec_is_recoverable_error(int32_t op_errno) { - switch (op_errno) { + switch (op_errno) { case ENOTCONN: case ESTALE: case ENOENT: - case EBADFD:/*Opened fd but brick is disconnected*/ - case EIO:/*Backend-fs crash like XFS/ext4 etc*/ - return _gf_true; - } - return _gf_false; + case EBADFD: /*Opened fd but brick is disconnected*/ + case EIO: /*Backend-fs crash like XFS/ext4 etc*/ + return _gf_true; + } + return _gf_false; } -void ec_complete(ec_fop_data_t * fop) +void +ec_complete(ec_fop_data_t *fop) { - ec_cbk_data_t * cbk = NULL; + ec_cbk_data_t *cbk = NULL; int32_t resume = 0, update = 0; int healing_count = 0; @@ -536,9 +534,9 @@ void ec_complete(ec_fop_data_t * fop) if (fop->answer == NULL) { if (!list_empty(&fop->cbk_list)) { cbk = list_entry(fop->cbk_list.next, ec_cbk_data_t, list); - healing_count = gf_bits_count (cbk->mask & fop->healing); - /* fop shouldn't be treated as success if it is not - * successful on at least fop->minimum good copies*/ + healing_count = gf_bits_count(cbk->mask & fop->healing); + /* fop shouldn't be treated as success if it is not + * successful on at least fop->minimum good copies*/ if ((cbk->count - healing_count) >= fop->minimum) { fop->answer = cbk; @@ -560,8 +558,7 @@ void ec_complete(ec_fop_data_t * fop) ec_update_good(fop, cbk->mask); } - if (resume) - { + if (resume) { ec_resume(fop, 0); } @@ -571,40 +568,39 @@ void ec_complete(ec_fop_data_t * fop) /* There could be already granted locks sitting on the bricks, unlock for which * must be wound at all costs*/ static gf_boolean_t -ec_must_wind (ec_fop_data_t *fop) -{ - if ((fop->id == GF_FOP_INODELK) || (fop->id == GF_FOP_FINODELK) || - (fop->id == GF_FOP_LK)) { - if (fop->flock.l_type == F_UNLCK) - return _gf_true; - } else if ((fop->id == GF_FOP_ENTRYLK) || - (fop->id == GF_FOP_FENTRYLK)) { - if (fop->entrylk_cmd == ENTRYLK_UNLOCK) - return _gf_true; - } +ec_must_wind(ec_fop_data_t *fop) +{ + if ((fop->id == GF_FOP_INODELK) || (fop->id == GF_FOP_FINODELK) || + (fop->id == GF_FOP_LK)) { + if (fop->flock.l_type == F_UNLCK) + return _gf_true; + } else if ((fop->id == GF_FOP_ENTRYLK) || (fop->id == GF_FOP_FENTRYLK)) { + if (fop->entrylk_cmd == ENTRYLK_UNLOCK) + return _gf_true; + } - return _gf_false; + return _gf_false; } static gf_boolean_t -ec_internal_op (ec_fop_data_t *fop) -{ - if (ec_must_wind (fop)) - return _gf_true; - if (fop->id == GF_FOP_XATTROP) - return _gf_true; - if (fop->id == GF_FOP_FXATTROP) - return _gf_true; - return _gf_false; +ec_internal_op(ec_fop_data_t *fop) +{ + if (ec_must_wind(fop)) + return _gf_true; + if (fop->id == GF_FOP_XATTROP) + return _gf_true; + if (fop->id == GF_FOP_FXATTROP) + return _gf_true; + return _gf_false; } char * -ec_msg_str (ec_fop_data_t *fop) +ec_msg_str(ec_fop_data_t *fop) { - loc_t *loc1 = NULL; - loc_t *loc2 = NULL; - char gfid1[64] = {0}; - char gfid2[64] = {0}; + loc_t *loc1 = NULL; + loc_t *loc2 = NULL; + char gfid1[64] = {0}; + char gfid2[64] = {0}; if (fop->errstr) return fop->errstr; @@ -614,29 +610,29 @@ ec_msg_str (ec_fop_data_t *fop) loc2 = &fop->loc[1]; if (fop->id == GF_FOP_RENAME) { - gf_asprintf(&fop->errstr, - "FOP : '%s' failed on '%s' and '%s' with gfids " - "%s and %s respectively", ec_fop_name (fop->id), - loc1->path, loc2->path, - uuid_utoa_r (loc1->gfid, gfid1), - uuid_utoa_r (loc2->gfid, gfid2)); + gf_asprintf(&fop->errstr, + "FOP : '%s' failed on '%s' and '%s' with gfids " + "%s and %s respectively", + ec_fop_name(fop->id), loc1->path, loc2->path, + uuid_utoa_r(loc1->gfid, gfid1), + uuid_utoa_r(loc2->gfid, gfid2)); } else { - gf_asprintf(&fop->errstr, - "FOP : '%s' failed on '%s' with gfid %s", - ec_fop_name (fop->id), - loc1->path, uuid_utoa_r (loc1->gfid, gfid1)); + gf_asprintf(&fop->errstr, "FOP : '%s' failed on '%s' with gfid %s", + ec_fop_name(fop->id), loc1->path, + uuid_utoa_r(loc1->gfid, gfid1)); } } else { gf_asprintf(&fop->errstr, "FOP : '%s' failed on gfid %s", - ec_fop_name (fop->id), - uuid_utoa_r (fop->fd->inode->gfid, gfid1)); + ec_fop_name(fop->id), + uuid_utoa_r(fop->fd->inode->gfid, gfid1)); } return fop->errstr; } -int32_t ec_child_select(ec_fop_data_t * fop) +int32_t +ec_child_select(ec_fop_data_t *fop) { - ec_t * ec = fop->xl->private; + ec_t *ec = fop->xl->private; int32_t first = 0, num = 0; ec_fop_cleanup(fop); @@ -645,26 +641,22 @@ int32_t ec_child_select(ec_fop_data_t * fop) /* Wind the fop on same subvols as parent for any internal extra fops like * head/tail read in case of writev fop. Unlocks shouldn't do this because * unlock should go on all subvols where lock is performed*/ - if (fop->parent && !ec_internal_op (fop)) { - fop->mask &= (fop->parent->mask & ~fop->parent->healing); + if (fop->parent && !ec_internal_op(fop)) { + fop->mask &= (fop->parent->mask & ~fop->parent->healing); } - if ((fop->mask & ~ec->xl_up) != 0) - { - gf_msg (fop->xl->name, GF_LOG_WARNING, 0, - EC_MSG_OP_EXEC_UNAVAIL, - "Executing operation with " - "some subvolumes unavailable. (%lX). %s ", - fop->mask & ~ec->xl_up, ec_msg_str(fop)); + if ((fop->mask & ~ec->xl_up) != 0) { + gf_msg(fop->xl->name, GF_LOG_WARNING, 0, EC_MSG_OP_EXEC_UNAVAIL, + "Executing operation with " + "some subvolumes unavailable. (%lX). %s ", + fop->mask & ~ec->xl_up, ec_msg_str(fop)); fop->mask &= ec->xl_up; } - switch (fop->minimum) - { + switch (fop->minimum) { case EC_MINIMUM_ALL: fop->minimum = gf_bits_count(fop->mask); - if (fop->minimum >= ec->fragments) - { + if (fop->minimum >= ec->fragments) { break; } case EC_MINIMUM_MIN: @@ -675,11 +667,11 @@ int32_t ec_child_select(ec_fop_data_t * fop) } if (ec->read_policy == EC_ROUND_ROBIN) { - first = ec->idx; - if (++first >= ec->nodes) { - first = 0; - } - ec->idx = first; + first = ec->idx; + if (++first >= ec->nodes) { + first = 0; + } + ec->idx = first; } num = gf_bits_count(fop->mask); @@ -690,14 +682,12 @@ int32_t ec_child_select(ec_fop_data_t * fop) ec_trace("SELECT", fop, ""); - if ((num < fop->minimum) && (num < ec->fragments)) - { - gf_msg (ec->xl->name, GF_LOG_ERROR, 0, - EC_MSG_CHILDS_INSUFFICIENT, - "Insufficient available children " - "for this request (have %d, need " - "%d). %s", - num, fop->minimum, ec_msg_str(fop)); + if ((num < fop->minimum) && (num < ec->fragments)) { + gf_msg(ec->xl->name, GF_LOG_ERROR, 0, EC_MSG_CHILDS_INSUFFICIENT, + "Insufficient available children " + "for this request (have %d, need " + "%d). %s", + num, fop->minimum, ec_msg_str(fop)); return 0; } @@ -706,10 +696,11 @@ int32_t ec_child_select(ec_fop_data_t * fop) return 1; } -void ec_dispatch_next(ec_fop_data_t * fop, uint32_t idx) +void +ec_dispatch_next(ec_fop_data_t *fop, uint32_t idx) { uint32_t i = EC_INVALID_INDEX; - ec_t * ec = fop->xl->private; + ec_t *ec = fop->xl->private; LOCK(&fop->lock); @@ -727,15 +718,15 @@ void ec_dispatch_next(ec_fop_data_t * fop, uint32_t idx) UNLOCK(&fop->lock); - if (i < EC_MAX_NODES) - { + if (i < EC_MAX_NODES) { fop->wind(ec, fop, idx); } } -void ec_dispatch_mask(ec_fop_data_t * fop, uintptr_t mask) +void +ec_dispatch_mask(ec_fop_data_t *fop, uintptr_t mask) { - ec_t * ec = fop->xl->private; + ec_t *ec = fop->xl->private; int32_t count, idx; count = gf_bits_count(mask); @@ -752,10 +743,8 @@ void ec_dispatch_mask(ec_fop_data_t * fop, uintptr_t mask) UNLOCK(&fop->lock); idx = 0; - while (mask != 0) - { - if ((mask & 1) != 0) - { + while (mask != 0) { + if ((mask & 1) != 0) { fop->wind(ec, fop, idx); } idx++; @@ -763,27 +752,27 @@ void ec_dispatch_mask(ec_fop_data_t * fop, uintptr_t mask) } } -void ec_dispatch_start(ec_fop_data_t * fop) +void +ec_dispatch_start(ec_fop_data_t *fop) { fop->answer = NULL; fop->good = 0; INIT_LIST_HEAD(&fop->cbk_list); - if (fop->lock_count > 0) - { + if (fop->lock_count > 0) { ec_owner_copy(fop->frame, &fop->req_frame->root->lk_owner); } } -void ec_dispatch_one(ec_fop_data_t * fop) +void +ec_dispatch_one(ec_fop_data_t *fop) { ec_dispatch_start(fop); - if (ec_child_select(fop)) - { + if (ec_child_select(fop)) { fop->expected = 1; - fop->first = ec_select_first_by_read_policy (fop->xl->private, fop); + fop->first = ec_select_first_by_read_policy(fop->xl->private, fop); ec_dispatch_next(fop, fop->first); } @@ -799,8 +788,8 @@ ec_dispatch_one_retry(ec_fop_data_t *fop, ec_cbk_data_t **cbk) *cbk = tmp; } if ((tmp != NULL) && (tmp->op_ret < 0) && - ec_is_recoverable_error (tmp->op_errno)) { - GF_ASSERT (fop->mask & (1ULL << tmp->idx)); + ec_is_recoverable_error(tmp->op_errno)) { + GF_ASSERT(fop->mask & (1ULL << tmp->idx)); fop->mask ^= (1ULL << tmp->idx); if (fop->mask) { return _gf_true; @@ -810,12 +799,12 @@ ec_dispatch_one_retry(ec_fop_data_t *fop, ec_cbk_data_t **cbk) return _gf_false; } -void ec_dispatch_inc(ec_fop_data_t * fop) +void +ec_dispatch_inc(ec_fop_data_t *fop) { ec_dispatch_start(fop); - if (ec_child_select(fop)) - { + if (ec_child_select(fop)) { fop->expected = gf_bits_count(fop->remaining); fop->first = 0; @@ -824,35 +813,34 @@ void ec_dispatch_inc(ec_fop_data_t * fop) } void -ec_dispatch_all (ec_fop_data_t *fop) +ec_dispatch_all(ec_fop_data_t *fop) { - ec_dispatch_start(fop); + ec_dispatch_start(fop); - if (ec_child_select(fop)) { - fop->expected = gf_bits_count(fop->remaining); - fop->first = 0; + if (ec_child_select(fop)) { + fop->expected = gf_bits_count(fop->remaining); + fop->first = 0; - ec_dispatch_mask(fop, fop->remaining); - } + ec_dispatch_mask(fop, fop->remaining); + } } -void ec_dispatch_min(ec_fop_data_t * fop) +void +ec_dispatch_min(ec_fop_data_t *fop) { - ec_t * ec = fop->xl->private; + ec_t *ec = fop->xl->private; uintptr_t mask; uint32_t idx; int32_t count; ec_dispatch_start(fop); - if (ec_child_select(fop)) - { + if (ec_child_select(fop)) { fop->expected = count = ec->fragments; - fop->first = ec_select_first_by_read_policy (fop->xl->private, fop); + fop->first = ec_select_first_by_read_policy(fop->xl->private, fop); idx = fop->first - 1; mask = 0; - while (count-- > 0) - { + while (count-- > 0) { idx = ec_child_next(ec, fop, idx + 1); if (idx < EC_MAX_NODES) mask |= 1ULL << idx; @@ -862,19 +850,18 @@ void ec_dispatch_min(ec_fop_data_t * fop) } } -ec_lock_t *ec_lock_allocate(ec_fop_data_t *fop, loc_t *loc) +ec_lock_t * +ec_lock_allocate(ec_fop_data_t *fop, loc_t *loc) { ec_t *ec = fop->xl->private; - ec_lock_t * lock; + ec_lock_t *lock; int32_t err; if ((loc->inode == NULL) || - (gf_uuid_is_null(loc->gfid) && gf_uuid_is_null(loc->inode->gfid))) - { - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_INVALID_INODE, - "Trying to lock based on an invalid " - "inode"); + (gf_uuid_is_null(loc->gfid) && gf_uuid_is_null(loc->inode->gfid))) { + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_INODE, + "Trying to lock based on an invalid " + "inode"); __ec_fop_set_error(fop, EINVAL); @@ -882,8 +869,7 @@ ec_lock_t *ec_lock_allocate(ec_fop_data_t *fop, loc_t *loc) } lock = mem_get0(ec->lock_pool); - if (lock != NULL) - { + if (lock != NULL) { lock->good_mask = -1ULL; INIT_LIST_HEAD(&lock->owners); INIT_LIST_HEAD(&lock->waiting); @@ -900,7 +886,8 @@ ec_lock_t *ec_lock_allocate(ec_fop_data_t *fop, loc_t *loc) return lock; } -void ec_lock_destroy(ec_lock_t * lock) +void +ec_lock_destroy(ec_lock_t *lock) { loc_wipe(&lock->loc); if (lock->fd != NULL) { @@ -910,13 +897,15 @@ void ec_lock_destroy(ec_lock_t * lock) mem_put(lock); } -int32_t ec_lock_compare(ec_lock_t * lock1, ec_lock_t * lock2) +int32_t +ec_lock_compare(ec_lock_t *lock1, ec_lock_t *lock2) { return gf_uuid_compare(lock1->loc.gfid, lock2->loc.gfid); } -void ec_lock_insert(ec_fop_data_t *fop, ec_lock_t *lock, uint32_t flags, - loc_t *base, off_t fl_start, size_t fl_size) +void +ec_lock_insert(ec_fop_data_t *fop, ec_lock_t *lock, uint32_t flags, loc_t *base, + off_t fl_start, size_t fl_size) { ec_lock_link_t *link; @@ -951,14 +940,14 @@ void ec_lock_insert(ec_fop_data_t *fop, ec_lock_t *lock, uint32_t flags, link->update[EC_METADATA_TXN] = (flags & EC_UPDATE_META) != 0; link->base = base; link->fl_start = fl_start; - link->fl_end = ec_range_end_get (fl_start, fl_size); + link->fl_end = ec_range_end_get(fl_start, fl_size); lock->refs_pending++; } -void ec_lock_prepare_inode_internal(ec_fop_data_t *fop, loc_t *loc, - uint32_t flags, loc_t *base, - off_t fl_start, size_t fl_size) +void +ec_lock_prepare_inode_internal(ec_fop_data_t *fop, loc_t *loc, uint32_t flags, + loc_t *base, off_t fl_start, size_t fl_size) { ec_lock_t *lock = NULL; ec_inode_t *ctx; @@ -987,8 +976,8 @@ void ec_lock_prepare_inode_internal(ec_fop_data_t *fop, loc_t *loc, if ((fop->lock_count > 0) && (fop->locks[0].lock == lock)) { /* Combine data/meta updates */ fop->locks[0].update[EC_DATA_TXN] |= (flags & EC_UPDATE_DATA) != 0; - fop->locks[0].update[EC_METADATA_TXN] |= - (flags & EC_UPDATE_META) != 0; + fop->locks[0].update[EC_METADATA_TXN] |= (flags & EC_UPDATE_META) != + 0; /* Only one base inode is allowed per fop, so there shouldn't be * overwrites here. */ @@ -999,8 +988,10 @@ void ec_lock_prepare_inode_internal(ec_fop_data_t *fop, loc_t *loc, goto update_query; } - ec_trace("LOCK_INODELK", fop, "lock=%p, inode=%p. Lock already " - "acquired", lock, loc->inode); + ec_trace("LOCK_INODELK", fop, + "lock=%p, inode=%p. Lock already " + "acquired", + lock, loc->inode); goto insert; } @@ -1026,14 +1017,16 @@ unlock: UNLOCK(&loc->inode->lock); } -void ec_lock_prepare_inode(ec_fop_data_t *fop, loc_t *loc, uint32_t flags, - off_t fl_start, size_t fl_size) +void +ec_lock_prepare_inode(ec_fop_data_t *fop, loc_t *loc, uint32_t flags, + off_t fl_start, size_t fl_size) { ec_lock_prepare_inode_internal(fop, loc, flags, NULL, fl_start, fl_size); } -void ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, loc_t *base, - uint32_t flags) +void +ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, loc_t *base, + uint32_t flags) { loc_t tmp; int32_t err; @@ -1052,7 +1045,7 @@ void ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, loc_t *base, if ((flags & EC_INODE_SIZE) != 0) { flags ^= EC_INODE_SIZE; } else { - base = NULL; + base = NULL; } ec_lock_prepare_inode_internal(fop, &tmp, flags, base, 0, LLONG_MAX); @@ -1060,8 +1053,9 @@ void ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, loc_t *base, loc_wipe(&tmp); } -void ec_lock_prepare_fd(ec_fop_data_t *fop, fd_t *fd, uint32_t flags, - off_t fl_start, size_t fl_size) +void +ec_lock_prepare_fd(ec_fop_data_t *fop, fd_t *fd, uint32_t flags, off_t fl_start, + size_t fl_size) { loc_t loc; int32_t err; @@ -1083,15 +1077,14 @@ void ec_lock_prepare_fd(ec_fop_data_t *fop, fd_t *fd, uint32_t flags, } gf_boolean_t -ec_config_check (xlator_t *xl, ec_config_t *config) +ec_config_check(xlator_t *xl, ec_config_t *config) { ec_t *ec; ec = xl->private; if ((config->version != EC_CONFIG_VERSION) || (config->algorithm != EC_CONFIG_ALGORITHM) || - (config->gf_word_size != EC_GF_BITS) || - (config->bricks != ec->nodes) || + (config->gf_word_size != EC_GF_BITS) || (config->bricks != ec->nodes) || (config->redundancy != ec->redundancy) || (config->chunk_size != EC_METHOD_CHUNK_SIZE)) { uint32_t data_bricks; @@ -1110,20 +1103,17 @@ ec_config_check (xlator_t *xl, ec_config_t *config) if ((config->redundancy < 1) || (config->redundancy * 2 >= config->bricks) || !ec_is_power_of_2(config->gf_word_size) || - ((config->chunk_size * 8) % (config->gf_word_size * data_bricks) - != 0)) { - gf_msg (xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_INVALID_CONFIG, - "Invalid or corrupted config"); + ((config->chunk_size * 8) % (config->gf_word_size * data_bricks) != + 0)) { + gf_msg(xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_CONFIG, + "Invalid or corrupted config"); } else { - gf_msg (xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_INVALID_CONFIG, - "Unsupported config " - "(V=%u, A=%u, W=%u, " - "N=%u, R=%u, S=%u)", - config->version, config->algorithm, - config->gf_word_size, config->bricks, - config->redundancy, config->chunk_size); + gf_msg(xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_CONFIG, + "Unsupported config " + "(V=%u, A=%u, W=%u, " + "N=%u, R=%u, S=%u)", + config->version, config->algorithm, config->gf_word_size, + config->bricks, config->redundancy, config->chunk_size); } return _gf_false; @@ -1133,20 +1123,18 @@ ec_config_check (xlator_t *xl, ec_config_t *config) } gf_boolean_t -ec_set_dirty_flag (ec_lock_link_t *link, ec_inode_t *ctx, - uint64_t *dirty) +ec_set_dirty_flag(ec_lock_link_t *link, ec_inode_t *ctx, uint64_t *dirty) { - gf_boolean_t set_dirty = _gf_false; if (link->update[EC_DATA_TXN] && !ctx->dirty[EC_DATA_TXN]) { - if (!link->optimistic_changelog) - dirty[EC_DATA_TXN] = 1; + if (!link->optimistic_changelog) + dirty[EC_DATA_TXN] = 1; } if (link->update[EC_METADATA_TXN] && !ctx->dirty[EC_METADATA_TXN]) { - if (!link->optimistic_changelog) - dirty[EC_METADATA_TXN] = 1; + if (!link->optimistic_changelog) + dirty[EC_METADATA_TXN] = 1; } if (dirty[EC_METADATA_TXN] || dirty[EC_DATA_TXN]) { @@ -1157,9 +1145,9 @@ ec_set_dirty_flag (ec_lock_link_t *link, ec_inode_t *ctx, } int32_t -ec_prepare_update_cbk (call_frame_t *frame, void *cookie, - xlator_t *this, int32_t op_ret, int32_t op_errno, - dict_t *dict, dict_t *xdata) +ec_prepare_update_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *dict, + dict_t *xdata) { struct list_head list; ec_fop_data_t *fop = cookie, *parent, *tmp; @@ -1179,95 +1167,87 @@ ec_prepare_update_cbk (call_frame_t *frame, void *cookie, LOCK(&lock->loc.inode->lock); - list_for_each_entry(link, &lock->owners, owner_list) { + list_for_each_entry(link, &lock->owners, owner_list) + { if ((link->waiting_flags & provided_flags) != 0) { link->waiting_flags ^= (link->waiting_flags & provided_flags); if (EC_NEEDED_FLAGS(link->waiting_flags) == 0) - list_add_tail(&link->fop->cbk_list, &list); + list_add_tail(&link->fop->cbk_list, &list); } } if (op_ret < 0) { - gf_msg (this->name, GF_LOG_WARNING, op_errno, - EC_MSG_SIZE_VERS_GET_FAIL, - "Failed to get size and version : %s", - ec_msg_str(fop)); + gf_msg(this->name, GF_LOG_WARNING, op_errno, EC_MSG_SIZE_VERS_GET_FAIL, + "Failed to get size and version : %s", ec_msg_str(fop)); goto unlock; } if (EC_FLAGS_HAVE(provided_flags, EC_FLAG_XATTROP)) { - op_errno = -ec_dict_del_array(dict, EC_XATTR_VERSION, - ctx->pre_version, - EC_VERSION_SIZE); + op_errno = -ec_dict_del_array(dict, EC_XATTR_VERSION, ctx->pre_version, + EC_VERSION_SIZE); + if (op_errno != 0) { + gf_msg(this->name, GF_LOG_ERROR, op_errno, + EC_MSG_VER_XATTR_GET_FAIL, "Unable to get version xattr. %s", + ec_msg_str(fop)); + goto unlock; + } + ctx->post_version[0] += ctx->pre_version[0]; + ctx->post_version[1] += ctx->pre_version[1]; + + ctx->have_version = _gf_true; + + if (lock->loc.inode->ia_type == IA_IFREG || + lock->loc.inode->ia_type == IA_INVAL) { + op_errno = -ec_dict_del_number(dict, EC_XATTR_SIZE, &ctx->pre_size); if (op_errno != 0) { - gf_msg (this->name, GF_LOG_ERROR, op_errno, - EC_MSG_VER_XATTR_GET_FAIL, - "Unable to get version xattr. %s", - ec_msg_str(fop)); - goto unlock; + if (lock->loc.inode->ia_type == IA_IFREG) { + gf_msg(this->name, GF_LOG_ERROR, op_errno, + EC_MSG_SIZE_XATTR_GET_FAIL, + "Unable to get size xattr. %s", ec_msg_str(fop)); + goto unlock; + } + } else { + ctx->post_size = ctx->pre_size; + + ctx->have_size = _gf_true; } - ctx->post_version[0] += ctx->pre_version[0]; - ctx->post_version[1] += ctx->pre_version[1]; - ctx->have_version = _gf_true; + op_errno = -ec_dict_del_config(dict, EC_XATTR_CONFIG, &ctx->config); + if (op_errno != 0) { + if ((lock->loc.inode->ia_type == IA_IFREG) || + (op_errno != ENODATA)) { + gf_msg(this->name, GF_LOG_ERROR, op_errno, + EC_MSG_CONFIG_XATTR_GET_FAIL, + "Unable to get config xattr. %s", ec_msg_str(fop)); - if (lock->loc.inode->ia_type == IA_IFREG || - lock->loc.inode->ia_type == IA_INVAL) { - op_errno = -ec_dict_del_number(dict, EC_XATTR_SIZE, - &ctx->pre_size); - if (op_errno != 0) { - if (lock->loc.inode->ia_type == IA_IFREG) { - gf_msg (this->name, GF_LOG_ERROR, op_errno, - EC_MSG_SIZE_XATTR_GET_FAIL, - "Unable to get size xattr. %s", - ec_msg_str(fop)); - goto unlock; - } - } else { - ctx->post_size = ctx->pre_size; - - ctx->have_size = _gf_true; + goto unlock; } + } else { + if (!ec_config_check(parent->xl, &ctx->config)) { + gf_msg(this->name, GF_LOG_ERROR, EINVAL, + EC_MSG_CONFIG_XATTR_INVALID, "Invalid config xattr"); - op_errno = -ec_dict_del_config(dict, EC_XATTR_CONFIG, - &ctx->config); - if (op_errno != 0) { - if ((lock->loc.inode->ia_type == IA_IFREG) || - (op_errno != ENODATA)) { - gf_msg (this->name, GF_LOG_ERROR, op_errno, - EC_MSG_CONFIG_XATTR_GET_FAIL, - "Unable to get config xattr. %s", - ec_msg_str(fop)); - - goto unlock; - } - } else { - if (!ec_config_check(parent->xl, &ctx->config)) { - gf_msg (this->name, GF_LOG_ERROR, EINVAL, - EC_MSG_CONFIG_XATTR_INVALID, - "Invalid config xattr"); - - op_errno = EINVAL; - - goto unlock; - } - ctx->have_config = _gf_true; + op_errno = EINVAL; + + goto unlock; } + ctx->have_config = _gf_true; } - ctx->have_info = _gf_true; + } + ctx->have_info = _gf_true; } - ec_set_dirty_flag (fop->data, ctx, dirty); + ec_set_dirty_flag(fop->data, ctx, dirty); if (dirty[EC_METADATA_TXN] && (EC_FLAGS_HAVE(provided_flags, EC_FLAG_METADATA_DIRTY))) { - GF_ASSERT (!ctx->dirty[EC_METADATA_TXN]); - ctx->dirty[EC_METADATA_TXN] = 1; + GF_ASSERT(!ctx->dirty[EC_METADATA_TXN]); + ctx->dirty[EC_METADATA_TXN] = 1; } if (dirty[EC_DATA_TXN] && (EC_FLAGS_HAVE(provided_flags, EC_FLAG_DATA_DIRTY))) { - GF_ASSERT (!ctx->dirty[EC_DATA_TXN]); - ctx->dirty[EC_DATA_TXN] = 1; + GF_ASSERT(!ctx->dirty[EC_DATA_TXN]); + ctx->dirty[EC_DATA_TXN] = 1; } op_errno = 0; unlock: @@ -1279,20 +1259,20 @@ unlock: * it dirty and update versions right away if dirty was not set before. */ if (lock->good_mask & ~(fop->good | fop->remaining)) { - release = _gf_true; + release = _gf_true; } if (parent_link->update[0] && !parent_link->dirty[0]) { - lock->release |= release; + lock->release |= release; } if (parent_link->update[1] && !parent_link->dirty[1]) { - lock->release |= release; + lock->release |= release; } /* We don't allow the main fop to be executed on bricks that have not * succeeded the initial xattrop. */ - ec_lock_update_good (lock, fop); + ec_lock_update_good(lock, fop); /*As of now only data healing marks bricks as healing*/ lock->healing |= fop->healing; @@ -1308,7 +1288,7 @@ unlock: tmp->mask &= fop->good; /*As of now only data healing marks bricks as healing*/ - if (ec_is_data_fop (tmp->id)) { + if (ec_is_data_fop(tmp->id)) { tmp->healing |= fop->healing; } } @@ -1322,52 +1302,53 @@ unlock: static gf_boolean_t ec_set_needed_flag(ec_lock_t *lock, ec_lock_link_t *link, uint64_t flag) { - uint64_t current; + uint64_t current; - link->waiting_flags |= EC_FLAG_NEEDS(flag); + link->waiting_flags |= EC_FLAG_NEEDS(flag); - current = EC_NEEDED_FLAGS(lock->waiting_flags); - if (!EC_FLAGS_HAVE(current, flag)) { - lock->waiting_flags |= EC_FLAG_NEEDS(flag); - link->waiting_flags |= EC_FLAG_PROVIDES(flag); + current = EC_NEEDED_FLAGS(lock->waiting_flags); + if (!EC_FLAGS_HAVE(current, flag)) { + lock->waiting_flags |= EC_FLAG_NEEDS(flag); + link->waiting_flags |= EC_FLAG_PROVIDES(flag); - return _gf_true; - } + return _gf_true; + } - return _gf_false; + return _gf_false; } static uint64_t -ec_set_xattrop_flags_and_params (ec_lock_t *lock, ec_lock_link_t *link, - uint64_t *dirty) +ec_set_xattrop_flags_and_params(ec_lock_t *lock, ec_lock_link_t *link, + uint64_t *dirty) { - uint64_t oldflags = 0; - uint64_t newflags = 0; - ec_inode_t *ctx = lock->ctx; + uint64_t oldflags = 0; + uint64_t newflags = 0; + ec_inode_t *ctx = lock->ctx; - oldflags = EC_NEEDED_FLAGS(lock->waiting_flags); + oldflags = EC_NEEDED_FLAGS(lock->waiting_flags); - if (lock->query && !ctx->have_info) { - ec_set_needed_flag(lock, link, EC_FLAG_XATTROP); - } + if (lock->query && !ctx->have_info) { + ec_set_needed_flag(lock, link, EC_FLAG_XATTROP); + } - if (dirty[EC_DATA_TXN]) { - if (!ec_set_needed_flag(lock, link, EC_FLAG_DATA_DIRTY)) { - dirty[EC_DATA_TXN] = 0; - } + if (dirty[EC_DATA_TXN]) { + if (!ec_set_needed_flag(lock, link, EC_FLAG_DATA_DIRTY)) { + dirty[EC_DATA_TXN] = 0; } + } - if (dirty[EC_METADATA_TXN]) { - if (!ec_set_needed_flag(lock, link, EC_FLAG_METADATA_DIRTY)) { - dirty[EC_METADATA_TXN] = 0; - } + if (dirty[EC_METADATA_TXN]) { + if (!ec_set_needed_flag(lock, link, EC_FLAG_METADATA_DIRTY)) { + dirty[EC_METADATA_TXN] = 0; } - newflags = EC_NEEDED_FLAGS(lock->waiting_flags); + } + newflags = EC_NEEDED_FLAGS(lock->waiting_flags); - return oldflags ^ newflags; + return oldflags ^ newflags; } -void ec_get_size_version(ec_lock_link_t *link) +void +ec_get_size_version(ec_lock_link_t *link) { loc_t loc; ec_lock_t *lock; @@ -1375,7 +1356,7 @@ void ec_get_size_version(ec_lock_link_t *link) ec_fop_data_t *fop; dict_t *dict = NULL; dict_t *xdata = NULL; - ec_t *ec = NULL; + ec_t *ec = NULL; int32_t error = 0; gf_boolean_t set_dirty = _gf_false; uint64_t allzero[EC_VERSION_SIZE] = {0, 0}; @@ -1383,18 +1364,18 @@ void ec_get_size_version(ec_lock_link_t *link) lock = link->lock; ctx = lock->ctx; fop = link->fop; - ec = fop->xl->private; + ec = fop->xl->private; uint64_t changed_flags = 0; - if (ec->optimistic_changelog && - !(ec->node_mask & ~link->lock->good_mask) && !ec_is_data_fop (fop->id)) - link->optimistic_changelog = _gf_true; + if (ec->optimistic_changelog && !(ec->node_mask & ~link->lock->good_mask) && + !ec_is_data_fop(fop->id)) + link->optimistic_changelog = _gf_true; - set_dirty = ec_set_dirty_flag (link, ctx, dirty); + set_dirty = ec_set_dirty_flag(link, ctx, dirty); /* If ec metadata has already been retrieved, do not try again. */ if (ctx->have_info && (!set_dirty)) { - if (ec_is_data_fop (fop->id)) { + if (ec_is_data_fop(fop->id)) { fop->healing |= lock->healing; } return; @@ -1402,24 +1383,23 @@ void ec_get_size_version(ec_lock_link_t *link) /* Determine if there's something we need to retrieve for the current * operation. */ - if (!set_dirty && !lock->query && - (lock->loc.inode->ia_type != IA_IFREG) && + if (!set_dirty && !lock->query && (lock->loc.inode->ia_type != IA_IFREG) && (lock->loc.inode->ia_type != IA_INVAL)) { - return; + return; } memset(&loc, 0, sizeof(loc)); LOCK(&lock->loc.inode->lock); - changed_flags = ec_set_xattrop_flags_and_params (lock, link, dirty); + changed_flags = ec_set_xattrop_flags_and_params(lock, link, dirty); if (link->waiting_flags) { - /* This fop needs to wait until all its flags are cleared which - * potentially can be cleared by other xattrops that are already - * wound*/ - ec_sleep(fop); + /* This fop needs to wait until all its flags are cleared which + * potentially can be cleared by other xattrops that are already + * wound*/ + ec_sleep(fop); } else { - GF_ASSERT (!changed_flags); + GF_ASSERT(!changed_flags); } UNLOCK(&lock->loc.inode->lock); @@ -1434,40 +1414,38 @@ void ec_get_size_version(ec_lock_link_t *link) } if (EC_FLAGS_HAVE(changed_flags, EC_FLAG_XATTROP)) { - /* Once we know that an xattrop will be needed, - * we try to get all available information in a - * single call. */ - error = ec_dict_set_array(dict, EC_XATTR_VERSION, allzero, - EC_VERSION_SIZE); + /* Once we know that an xattrop will be needed, + * we try to get all available information in a + * single call. */ + error = ec_dict_set_array(dict, EC_XATTR_VERSION, allzero, + EC_VERSION_SIZE); + if (error != 0) { + goto out; + } + + if (lock->loc.inode->ia_type == IA_IFREG || + lock->loc.inode->ia_type == IA_INVAL) { + error = ec_dict_set_number(dict, EC_XATTR_SIZE, 0); + if (error == 0) { + error = ec_dict_set_number(dict, EC_XATTR_CONFIG, 0); + } if (error != 0) { goto out; } - if (lock->loc.inode->ia_type == IA_IFREG || - lock->loc.inode->ia_type == IA_INVAL) { - error = ec_dict_set_number(dict, EC_XATTR_SIZE, 0); - if (error == 0) { - error = ec_dict_set_number(dict, EC_XATTR_CONFIG, 0); - } - if (error != 0) { - goto out; - } - - xdata = dict_new(); - if (xdata == NULL || dict_set_int32 (xdata, GF_GET_SIZE, 1)) { - error = -ENOMEM; - goto out; - } - + xdata = dict_new(); + if (xdata == NULL || dict_set_int32(xdata, GF_GET_SIZE, 1)) { + error = -ENOMEM; + goto out; } + } } - if (memcmp (allzero, dirty, sizeof (allzero))) { - error = ec_dict_set_array(dict, EC_XATTR_DIRTY, dirty, - EC_VERSION_SIZE); - if (error != 0) { - goto out; - } + if (memcmp(allzero, dirty, sizeof(allzero))) { + error = ec_dict_set_array(dict, EC_XATTR_DIRTY, dirty, EC_VERSION_SIZE); + if (error != 0) { + goto out; + } } fop->frame->root->uid = 0; @@ -1495,13 +1473,13 @@ void ec_get_size_version(ec_lock_link_t *link) loc.name = NULL; } - ec_xattrop (fop->frame, fop->xl, fop->mask, fop->minimum, - ec_prepare_update_cbk, link, &loc, - GF_XATTROP_ADD_ARRAY64, dict, xdata); + ec_xattrop(fop->frame, fop->xl, fop->mask, fop->minimum, + ec_prepare_update_cbk, link, &loc, GF_XATTROP_ADD_ARRAY64, + dict, xdata); } else { ec_fxattrop(fop->frame, fop->xl, fop->mask, fop->minimum, - ec_prepare_update_cbk, link, lock->fd, - GF_XATTROP_ADD_ARRAY64, dict, xdata); + ec_prepare_update_cbk, link, lock->fd, + GF_XATTROP_ADD_ARRAY64, dict, xdata); } error = 0; @@ -1526,8 +1504,7 @@ out: } gf_boolean_t -__ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode, - uint64_t *size) +__ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode, uint64_t *size) { ec_inode_t *ctx; gf_boolean_t found = _gf_false; @@ -1547,14 +1524,13 @@ out: } gf_boolean_t -ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode, - uint64_t *size) +ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode, uint64_t *size) { gf_boolean_t found = _gf_false; LOCK(&inode->lock); { - found = __ec_get_inode_size (fop, inode, size); + found = __ec_get_inode_size(fop, inode, size); } UNLOCK(&inode->lock); @@ -1562,8 +1538,7 @@ ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode, } gf_boolean_t -__ec_set_inode_size(ec_fop_data_t *fop, inode_t *inode, - uint64_t size) +__ec_set_inode_size(ec_fop_data_t *fop, inode_t *inode, uint64_t size) { ec_inode_t *ctx; gf_boolean_t found = _gf_false; @@ -1590,38 +1565,37 @@ out: } gf_boolean_t -ec_set_inode_size(ec_fop_data_t *fop, inode_t *inode, - uint64_t size) +ec_set_inode_size(ec_fop_data_t *fop, inode_t *inode, uint64_t size) { gf_boolean_t found = _gf_false; - LOCK (&inode->lock); + LOCK(&inode->lock); { - found = __ec_set_inode_size (fop, inode, size); + found = __ec_set_inode_size(fop, inode, size); } - UNLOCK (&inode->lock); + UNLOCK(&inode->lock); return found; } static void -ec_release_stripe_cache (ec_inode_t *ctx) +ec_release_stripe_cache(ec_inode_t *ctx) { - ec_stripe_list_t *stripe_cache = NULL; - ec_stripe_t *stripe = NULL; + ec_stripe_list_t *stripe_cache = NULL; + ec_stripe_t *stripe = NULL; - stripe_cache = &ctx->stripe_cache; - while (!list_empty (&stripe_cache->lru)) { - stripe = list_first_entry (&stripe_cache->lru, ec_stripe_t, - lru); - list_del (&stripe->lru); - GF_FREE (stripe); - } - stripe_cache->count = 0; - stripe_cache->max = 0; + stripe_cache = &ctx->stripe_cache; + while (!list_empty(&stripe_cache->lru)) { + stripe = list_first_entry(&stripe_cache->lru, ec_stripe_t, lru); + list_del(&stripe->lru); + GF_FREE(stripe); + } + stripe_cache->count = 0; + stripe_cache->max = 0; } -void ec_clear_inode_info(ec_fop_data_t *fop, inode_t *inode) +void +ec_clear_inode_info(ec_fop_data_t *fop, inode_t *inode) { ec_inode_t *ctx; @@ -1632,7 +1606,7 @@ void ec_clear_inode_info(ec_fop_data_t *fop, inode_t *inode) goto unlock; } - ec_release_stripe_cache (ctx); + ec_release_stripe_cache(ctx); ctx->have_info = _gf_false; ctx->have_config = _gf_false; ctx->have_version = _gf_false; @@ -1648,10 +1622,10 @@ unlock: UNLOCK(&inode->lock); } -int32_t ec_get_real_size_cbk(call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, inode_t *inode, - struct iatt *buf, dict_t *xdata, - struct iatt *postparent) +int32_t +ec_get_real_size_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, inode_t *inode, + struct iatt *buf, dict_t *xdata, struct iatt *postparent) { ec_fop_data_t *fop = cookie; ec_lock_link_t *link; @@ -1675,7 +1649,8 @@ int32_t ec_get_real_size_cbk(call_frame_t *frame, void *cookie, xlator_t *this, * Any error processing this request is ignored. In the worst case, an invalid * or not up to date value in the iatt could cause some cache invalidation. */ -void ec_get_real_size(ec_lock_link_t *link) +void +ec_get_real_size(ec_lock_link_t *link) { ec_fop_data_t *fop; dict_t *xdata; @@ -1725,24 +1700,26 @@ ec_lock_update_fd(ec_lock_t *lock, ec_fop_data_t *fop) } static gf_boolean_t -ec_link_has_lock_conflict (ec_lock_link_t *link, gf_boolean_t waitlist_check) +ec_link_has_lock_conflict(ec_lock_link_t *link, gf_boolean_t waitlist_check) { - ec_lock_link_t *trav_link = NULL; + ec_lock_link_t *trav_link = NULL; - list_for_each_entry (trav_link, &link->lock->owners, owner_list) { - if (ec_lock_conflict (trav_link, link)) - return _gf_true; - } + list_for_each_entry(trav_link, &link->lock->owners, owner_list) + { + if (ec_lock_conflict(trav_link, link)) + return _gf_true; + } - if (!waitlist_check) - return _gf_false; + if (!waitlist_check) + return _gf_false; - list_for_each_entry (trav_link, &link->lock->waiting, wait_list) { - if (ec_lock_conflict (trav_link, link)) - return _gf_true; - } + list_for_each_entry(trav_link, &link->lock->waiting, wait_list) + { + if (ec_lock_conflict(trav_link, link)) + return _gf_true; + } - return _gf_false; + return _gf_false; } static void @@ -1763,7 +1740,7 @@ ec_lock_wake_shared(ec_lock_t *lock, struct list_head *list) /* If the fop is not shareable, only this fop can be assigned as owner. * Other fops will need to wait until this one finishes. */ - if (ec_link_has_lock_conflict (link, _gf_false)) { + if (ec_link_has_lock_conflict(link, _gf_false)) { conflict = _gf_true; } @@ -1794,7 +1771,8 @@ ec_lock_apply(ec_lock_link_t *link) ec_get_real_size(link); } -gf_boolean_t ec_lock_acquire(ec_lock_link_t *link); +gf_boolean_t +ec_lock_acquire(ec_lock_link_t *link); static void ec_lock_resume_shared(struct list_head *list) @@ -1818,7 +1796,8 @@ ec_lock_resume_shared(struct list_head *list) } } -void ec_lock_acquired(ec_lock_link_t *link) +void +ec_lock_acquired(ec_lock_link_t *link) { struct list_head list; ec_lock_t *lock; @@ -1850,8 +1829,9 @@ void ec_lock_acquired(ec_lock_link_t *link) ec_lock_resume_shared(&list); } -int32_t ec_locked(call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *xdata) +int32_t +ec_locked(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, dict_t *xdata) { ec_fop_data_t *fop = cookie; ec_lock_link_t *link = NULL; @@ -1866,15 +1846,15 @@ int32_t ec_locked(call_frame_t *frame, void *cookie, xlator_t *this, ec_lock_acquired(link); ec_lock(fop->parent); } else { - gf_msg (this->name, GF_LOG_WARNING, op_errno, - EC_MSG_PREOP_LOCK_FAILED, - "Failed to complete preop lock"); + gf_msg(this->name, GF_LOG_WARNING, op_errno, EC_MSG_PREOP_LOCK_FAILED, + "Failed to complete preop lock"); } return 0; } -gf_boolean_t ec_lock_acquire(ec_lock_link_t *link) +gf_boolean_t +ec_lock_acquire(ec_lock_link_t *link) { ec_lock_t *lock; ec_fop_data_t *fop; @@ -1907,62 +1887,62 @@ gf_boolean_t ec_lock_acquire(ec_lock_link_t *link) static ec_lock_link_t * ec_lock_timer_cancel(xlator_t *xl, ec_lock_t *lock) { - ec_lock_link_t *timer_link; + ec_lock_link_t *timer_link; - /* If we don't have any timer, there's nothing to cancel. */ - if (lock->timer == NULL) { - return NULL; - } + /* If we don't have any timer, there's nothing to cancel. */ + if (lock->timer == NULL) { + return NULL; + } - /* We are trying to access a lock that has an unlock timer active. - * This means that the lock must be idle, i.e. no fop can be in the - * owner, waiting or frozen lists. It also means that the lock cannot - * have been marked as being released (this is done without timers). - * There should only be one owner reference, but it's possible that - * some fops are being prepared to use this lock. */ - GF_ASSERT ((lock->refs_owners == 1) && - list_empty(&lock->owners) && list_empty(&lock->waiting)); - - /* We take the timer_link before cancelling the timer, since a - * successful cancellation will destroy it. It must not be NULL - * because it references the fop responsible for the delayed unlock - * that we are currently trying to cancel. */ - timer_link = lock->timer->data; - GF_ASSERT(timer_link != NULL); - - if (gf_timer_call_cancel(xl->ctx, lock->timer) < 0) { - /* It's too late to avoid the execution of the timer callback. - * Since we need to be sure that the callback has access to all - * needed resources, we cannot resume the execution of the - * timer fop now. This will be done in the callback. */ - timer_link = NULL; - } else { - /* The timer has been cancelled. The fop referenced by - * timer_link holds the last reference. The caller is - * responsible to release it when not needed anymore. */ - ec_trace("UNLOCK_CANCELLED", timer_link->fop, "lock=%p", lock); - } + /* We are trying to access a lock that has an unlock timer active. + * This means that the lock must be idle, i.e. no fop can be in the + * owner, waiting or frozen lists. It also means that the lock cannot + * have been marked as being released (this is done without timers). + * There should only be one owner reference, but it's possible that + * some fops are being prepared to use this lock. */ + GF_ASSERT((lock->refs_owners == 1) && list_empty(&lock->owners) && + list_empty(&lock->waiting)); + + /* We take the timer_link before cancelling the timer, since a + * successful cancellation will destroy it. It must not be NULL + * because it references the fop responsible for the delayed unlock + * that we are currently trying to cancel. */ + timer_link = lock->timer->data; + GF_ASSERT(timer_link != NULL); + + if (gf_timer_call_cancel(xl->ctx, lock->timer) < 0) { + /* It's too late to avoid the execution of the timer callback. + * Since we need to be sure that the callback has access to all + * needed resources, we cannot resume the execution of the + * timer fop now. This will be done in the callback. */ + timer_link = NULL; + } else { + /* The timer has been cancelled. The fop referenced by + * timer_link holds the last reference. The caller is + * responsible to release it when not needed anymore. */ + ec_trace("UNLOCK_CANCELLED", timer_link->fop, "lock=%p", lock); + } - /* We have two options here: - * - * 1. The timer has been successfully cancelled. - * - * This is the easiest case and we can continue with the currently - * acquired lock. - * - * 2. The timer callback has already been fired. - * - * In this case we have not been able to cancel the timer before - * the timer callback has been fired, but we also know that - * lock->timer != NULL. This means that the timer callback is still - * trying to acquire the inode mutex that we currently own. We are - * safe until we release it. In this case we can safely clear - * lock->timer. This will cause that the timer callback does nothing - * once it acquires the mutex. - */ - lock->timer = NULL; + /* We have two options here: + * + * 1. The timer has been successfully cancelled. + * + * This is the easiest case and we can continue with the currently + * acquired lock. + * + * 2. The timer callback has already been fired. + * + * In this case we have not been able to cancel the timer before + * the timer callback has been fired, but we also know that + * lock->timer != NULL. This means that the timer callback is still + * trying to acquire the inode mutex that we currently own. We are + * safe until we release it. In this case we can safely clear + * lock->timer. This will cause that the timer callback does nothing + * once it acquires the mutex. + */ + lock->timer = NULL; - return timer_link; + return timer_link; } static gf_boolean_t @@ -1984,7 +1964,7 @@ ec_lock_assign_owner(ec_lock_link_t *link) /* Since the link has just been prepared but it's not active yet, the * refs_pending must be one at least (the ref owned by this link). */ - GF_ASSERT (lock->refs_pending > 0); + GF_ASSERT(lock->refs_pending > 0); /* The link is not pending any more. It will be assigned to the owner, * waiting or frozen list. */ lock->refs_pending--; @@ -2017,7 +1997,7 @@ ec_lock_assign_owner(ec_lock_link_t *link) * owners, or waiters(to prevent starvation). * Otherwise we need to wait. */ - if (!lock->acquired || ec_link_has_lock_conflict (link, _gf_true)) { + if (!lock->acquired || ec_link_has_lock_conflict(link, _gf_true)) { ec_trace("LOCK_QUEUE_WAIT", fop, "lock=%p", lock); list_add_tail(&link->wait_list, &lock->waiting); @@ -2032,7 +2012,7 @@ ec_lock_assign_owner(ec_lock_link_t *link) * reference assigned to the timer fop. In this case we simply reuse it. * Otherwise we need to increase the number of owners. */ if (timer_link == NULL) { - lock->refs_owners++; + lock->refs_owners++; } assigned = _gf_true; @@ -2090,14 +2070,14 @@ ec_lock_next_owner(ec_lock_link_t *link, ec_cbk_data_t *cbk, /* If the fop fails on any of the good bricks, it is important to mark * it dirty and update versions right away. */ if (link->update[0] || link->update[1]) { - if (lock->good_mask & ~(fop->good | fop->remaining)) { - lock->release = _gf_true; - } + if (lock->good_mask & ~(fop->good | fop->remaining)) { + lock->release = _gf_true; + } } } if (fop->healing) { - lock->healing = fop->healing & (fop->good | fop->remaining); + lock->healing = fop->healing & (fop->good | fop->remaining); } ec_lock_update_good(lock, fop); @@ -2108,7 +2088,8 @@ ec_lock_next_owner(ec_lock_link_t *link, ec_cbk_data_t *cbk, ec_lock_resume_shared(&list); } -void ec_lock(ec_fop_data_t *fop) +void +ec_lock(ec_fop_data_t *fop) { ec_lock_link_t *link; @@ -2116,7 +2097,7 @@ void ec_lock(ec_fop_data_t *fop) * Which can result in refs == 0 for fop leading to use after free in this * function when it calls ec_sleep so do ec_sleep at start and ec_resume at * the end of this function.*/ - ec_sleep (fop); + ec_sleep(fop); while (fop->locked < fop->lock_count) { /* Since there are only up to 2 locks per fop, this xor will change @@ -2186,17 +2167,16 @@ ec_lock_unfreeze(ec_lock_link_t *link) } } -int32_t ec_unlocked(call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *xdata) +int32_t +ec_unlocked(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, dict_t *xdata) { ec_fop_data_t *fop = cookie; ec_lock_link_t *link = fop->data; if (op_ret < 0) { - gf_msg (this->name, GF_LOG_WARNING, op_errno, - EC_MSG_UNLOCK_FAILED, - "entry/inode unlocking failed (%s)", - ec_fop_name(link->fop->id)); + gf_msg(this->name, GF_LOG_WARNING, op_errno, EC_MSG_UNLOCK_FAILED, + "entry/inode unlocking failed (%s)", ec_fop_name(link->fop->id)); } else { ec_trace("UNLOCKED", link->fop, "lock=%p", link->lock); } @@ -2206,7 +2186,8 @@ int32_t ec_unlocked(call_frame_t *frame, void *cookie, xlator_t *this, return 0; } -void ec_unlock_lock(ec_lock_link_t *link) +void +ec_unlock_lock(ec_lock_link_t *link) { ec_lock_t *lock; ec_fop_data_t *fop; @@ -2232,10 +2213,10 @@ void ec_unlock_lock(ec_lock_link_t *link) } } -int32_t ec_update_size_version_done(call_frame_t * frame, void * cookie, - xlator_t * this, int32_t op_ret, - int32_t op_errno, dict_t * xattr, - dict_t * xdata) +int32_t +ec_update_size_version_done(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xattr, + dict_t *xdata) { ec_fop_data_t *fop = cookie; ec_lock_link_t *link; @@ -2247,10 +2228,9 @@ int32_t ec_update_size_version_done(call_frame_t * frame, void * cookie, ctx = lock->ctx; if (op_ret < 0) { - gf_msg(fop->xl->name, fop_log_level (fop->id, op_errno), op_errno, + gf_msg(fop->xl->name, fop_log_level(fop->id, op_errno), op_errno, EC_MSG_SIZE_VERS_UPDATE_FAIL, - "Failed to update version and size. %s", - ec_msg_str(fop)); + "Failed to update version and size. %s", ec_msg_str(fop)); } else { fop->parent->good &= fop->good; @@ -2287,14 +2267,14 @@ int32_t ec_update_size_version_done(call_frame_t * frame, void * cookie, } void -ec_update_size_version(ec_lock_link_t *link, uint64_t *version, - uint64_t size, uint64_t *dirty) +ec_update_size_version(ec_lock_link_t *link, uint64_t *version, uint64_t size, + uint64_t *dirty) { ec_fop_data_t *fop; ec_lock_t *lock; ec_inode_t *ctx; dict_t *dict = NULL; - uintptr_t update_on = 0; + uintptr_t update_on = 0; int32_t err = -ENOMEM; fop = link->fop; @@ -2331,11 +2311,10 @@ ec_update_size_version(ec_lock_link_t *link, uint64_t *version, } if (dirty[0] || dirty[1]) { - err = ec_dict_set_array(dict, EC_XATTR_DIRTY, - dirty, EC_VERSION_SIZE); - if (err != 0) { - goto out; - } + err = ec_dict_set_array(dict, EC_XATTR_DIRTY, dirty, EC_VERSION_SIZE); + if (err != 0) { + goto out; + } } /* If config information is not known, we request it now. */ @@ -2351,13 +2330,13 @@ ec_update_size_version(ec_lock_link_t *link, uint64_t *version, update_on = lock->good_mask | lock->healing; if (link->lock->fd == NULL) { - ec_xattrop(fop->frame, fop->xl, update_on, EC_MINIMUM_MIN, - ec_update_size_version_done, link, &link->lock->loc, - GF_XATTROP_ADD_ARRAY64, dict, NULL); + ec_xattrop(fop->frame, fop->xl, update_on, EC_MINIMUM_MIN, + ec_update_size_version_done, link, &link->lock->loc, + GF_XATTROP_ADD_ARRAY64, dict, NULL); } else { - ec_fxattrop(fop->frame, fop->xl, update_on, EC_MINIMUM_MIN, - ec_update_size_version_done, link, link->lock->fd, - GF_XATTROP_ADD_ARRAY64, dict, NULL); + ec_fxattrop(fop->frame, fop->xl, update_on, EC_MINIMUM_MIN, + ec_update_size_version_done, link, link->lock->fd, + GF_XATTROP_ADD_ARRAY64, dict, NULL); } fop->frame->root->uid = fop->uid; @@ -2374,14 +2353,12 @@ out: ec_fop_set_error(fop, -err); - gf_msg (fop->xl->name, GF_LOG_ERROR, -err, EC_MSG_SIZE_VERS_UPDATE_FAIL, - "Unable to update version and size. %s", - ec_msg_str(fop)); + gf_msg(fop->xl->name, GF_LOG_ERROR, -err, EC_MSG_SIZE_VERS_UPDATE_FAIL, + "Unable to update version and size. %s", ec_msg_str(fop)); if (lock->unlock_now) { ec_unlock_lock(fop->data); } - } gf_boolean_t @@ -2406,34 +2383,34 @@ ec_update_info(ec_lock_link_t *link) /* If we set the dirty flag for update fop, we have to unset it. * If fop has failed on some bricks, leave the dirty as marked. */ if (lock->unlock_now) { - /* Ensure that nodes are up while doing final - * metadata update.*/ - if (!(ec->node_mask & ~lock->good_mask) && - !(ec->node_mask & ~ec->xl_up)) { - if (ctx->dirty[0] != 0) { - dirty[0] = -1; - } - if (ctx->dirty[1] != 0) { - dirty[1] = -1; - } - /*If everything is fine and we already - *have version xattr set on entry, there - *is no need to update version again*/ - if (ctx->pre_version[0]) { - version[0] = 0; - } - if (ctx->pre_version[1]) { - version[1] = 0; - } - } else { - link->optimistic_changelog = _gf_false; - ec_set_dirty_flag (link, ctx, dirty); + /* Ensure that nodes are up while doing final + * metadata update.*/ + if (!(ec->node_mask & ~lock->good_mask) && + !(ec->node_mask & ~ec->xl_up)) { + if (ctx->dirty[0] != 0) { + dirty[0] = -1; + } + if (ctx->dirty[1] != 0) { + dirty[1] = -1; } - memset(ctx->dirty, 0, sizeof(ctx->dirty)); + /*If everything is fine and we already + *have version xattr set on entry, there + *is no need to update version again*/ + if (ctx->pre_version[0]) { + version[0] = 0; + } + if (ctx->pre_version[1]) { + version[1] = 0; + } + } else { + link->optimistic_changelog = _gf_false; + ec_set_dirty_flag(link, ctx, dirty); + } + memset(ctx->dirty, 0, sizeof(ctx->dirty)); } - if ((version[0] != 0) || (version[1] != 0) || - (dirty[0] != 0) || (dirty[1] != 0)) { + if ((version[0] != 0) || (version[1] != 0) || (dirty[0] != 0) || + (dirty[1] != 0)) { ec_update_size_version(link, version, size, dirty); return _gf_true; } @@ -2464,185 +2441,185 @@ ec_unlock_now(ec_lock_link_t *link) void ec_lock_release(ec_t *ec, inode_t *inode) { - ec_lock_t *lock; - ec_inode_t *ctx; - ec_lock_link_t *timer_link = NULL; + ec_lock_t *lock; + ec_inode_t *ctx; + ec_lock_link_t *timer_link = NULL; - LOCK(&inode->lock); + LOCK(&inode->lock); - ctx = __ec_inode_get(inode, ec->xl); - if (ctx == NULL) { - goto done; - } - lock = ctx->inode_lock; - if ((lock == NULL) || !lock->acquired || lock->release) { - goto done; - } + ctx = __ec_inode_get(inode, ec->xl); + if (ctx == NULL) { + goto done; + } + lock = ctx->inode_lock; + if ((lock == NULL) || !lock->acquired || lock->release) { + goto done; + } - gf_msg_debug(ec->xl->name, 0, - "Releasing inode %p due to lock contention", inode); + gf_msg_debug(ec->xl->name, 0, "Releasing inode %p due to lock contention", + inode); - /* The lock is not marked to be released, so the frozen list should be - * empty. */ - GF_ASSERT(list_empty(&lock->frozen)); + /* The lock is not marked to be released, so the frozen list should be + * empty. */ + GF_ASSERT(list_empty(&lock->frozen)); - timer_link = ec_lock_timer_cancel(ec->xl, lock); + timer_link = ec_lock_timer_cancel(ec->xl, lock); - /* We mark the lock to be released as soon as possible. */ - lock->release = _gf_true; + /* We mark the lock to be released as soon as possible. */ + lock->release = _gf_true; done: - UNLOCK(&inode->lock); - - /* If we have cancelled the timer, we need to start the unlock of the - * inode. If there was a timer but we have been unable to cancel it - * because it was just triggered, the timer callback will take care - * of releasing the inode. */ - if (timer_link != NULL) { - ec_unlock_now(timer_link); - } + UNLOCK(&inode->lock); + + /* If we have cancelled the timer, we need to start the unlock of the + * inode. If there was a timer but we have been unable to cancel it + * because it was just triggered, the timer callback will take care + * of releasing the inode. */ + if (timer_link != NULL) { + ec_unlock_now(timer_link); + } } -void ec_unlock_timer_add(ec_lock_link_t *link); +void +ec_unlock_timer_add(ec_lock_link_t *link); void ec_unlock_timer_del(ec_lock_link_t *link) { - ec_lock_t *lock; - inode_t *inode; - gf_boolean_t now = _gf_false; + ec_lock_t *lock; + inode_t *inode; + gf_boolean_t now = _gf_false; + + /* If we are here, it means that the timer has expired before having + * been cancelled. This guarantees that 'link' is still valid because + * the fop that contains it must be pending (if timer cancellation in + * ec_lock_assign_owner() fails, the fop is left sleeping). + * + * At the same time, the fop still has a reference to the lock, so + * it must also be valid. + */ + lock = link->lock; + + /* 'lock' must have a valid inode since it can only be destroyed + * when the lock itself is destroyed, but we have a reference to the + * lock to avoid this. + */ + inode = lock->loc.inode; + + LOCK(&inode->lock); + + if (lock->timer != NULL) { + ec_trace("UNLOCK_DELAYED", link->fop, "lock=%p", lock); + + /* The unlock timer has expired without anyone cancelling it. + * This means that it shouldn't have any owner, and the waiting + * and frozen lists should be empty. It must have only one + * owner reference, but there can be fops being prepared + * though. + * */ + GF_ASSERT(!lock->release && (lock->refs_owners == 1) && + list_empty(&lock->owners) && list_empty(&lock->waiting) && + list_empty(&lock->frozen)); + + gf_timer_call_cancel(link->fop->xl->ctx, lock->timer); + lock->timer = NULL; + + /* Any fop being processed from now on, will need to wait + * until the next unlock/lock cycle. */ + lock->release = now = _gf_true; + } + + UNLOCK(&inode->lock); - /* If we are here, it means that the timer has expired before having - * been cancelled. This guarantees that 'link' is still valid because - * the fop that contains it must be pending (if timer cancellation in - * ec_lock_assign_owner() fails, the fop is left sleeping). + if (now) { + ec_unlock_now(link); + } else { + /* The timer has been cancelled just after firing it but before + * getting here. This means that another fop has used the lock + * and everything should be handled as if this callback were + * have not been executed. However we still have an owner + * reference. + * + * We need to release our reference. If this is not the last + * reference (the most common case because another fop has + * taken another ref) we only need to decrement the counter. + * Otherwise we have been delayed enough so that the other fop + * has had time to acquire the reference, do its operation and + * release it. At the time of releasing it, the fop did found + * that the ref counter was > 1 (our reference), so the delayed + * unlock timer wasn't started. We need to start it again if we + * are the last reference. * - * At the same time, the fop still has a reference to the lock, so - * it must also be valid. + * ec_unlock_timer_add() handles both cases. */ - lock = link->lock; + ec_unlock_timer_add(link); - /* 'lock' must have a valid inode since it can only be destroyed - * when the lock itself is destroyed, but we have a reference to the - * lock to avoid this. + /* We need to resume the fop that was waiting for the delayed + * unlock. */ - inode = lock->loc.inode; - - LOCK(&inode->lock); - - if (lock->timer != NULL) { - ec_trace("UNLOCK_DELAYED", link->fop, "lock=%p", lock); - - /* The unlock timer has expired without anyone cancelling it. - * This means that it shouldn't have any owner, and the waiting - * and frozen lists should be empty. It must have only one - * owner reference, but there can be fops being prepared - * though. - * */ - GF_ASSERT(!lock->release && - (lock->refs_owners == 1) && - list_empty(&lock->owners) && - list_empty(&lock->waiting) && - list_empty(&lock->frozen)); - - gf_timer_call_cancel(link->fop->xl->ctx, lock->timer); - lock->timer = NULL; - - /* Any fop being processed from now on, will need to wait - * until the next unlock/lock cycle. */ - lock->release = now = _gf_true; - } - - UNLOCK(&inode->lock); - - if (now) { - ec_unlock_now(link); - } else { - /* The timer has been cancelled just after firing it but before - * getting here. This means that another fop has used the lock - * and everything should be handled as if this callback were - * have not been executed. However we still have an owner - * reference. - * - * We need to release our reference. If this is not the last - * reference (the most common case because another fop has - * taken another ref) we only need to decrement the counter. - * Otherwise we have been delayed enough so that the other fop - * has had time to acquire the reference, do its operation and - * release it. At the time of releasing it, the fop did found - * that the ref counter was > 1 (our reference), so the delayed - * unlock timer wasn't started. We need to start it again if we - * are the last reference. - * - * ec_unlock_timer_add() handles both cases. - */ - ec_unlock_timer_add(link); - - /* We need to resume the fop that was waiting for the delayed - * unlock. - */ - ec_resume(link->fop, 0); - } + ec_resume(link->fop, 0); + } } -void ec_unlock_timer_cbk(void *data) +void +ec_unlock_timer_cbk(void *data) { - ec_unlock_timer_del(data); + ec_unlock_timer_del(data); } static gf_boolean_t ec_eager_lock_used(ec_t *ec, ec_fop_data_t *fop) { - /* Fops with no locks at this point mean that they are sent as sub-fops - * of other higher level fops. In this case we simply assume that the - * parent fop will take correct care of the eager lock. */ - if (fop->lock_count == 0) { - return _gf_true; - } + /* Fops with no locks at this point mean that they are sent as sub-fops + * of other higher level fops. In this case we simply assume that the + * parent fop will take correct care of the eager lock. */ + if (fop->lock_count == 0) { + return _gf_true; + } - /* We may have more than one lock, but this only happens in the rename - * fop, and both locks will reference an inode of the same type (a - * directory in this case), so we only need to check the first lock. */ - if (fop->locks[0].lock->loc.inode->ia_type == IA_IFREG) { - return ec->eager_lock; - } + /* We may have more than one lock, but this only happens in the rename + * fop, and both locks will reference an inode of the same type (a + * directory in this case), so we only need to check the first lock. */ + if (fop->locks[0].lock->loc.inode->ia_type == IA_IFREG) { + return ec->eager_lock; + } - return ec->other_eager_lock; + return ec->other_eager_lock; } static uint32_t ec_eager_lock_timeout(ec_t *ec, ec_lock_t *lock) { - if (lock->loc.inode->ia_type == IA_IFREG) { - return ec->eager_lock_timeout; - } + if (lock->loc.inode->ia_type == IA_IFREG) { + return ec->eager_lock_timeout; + } - return ec->other_eager_lock_timeout; + return ec->other_eager_lock_timeout; } static gf_boolean_t ec_lock_delay_create(ec_lock_link_t *link) { - struct timespec delay; - ec_fop_data_t *fop = link->fop; - ec_lock_t *lock = link->lock; + struct timespec delay; + ec_fop_data_t *fop = link->fop; + ec_lock_t *lock = link->lock; - delay.tv_sec = ec_eager_lock_timeout(fop->xl->private, lock); - delay.tv_nsec = 0; - lock->timer = gf_timer_call_after(fop->xl->ctx, delay, - ec_unlock_timer_cbk, link); - if (lock->timer == NULL) { - gf_msg(fop->xl->name, GF_LOG_WARNING, ENOMEM, - EC_MSG_UNLOCK_DELAY_FAILED, - "Unable to delay an unlock"); + delay.tv_sec = ec_eager_lock_timeout(fop->xl->private, lock); + delay.tv_nsec = 0; + lock->timer = gf_timer_call_after(fop->xl->ctx, delay, ec_unlock_timer_cbk, + link); + if (lock->timer == NULL) { + gf_msg(fop->xl->name, GF_LOG_WARNING, ENOMEM, + EC_MSG_UNLOCK_DELAY_FAILED, "Unable to delay an unlock"); - return _gf_false; - } + return _gf_false; + } - return _gf_true; + return _gf_true; } -void ec_unlock_timer_add(ec_lock_link_t *link) +void +ec_unlock_timer_add(ec_lock_link_t *link) { ec_fop_data_t *fop = link->fop; ec_lock_t *lock = link->lock; @@ -2732,7 +2709,8 @@ void ec_unlock_timer_add(ec_lock_link_t *link) } } -void ec_unlock(ec_fop_data_t *fop) +void +ec_unlock(ec_fop_data_t *fop) { int32_t i; @@ -2741,7 +2719,8 @@ void ec_unlock(ec_fop_data_t *fop) } } -void ec_flush_size_version(ec_fop_data_t * fop) +void +ec_flush_size_version(ec_fop_data_t *fop) { GF_ASSERT(fop->lock_count == 1); ec_update_info(&fop->locks[0]); @@ -2751,99 +2730,98 @@ static void ec_update_stripe(ec_t *ec, ec_stripe_list_t *stripe_cache, ec_stripe_t *stripe, ec_fop_data_t *fop) { - off_t base; - - /* On write fops, we only update existing fragments if the write has - * succeeded. Otherwise, we remove them from the cache. */ - if ((fop->id == GF_FOP_WRITE) && (fop->answer != NULL) && - (fop->answer->op_ret >= 0)) { - base = stripe->frag_offset - fop->frag_range.first; - base *= ec->fragments; - - /* We check if the stripe offset falls inside the real region - * modified by the write fop (a write request is allowed, - * though uncommon, to write less bytes than requested). The - * current write fop implementation doesn't allow partial - * writes of fragments, so if there's no error, we are sure - * that a full stripe has been completely modified or not - * touched at all. The value of op_ret may not be a multiple - * of the stripe size because it depends on the requested - * size by the user, so we update the stripe if the write has - * modified at least one byte (meaning ec has written the full - * stripe). */ - if (base < fop->answer->op_ret + fop->head) { - memcpy(stripe->data, fop->vector[0].iov_base + base, - ec->stripe_size); - list_move_tail(&stripe->lru, &stripe_cache->lru); - - GF_ATOMIC_INC(ec->stats.stripe_cache.updates); - } - } else { - stripe->frag_offset = -1; - list_move (&stripe->lru, &stripe_cache->lru); - - GF_ATOMIC_INC(ec->stats.stripe_cache.invals); + off_t base; + + /* On write fops, we only update existing fragments if the write has + * succeeded. Otherwise, we remove them from the cache. */ + if ((fop->id == GF_FOP_WRITE) && (fop->answer != NULL) && + (fop->answer->op_ret >= 0)) { + base = stripe->frag_offset - fop->frag_range.first; + base *= ec->fragments; + + /* We check if the stripe offset falls inside the real region + * modified by the write fop (a write request is allowed, + * though uncommon, to write less bytes than requested). The + * current write fop implementation doesn't allow partial + * writes of fragments, so if there's no error, we are sure + * that a full stripe has been completely modified or not + * touched at all. The value of op_ret may not be a multiple + * of the stripe size because it depends on the requested + * size by the user, so we update the stripe if the write has + * modified at least one byte (meaning ec has written the full + * stripe). */ + if (base < fop->answer->op_ret + fop->head) { + memcpy(stripe->data, fop->vector[0].iov_base + base, + ec->stripe_size); + list_move_tail(&stripe->lru, &stripe_cache->lru); + + GF_ATOMIC_INC(ec->stats.stripe_cache.updates); } + } else { + stripe->frag_offset = -1; + list_move(&stripe->lru, &stripe_cache->lru); + + GF_ATOMIC_INC(ec->stats.stripe_cache.invals); + } } static void -ec_update_cached_stripes (ec_fop_data_t *fop) -{ - uint64_t first; - uint64_t last; - ec_stripe_t *stripe = NULL; - ec_inode_t *ctx = NULL; - ec_stripe_list_t *stripe_cache = NULL; - inode_t *inode = NULL; - struct list_head *temp; - struct list_head sentinel; - - first = fop->frag_range.first; - /* 'last' represents the first stripe not touched by the operation */ - last = fop->frag_range.last; - - /* If there are no modified stripes, we don't need to do anything - * else. */ - if (last <= first) { - return; - } +ec_update_cached_stripes(ec_fop_data_t *fop) +{ + uint64_t first; + uint64_t last; + ec_stripe_t *stripe = NULL; + ec_inode_t *ctx = NULL; + ec_stripe_list_t *stripe_cache = NULL; + inode_t *inode = NULL; + struct list_head *temp; + struct list_head sentinel; + + first = fop->frag_range.first; + /* 'last' represents the first stripe not touched by the operation */ + last = fop->frag_range.last; + + /* If there are no modified stripes, we don't need to do anything + * else. */ + if (last <= first) { + return; + } - if (!fop->use_fd) { - inode = fop->loc[0].inode; - } else { - inode = fop->fd->inode; - } + if (!fop->use_fd) { + inode = fop->loc[0].inode; + } else { + inode = fop->fd->inode; + } - LOCK(&inode->lock); + LOCK(&inode->lock); - ctx = __ec_inode_get (inode, fop->xl); - if (ctx == NULL) { - goto out; - } - stripe_cache = &ctx->stripe_cache; - - /* Since we'll be moving elements of the list to the tail, we might - * end in an infinite loop. To avoid it, we insert a sentinel element - * into the list, so that it will be used to detect when we have - * traversed all existing elements once. */ - list_add_tail(&sentinel, &stripe_cache->lru); - temp = stripe_cache->lru.next; - while (temp != &sentinel) { - stripe = list_entry(temp, ec_stripe_t, lru); - temp = temp->next; - if ((first <= stripe->frag_offset) && - (stripe->frag_offset < last)) { - ec_update_stripe (fop->xl->private, stripe_cache, - stripe, fop); - } + ctx = __ec_inode_get(inode, fop->xl); + if (ctx == NULL) { + goto out; + } + stripe_cache = &ctx->stripe_cache; + + /* Since we'll be moving elements of the list to the tail, we might + * end in an infinite loop. To avoid it, we insert a sentinel element + * into the list, so that it will be used to detect when we have + * traversed all existing elements once. */ + list_add_tail(&sentinel, &stripe_cache->lru); + temp = stripe_cache->lru.next; + while (temp != &sentinel) { + stripe = list_entry(temp, ec_stripe_t, lru); + temp = temp->next; + if ((first <= stripe->frag_offset) && (stripe->frag_offset < last)) { + ec_update_stripe(fop->xl->private, stripe_cache, stripe, fop); } - list_del(&sentinel); + } + list_del(&sentinel); out: - UNLOCK(&inode->lock); + UNLOCK(&inode->lock); } -void ec_lock_reuse(ec_fop_data_t *fop) +void +ec_lock_reuse(ec_fop_data_t *fop) { ec_cbk_data_t *cbk; ec_t *ec = NULL; @@ -2854,13 +2832,13 @@ void ec_lock_reuse(ec_fop_data_t *fop) if (ec_eager_lock_used(ec, fop) && cbk != NULL) { if (cbk->xdata != NULL) { - if ((dict_get_int32(cbk->xdata, GLUSTERFS_INODELK_COUNT, - &count) == 0) && (count > 1)) { + if ((dict_get_int32(cbk->xdata, GLUSTERFS_INODELK_COUNT, &count) == + 0) && + (count > 1)) { release = _gf_true; } if (release) { - gf_msg_debug (fop->xl->name, 0, - "Lock contention detected"); + gf_msg_debug(fop->xl->name, 0, "Lock contention detected"); } } } else { @@ -2869,24 +2847,25 @@ void ec_lock_reuse(ec_fop_data_t *fop) * the lock. */ release = _gf_true; } - ec_update_cached_stripes (fop); + ec_update_cached_stripes(fop); for (i = 0; i < fop->lock_count; i++) { ec_lock_next_owner(&fop->locks[i], cbk, release); } } -void __ec_manager(ec_fop_data_t * fop, int32_t error) +void +__ec_manager(ec_fop_data_t *fop, int32_t error) { ec_t *ec = fop->xl->private; do { ec_trace("MANAGER", fop, "error=%d", error); - if (!ec_must_wind (fop)) { - if (ec->xl_up_count < ec->fragments) { - error = ENOTCONN; - } + if (!ec_must_wind(fop)) { + if (ec->xl_up_count < ec->fragments) { + error = ENOTCONN; + } } if (error != 0) { @@ -2912,20 +2891,20 @@ void __ec_manager(ec_fop_data_t * fop, int32_t error) fop->jobs = 1; fop->state = fop->handler(fop, fop->state); - GF_ASSERT (fop->state >= 0); + GF_ASSERT(fop->state >= 0); error = ec_check_complete(fop, __ec_manager); } while (error >= 0); } -void ec_manager(ec_fop_data_t * fop, int32_t error) +void +ec_manager(ec_fop_data_t *fop, int32_t error) { GF_ASSERT(fop->jobs == 0); GF_ASSERT(fop->winds == 0); GF_ASSERT(fop->error == 0); - if (fop->state == EC_STATE_START) - { + if (fop->state == EC_STATE_START) { fop->state = EC_STATE_INIT; } diff --git a/xlators/cluster/ec/src/ec-data.c b/xlators/cluster/ec/src/ec-data.c index 33a970d922a..fae8843a679 100644 --- a/xlators/cluster/ec/src/ec-data.c +++ b/xlators/cluster/ec/src/ec-data.c @@ -14,47 +14,43 @@ #include "ec-data.h" #include "ec-messages.h" -ec_cbk_data_t * ec_cbk_data_allocate(call_frame_t * frame, xlator_t * this, - ec_fop_data_t * fop, int32_t id, - int32_t idx, int32_t op_ret, - int32_t op_errno) +ec_cbk_data_t * +ec_cbk_data_allocate(call_frame_t *frame, xlator_t *this, ec_fop_data_t *fop, + int32_t id, int32_t idx, int32_t op_ret, int32_t op_errno) { - ec_cbk_data_t * cbk; - ec_t * ec = this->private; + ec_cbk_data_t *cbk; + ec_t *ec = this->private; - if (fop->xl != this) - { - gf_msg (this->name, GF_LOG_ERROR, EINVAL, - EC_MSG_XLATOR_MISMATCH, "Mismatching xlators between request " - "and answer (req=%s, ans=%s).", fop->xl->name, this->name); + if (fop->xl != this) { + gf_msg(this->name, GF_LOG_ERROR, EINVAL, EC_MSG_XLATOR_MISMATCH, + "Mismatching xlators between request " + "and answer (req=%s, ans=%s).", + fop->xl->name, this->name); return NULL; } - if (fop->frame != frame) - { - gf_msg (this->name, GF_LOG_ERROR, EINVAL, - EC_MSG_FRAME_MISMATCH, "Mismatching frames between request " - "and answer (req=%p, ans=%p).", - fop->frame, frame); + if (fop->frame != frame) { + gf_msg(this->name, GF_LOG_ERROR, EINVAL, EC_MSG_FRAME_MISMATCH, + "Mismatching frames between request " + "and answer (req=%p, ans=%p).", + fop->frame, frame); return NULL; } - if (fop->id != id) - { - gf_msg (this->name, GF_LOG_ERROR, EINVAL, - EC_MSG_FOP_MISMATCH, "Mismatching fops between request " - "and answer (req=%d, ans=%d).", - fop->id, id); + if (fop->id != id) { + gf_msg(this->name, GF_LOG_ERROR, EINVAL, EC_MSG_FOP_MISMATCH, + "Mismatching fops between request " + "and answer (req=%d, ans=%d).", + fop->id, id); return NULL; } cbk = mem_get0(ec->cbk_pool); - if (cbk == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, "Failed to allocate memory for an " - "answer."); + if (cbk == NULL) { + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to allocate memory for an " + "answer."); return NULL; } @@ -64,7 +60,7 @@ ec_cbk_data_t * ec_cbk_data_allocate(call_frame_t * frame, xlator_t * this, cbk->count = 1; cbk->op_ret = op_ret; cbk->op_errno = op_errno; - INIT_LIST_HEAD (&cbk->entries.list); + INIT_LIST_HEAD(&cbk->entries.list); LOCK(&fop->lock); @@ -75,50 +71,45 @@ ec_cbk_data_t * ec_cbk_data_allocate(call_frame_t * frame, xlator_t * this, return cbk; } -void ec_cbk_data_destroy(ec_cbk_data_t * cbk) +void +ec_cbk_data_destroy(ec_cbk_data_t *cbk) { - if (cbk->xdata != NULL) - { + if (cbk->xdata != NULL) { dict_unref(cbk->xdata); } - if (cbk->dict != NULL) - { + if (cbk->dict != NULL) { dict_unref(cbk->dict); } - if (cbk->inode != NULL) - { + if (cbk->inode != NULL) { inode_unref(cbk->inode); } - if (cbk->fd != NULL) - { + if (cbk->fd != NULL) { fd_unref(cbk->fd); } - if (cbk->buffers != NULL) - { + if (cbk->buffers != NULL) { iobref_unref(cbk->buffers); } GF_FREE(cbk->vector); - gf_dirent_free (&cbk->entries); - GF_FREE (cbk->str); + gf_dirent_free(&cbk->entries); + GF_FREE(cbk->str); mem_put(cbk); } -ec_fop_data_t * ec_fop_data_allocate(call_frame_t * frame, xlator_t * this, - int32_t id, uint32_t flags, - uintptr_t target, int32_t minimum, - ec_wind_f wind, ec_handler_f handler, - ec_cbk_t cbks, void * data) +ec_fop_data_t * +ec_fop_data_allocate(call_frame_t *frame, xlator_t *this, int32_t id, + uint32_t flags, uintptr_t target, int32_t minimum, + ec_wind_f wind, ec_handler_f handler, ec_cbk_t cbks, + void *data) { - ec_fop_data_t * fop, * parent; - ec_t * ec = this->private; + ec_fop_data_t *fop, *parent; + ec_t *ec = this->private; fop = mem_get0(ec->fop_pool); - if (fop == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, "Failed to allocate memory for a " - "request."); + if (fop == NULL) { + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to allocate memory for a " + "request."); return NULL; } @@ -142,19 +133,15 @@ ec_fop_data_t * ec_fop_data_allocate(call_frame_t * frame, xlator_t * this, * TODO: minimize usage of private frames. Reuse req_frame as much as * possible. */ - if (frame != NULL) - { + if (frame != NULL) { fop->frame = copy_frame(frame); - } - else - { + } else { fop->frame = create_frame(this, this->ctx->pool); } - if (fop->frame == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, "Failed to create a private frame " - "for a request"); + if (fop->frame == NULL) { + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to create a private frame " + "for a request"); mem_put(fop); @@ -179,11 +166,9 @@ ec_fop_data_t * ec_fop_data_allocate(call_frame_t * frame, xlator_t * this, fop->frame->local = fop; - if (frame != NULL) - { + if (frame != NULL) { parent = frame->local; - if (parent != NULL) - { + if (parent != NULL) { ec_sleep(parent); } @@ -199,7 +184,8 @@ ec_fop_data_t * ec_fop_data_allocate(call_frame_t * frame, xlator_t * this, return fop; } -void ec_fop_data_acquire(ec_fop_data_t * fop) +void +ec_fop_data_acquire(ec_fop_data_t *fop) { LOCK(&fop->lock); @@ -211,36 +197,38 @@ void ec_fop_data_acquire(ec_fop_data_t * fop) } static void -ec_handle_last_pending_fop_completion (ec_fop_data_t *fop, gf_boolean_t *notify) +ec_handle_last_pending_fop_completion(ec_fop_data_t *fop, gf_boolean_t *notify) { - ec_t *ec = fop->xl->private; - - if (!list_empty (&fop->pending_list)) { - LOCK(&ec->lock); - { - list_del_init (&fop->pending_list); - *notify = list_empty (&ec->pending_fops); - } - UNLOCK(&ec->lock); + ec_t *ec = fop->xl->private; + + if (!list_empty(&fop->pending_list)) { + LOCK(&ec->lock); + { + list_del_init(&fop->pending_list); + *notify = list_empty(&ec->pending_fops); } + UNLOCK(&ec->lock); + } } void ec_fop_cleanup(ec_fop_data_t *fop) { - ec_cbk_data_t *cbk, *tmp; + ec_cbk_data_t *cbk, *tmp; - list_for_each_entry_safe(cbk, tmp, &fop->answer_list, answer_list) { - list_del_init(&cbk->answer_list); + list_for_each_entry_safe(cbk, tmp, &fop->answer_list, answer_list) + { + list_del_init(&cbk->answer_list); - ec_cbk_data_destroy(cbk); - } - INIT_LIST_HEAD(&fop->cbk_list); + ec_cbk_data_destroy(cbk); + } + INIT_LIST_HEAD(&fop->cbk_list); - fop->answer = NULL; + fop->answer = NULL; } -void ec_fop_data_release(ec_fop_data_t * fop) +void +ec_fop_data_release(ec_fop_data_t *fop) { ec_t *ec = NULL; int32_t refs; @@ -250,36 +238,30 @@ void ec_fop_data_release(ec_fop_data_t * fop) ec_trace("RELEASE", fop, ""); - GF_ASSERT (fop->refs > 0); + GF_ASSERT(fop->refs > 0); refs = --fop->refs; UNLOCK(&fop->lock); - if (refs == 0) - { + if (refs == 0) { fop->frame->local = NULL; STACK_DESTROY(fop->frame->root); LOCK_DESTROY(&fop->lock); - if (fop->xdata != NULL) - { + if (fop->xdata != NULL) { dict_unref(fop->xdata); } - if (fop->dict != NULL) - { + if (fop->dict != NULL) { dict_unref(fop->dict); } - if (fop->inode != NULL) - { + if (fop->inode != NULL) { inode_unref(fop->inode); } - if (fop->fd != NULL) - { + if (fop->fd != NULL) { fd_unref(fop->fd); } - if (fop->buffers != NULL) - { + if (fop->buffers != NULL) { iobref_unref(fop->buffers); } GF_FREE(fop->vector); @@ -294,8 +276,8 @@ void ec_fop_data_release(ec_fop_data_t * fop) ec_fop_cleanup(fop); ec = fop->xl->private; - ec_handle_last_pending_fop_completion (fop, ¬ify); - ec_handle_healers_done (fop); + ec_handle_last_pending_fop_completion(fop, ¬ify); + ec_handle_healers_done(fop); mem_put(fop); if (notify) { ec_pending_fops_completed(ec); diff --git a/xlators/cluster/ec/src/ec-dir-read.c b/xlators/cluster/ec/src/ec-dir-read.c index b44bb4239b1..8db92b9d92d 100644 --- a/xlators/cluster/ec/src/ec-dir-read.c +++ b/xlators/cluster/ec/src/ec-dir-read.c @@ -25,15 +25,14 @@ * ***************************************************************/ -int32_t ec_combine_opendir(ec_fop_data_t * fop, ec_cbk_data_t * dst, - ec_cbk_data_t * src) +int32_t +ec_combine_opendir(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src) { - if (dst->fd != src->fd) - { - gf_msg (fop->xl->name, GF_LOG_NOTICE, 0, - EC_MSG_FD_MISMATCH, "Mismatching fd in answers " - "of 'GF_FOP_OPENDIR': %p <-> %p", - dst->fd, src->fd); + if (dst->fd != src->fd) { + gf_msg(fop->xl->name, GF_LOG_NOTICE, 0, EC_MSG_FD_MISMATCH, + "Mismatching fd in answers " + "of 'GF_FOP_OPENDIR': %p <-> %p", + dst->fd, src->fd); return 0; } @@ -41,12 +40,12 @@ int32_t ec_combine_opendir(ec_fop_data_t * fop, ec_cbk_data_t * dst, return 1; } -int32_t ec_opendir_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, fd_t * fd, - dict_t * xdata) +int32_t +ec_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -56,36 +55,31 @@ int32_t ec_opendir_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_OPENDIR, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (op_ret >= 0) - { - if (fd != NULL) - { + if (cbk != NULL) { + if (op_ret >= 0) { + if (fd != NULL) { cbk->fd = fd_ref(fd); - if (cbk->fd == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a " - "file descriptor."); + if (cbk->fd == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, + EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } } } - if (xdata != NULL) - { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -93,19 +87,19 @@ int32_t ec_opendir_cbk(call_frame_t * frame, void * cookie, xlator_t * this, ec_combine(cbk, ec_combine_opendir); - ec_update_fd_status (fd, this, idx, op_ret); + ec_update_fd_status(fd, this, idx, op_ret); } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_opendir(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_opendir(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -114,14 +108,14 @@ void ec_wind_opendir(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], fop->fd, fop->xdata); } -int32_t ec_manager_opendir(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_opendir(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; ec_fd_t *ctx; int32_t err; - switch (state) - { + switch (state) { case EC_STATE_INIT: LOCK(&fop->fd->lock); @@ -182,8 +176,7 @@ int32_t ec_manager_opendir(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.opendir != NULL) - { + if (fop->cbks.opendir != NULL) { fop->cbks.opendir(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, cbk->fd, cbk->xdata); } @@ -197,8 +190,7 @@ int32_t ec_manager_opendir(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.opendir != NULL) - { + if (fop->cbks.opendir != NULL) { fop->cbks.opendir(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL); } @@ -218,40 +210,39 @@ int32_t ec_manager_opendir(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_opendir(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_opendir_cbk_t func, void * data, - loc_t * loc, fd_t * fd, dict_t * xdata) +void +ec_opendir(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_opendir_cbk_t func, void *data, loc_t *loc, + fd_t *fd, dict_t *xdata) { - ec_cbk_t callback = { .opendir = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.opendir = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(OPENDIR) %p", frame); + gf_msg_trace("ec", 0, "EC(OPENDIR) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate(frame, this, GF_FOP_OPENDIR, - EC_FLAG_LOCK_SHARED, target, minimum, - ec_wind_opendir, ec_manager_opendir, callback, - data); + fop = ec_fop_data_allocate(frame, this, GF_FOP_OPENDIR, EC_FLAG_LOCK_SHARED, + target, minimum, ec_wind_opendir, + ec_manager_opendir, callback, data); if (fop == NULL) { goto out; } if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -259,9 +250,9 @@ void ec_opendir(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -269,9 +260,9 @@ void ec_opendir(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -289,50 +280,49 @@ out: /* Returns -1 if client_id is invalid else index of child subvol in xl_list */ int -ec_deitransform (xlator_t *this, off_t offset) +ec_deitransform(xlator_t *this, off_t offset) { - int idx = -1; - int client_id = -1; - ec_t *ec = this->private; - char id[32] = {0}; - int err; - - client_id = gf_deitransform (this, offset); - sprintf (id, "%d", client_id); - err = dict_get_int32 (ec->leaf_to_subvolid, id, &idx); - if (err < 0) { - idx = err; - goto out; - } + int idx = -1; + int client_id = -1; + ec_t *ec = this->private; + char id[32] = {0}; + int err; + + client_id = gf_deitransform(this, offset); + sprintf(id, "%d", client_id); + err = dict_get_int32(ec->leaf_to_subvolid, id, &idx); + if (err < 0) { + idx = err; + goto out; + } out: - if (idx < 0) { - gf_msg (this->name, GF_LOG_ERROR, EINVAL, - EC_MSG_INVALID_REQUEST, - "Invalid index %d in readdirp request", client_id); - idx = -EINVAL; - } - return idx; + if (idx < 0) { + gf_msg(this->name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_REQUEST, + "Invalid index %d in readdirp request", client_id); + idx = -EINVAL; + } + return idx; } /* FOP: readdir */ -void ec_adjust_readdirp (ec_t *ec, int32_t idx, gf_dirent_t *entries) +void +ec_adjust_readdirp(ec_t *ec, int32_t idx, gf_dirent_t *entries) { - gf_dirent_t * entry; + gf_dirent_t *entry; list_for_each_entry(entry, &entries->list, list) { if (!entry->inode) - continue; + continue; - if (entry->d_stat.ia_type == IA_IFREG) - { + if (entry->d_stat.ia_type == IA_IFREG) { if ((entry->dict == NULL) || (ec_dict_del_number(entry->dict, EC_XATTR_SIZE, &entry->d_stat.ia_size) != 0)) { - inode_unref (entry->inode); - entry->inode = NULL; + inode_unref(entry->inode); + entry->inode = NULL; } else { ec_iatt_rebuild(ec, &entry->d_stat, 1, 1); } @@ -341,9 +331,9 @@ void ec_adjust_readdirp (ec_t *ec, int32_t idx, gf_dirent_t *entries) } int32_t -ec_common_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, - gf_dirent_t *entries, dict_t *xdata) +ec_common_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, gf_dirent_t *entries, + dict_t *xdata) { ec_fop_data_t *fop = NULL; ec_cbk_data_t *cbk = NULL; @@ -356,30 +346,29 @@ ec_common_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); - cbk = ec_cbk_data_allocate (frame, this, fop, fop->id, - idx, op_ret, op_errno); + cbk = ec_cbk_data_allocate(frame, this, fop, fop->id, idx, op_ret, + op_errno); if (cbk) { if (xdata) - cbk->xdata = dict_ref (xdata); + cbk->xdata = dict_ref(xdata); if (cbk->op_ret >= 0) - list_splice_init (&entries->list, - &cbk->entries.list); - ec_combine (cbk, NULL); + list_splice_init(&entries->list, &cbk->entries.list); + ec_combine(cbk, NULL); } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_readdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_readdir(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -388,13 +377,13 @@ void ec_wind_readdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->fd, fop->size, fop->offset, fop->xdata); } -int32_t ec_manager_readdir(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_readdir(ec_fop_data_t *fop, int32_t state) { ec_fd_t *ctx = NULL; ec_cbk_data_t *cbk = NULL; - switch (state) - { + switch (state) { case EC_STATE_INIT: /* Return error if opendir has not been successfully called on * any subvolume. */ @@ -406,42 +395,40 @@ int32_t ec_manager_readdir(ec_fop_data_t * fop, int32_t state) } if (fop->id == GF_FOP_READDIRP) { - int32_t err; + int32_t err; + if (fop->xdata == NULL) { + fop->xdata = dict_new(); if (fop->xdata == NULL) { - fop->xdata = dict_new(); - if (fop->xdata == NULL) { - fop->error = ENOMEM; + fop->error = ENOMEM; - return EC_STATE_REPORT; - } + return EC_STATE_REPORT; } + } - err = dict_set_uint64(fop->xdata, EC_XATTR_SIZE, 0); - if (err != 0) { - fop->error = -err; + err = dict_set_uint64(fop->xdata, EC_XATTR_SIZE, 0); + if (err != 0) { + fop->error = -err; - return EC_STATE_REPORT; - } + return EC_STATE_REPORT; + } } - if (fop->offset != 0) - { - /* Non-zero offset is irrecoverable error as the offset may not be - * valid on other bricks*/ + if (fop->offset != 0) { + /* Non-zero offset is irrecoverable error as the offset may not + * be valid on other bricks*/ int32_t idx = -1; - idx = ec_deitransform (fop->xl, fop->offset); + idx = ec_deitransform(fop->xl, fop->offset); if (idx < 0) { - fop->error = -idx; - return EC_STATE_REPORT; + fop->error = -idx; + return EC_STATE_REPORT; } fop->mask &= 1ULL << idx; } else { - ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, 0, - LLONG_MAX); - ec_lock(fop); + ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, 0, LLONG_MAX); + ec_lock(fop); } return EC_STATE_DISPATCH; @@ -458,14 +445,14 @@ int32_t ec_manager_readdir(ec_fop_data_t * fop, int32_t state) if ((cbk != NULL) && (cbk->op_ret > 0) && (fop->id == GF_FOP_READDIRP)) { - ec_adjust_readdirp (fop->xl->private, cbk->idx, &cbk->entries); + ec_adjust_readdirp(fop->xl->private, cbk->idx, &cbk->entries); } return EC_STATE_REPORT; case EC_STATE_REPORT: cbk = fop->answer; - GF_ASSERT (cbk); + GF_ASSERT(cbk); if (fop->id == GF_FOP_READDIR) { if (fop->cbks.readdir != NULL) { fop->cbks.readdir(fop->req_frame, fop, fop->xl, cbk->op_ret, @@ -479,9 +466,9 @@ int32_t ec_manager_readdir(ec_fop_data_t * fop, int32_t state) } } if (fop->offset == 0) - return EC_STATE_LOCK_REUSE; + return EC_STATE_LOCK_REUSE; else - return EC_STATE_END; + return EC_STATE_END; case -EC_STATE_INIT: case -EC_STATE_LOCK: @@ -500,50 +487,49 @@ int32_t ec_manager_readdir(ec_fop_data_t * fop, int32_t state) } } if (fop->offset == 0) - return EC_STATE_LOCK_REUSE; + return EC_STATE_LOCK_REUSE; else - return EC_STATE_END; + return EC_STATE_END; case -EC_STATE_LOCK_REUSE: case EC_STATE_LOCK_REUSE: - GF_ASSERT (fop->offset == 0); + GF_ASSERT(fop->offset == 0); ec_lock_reuse(fop); return EC_STATE_UNLOCK; case -EC_STATE_UNLOCK: case EC_STATE_UNLOCK: - GF_ASSERT (fop->offset == 0); + GF_ASSERT(fop->offset == 0); ec_unlock(fop); return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_readdir(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_readdir_cbk_t func, void * data, - fd_t * fd, size_t size, off_t offset, dict_t * xdata) +void +ec_readdir(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_readdir_cbk_t func, void *data, fd_t *fd, + size_t size, off_t offset, dict_t *xdata) { - ec_cbk_t callback = { .readdir = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.readdir = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(READDIR) %p", frame); + gf_msg_trace("ec", 0, "EC(READDIR) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate(frame, this, GF_FOP_READDIR, - EC_FLAG_LOCK_SHARED, target, minimum, - ec_wind_readdir, ec_manager_readdir, callback, - data); + fop = ec_fop_data_allocate(frame, this, GF_FOP_READDIR, EC_FLAG_LOCK_SHARED, + target, minimum, ec_wind_readdir, + ec_manager_readdir, callback, data); if (fop == NULL) { goto out; } @@ -556,9 +542,9 @@ void ec_readdir(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -566,9 +552,9 @@ void ec_readdir(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -586,7 +572,8 @@ out: /* FOP: readdirp */ -void ec_wind_readdirp(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_readdirp(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -595,24 +582,24 @@ void ec_wind_readdirp(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->fd, fop->size, fop->offset, fop->xdata); } -void ec_readdirp(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_readdirp_cbk_t func, void * data, - fd_t * fd, size_t size, off_t offset, dict_t * xdata) +void +ec_readdirp(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_readdirp_cbk_t func, void *data, fd_t *fd, + size_t size, off_t offset, dict_t *xdata) { - ec_cbk_t callback = { .readdirp = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.readdirp = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(READDIRP) %p", frame); + gf_msg_trace("ec", 0, "EC(READDIRP) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate(frame, this, GF_FOP_READDIRP, - EC_FLAG_LOCK_SHARED, target, minimum, - ec_wind_readdirp, ec_manager_readdir, callback, - data); + fop = ec_fop_data_allocate( + frame, this, GF_FOP_READDIRP, EC_FLAG_LOCK_SHARED, target, minimum, + ec_wind_readdirp, ec_manager_readdir, callback, data); if (fop == NULL) { goto out; } @@ -625,9 +612,9 @@ void ec_readdirp(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -635,9 +622,9 @@ void ec_readdirp(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } diff --git a/xlators/cluster/ec/src/ec-dir-write.c b/xlators/cluster/ec/src/ec-dir-write.c index 7779d4849f3..f5c38e80dd7 100644 --- a/xlators/cluster/ec/src/ec-dir-write.c +++ b/xlators/cluster/ec/src/ec-dir-write.c @@ -20,76 +20,75 @@ #include "ec-fops.h" int -ec_dir_write_cbk (call_frame_t *frame, xlator_t *this, - void *cookie, int op_ret, int op_errno, - struct iatt *poststat, struct iatt *preparent, - struct iatt *postparent, struct iatt *preparent2, - struct iatt *postparent2, dict_t *xdata) +ec_dir_write_cbk(call_frame_t *frame, xlator_t *this, void *cookie, int op_ret, + int op_errno, struct iatt *poststat, struct iatt *preparent, + struct iatt *postparent, struct iatt *preparent2, + struct iatt *postparent2, dict_t *xdata) { - ec_fop_data_t *fop = NULL; - ec_cbk_data_t *cbk = NULL; - int i = 0; - int idx = 0; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; + int i = 0; + int idx = 0; - VALIDATE_OR_GOTO (this, out); - GF_VALIDATE_OR_GOTO (this->name, frame, out); - GF_VALIDATE_OR_GOTO (this->name, frame->local, out); - GF_VALIDATE_OR_GOTO (this->name, this->private, out); + VALIDATE_OR_GOTO(this, out); + GF_VALIDATE_OR_GOTO(this->name, frame, out); + GF_VALIDATE_OR_GOTO(this->name, frame->local, out); + GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = frame->local; - idx = (long) cookie; + fop = frame->local; + idx = (long)cookie; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); - cbk = ec_cbk_data_allocate (frame, this, fop, fop->id, idx, op_ret, - op_errno); - if (!cbk) - goto out; + cbk = ec_cbk_data_allocate(frame, this, fop, fop->id, idx, op_ret, + op_errno); + if (!cbk) + goto out; - if (xdata) - cbk->xdata = dict_ref (xdata); + if (xdata) + cbk->xdata = dict_ref(xdata); - if (op_ret < 0) - goto out; + if (op_ret < 0) + goto out; - if (poststat) - cbk->iatt[i++] = *poststat; + if (poststat) + cbk->iatt[i++] = *poststat; - if (preparent) - cbk->iatt[i++] = *preparent; + if (preparent) + cbk->iatt[i++] = *preparent; - if (postparent) - cbk->iatt[i++] = *postparent; + if (postparent) + cbk->iatt[i++] = *postparent; - if (preparent2) - cbk->iatt[i++] = *preparent2; + if (preparent2) + cbk->iatt[i++] = *preparent2; - if (postparent2) - cbk->iatt[i++] = *postparent2; + if (postparent2) + cbk->iatt[i++] = *postparent2; out: - if (cbk) - ec_combine (cbk, ec_combine_write); + if (cbk) + ec_combine(cbk, ec_combine_write); - if (fop) - ec_complete (fop); - return 0; + if (fop) + ec_complete(fop); + return 0; } /* FOP: create */ -int32_t ec_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, fd_t *fd, - inode_t *inode, struct iatt *buf, - struct iatt *preparent, struct iatt *postparent, - dict_t *xdata) +int32_t +ec_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, fd_t *fd, inode_t *inode, struct iatt *buf, + struct iatt *preparent, struct iatt *postparent, dict_t *xdata) { - return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno, - buf, preparent, postparent, NULL, NULL, xdata); + return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, buf, + preparent, postparent, NULL, NULL, xdata); } -void ec_wind_create(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_create(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -99,7 +98,8 @@ void ec_wind_create(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->fd, fop->xdata); } -int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_create(ec_fop_data_t *fop, int32_t state) { ec_config_t config; ec_t *ec; @@ -108,8 +108,7 @@ int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state) uint64_t version[2] = {0, 0}; int32_t err; - switch (state) - { + switch (state) { case EC_STATE_INIT: LOCK(&fop->fd->lock); @@ -176,7 +175,7 @@ int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state) * need to remove O_APPEND from flags (if present) */ fop->int32 &= ~O_APPEND; - /* Fall through */ + /* Fall through */ case EC_STATE_LOCK: ec_lock_prepare_parent_inode(fop, &fop->loc[0], NULL, @@ -218,12 +217,11 @@ int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.create != NULL) - { - fop->cbks.create (fop->req_frame, fop, fop->xl, cbk->op_ret, - cbk->op_errno, fop->fd, fop->loc[0].inode, - &cbk->iatt[0], &cbk->iatt[1], &cbk->iatt[2], - cbk->xdata); + if (fop->cbks.create != NULL) { + fop->cbks.create(fop->req_frame, fop, fop->xl, cbk->op_ret, + cbk->op_errno, fop->fd, fop->loc[0].inode, + &cbk->iatt[0], &cbk->iatt[1], &cbk->iatt[2], + cbk->xdata); } return EC_STATE_LOCK_REUSE; @@ -235,8 +233,7 @@ int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.create != NULL) - { + if (fop->cbks.create != NULL) { fop->cbks.create(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL, NULL, NULL, NULL); } @@ -256,24 +253,23 @@ int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_create(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_create_cbk_t func, void * data, - loc_t * loc, int32_t flags, mode_t mode, mode_t umask, - fd_t * fd, dict_t * xdata) +void +ec_create(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_create_cbk_t func, void *data, loc_t *loc, + int32_t flags, mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata) { - ec_cbk_t callback = { .create = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.create = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(CREATE) %p", frame); + gf_msg_trace("ec", 0, "EC(CREATE) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -292,8 +288,8 @@ void ec_create(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -301,19 +297,19 @@ void ec_create(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } } if (xdata != NULL) { - fop->xdata = dict_copy_with_ref (xdata, NULL); + fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -331,16 +327,17 @@ out: /* FOP: link */ -int32_t ec_link_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, inode_t * inode, - struct iatt * buf, struct iatt * preparent, - struct iatt * postparent, dict_t * xdata) +int32_t +ec_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, inode_t *inode, struct iatt *buf, + struct iatt *preparent, struct iatt *postparent, dict_t *xdata) { - return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno, - buf, preparent, postparent, NULL, NULL, xdata); + return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, buf, + preparent, postparent, NULL, NULL, xdata); } -void ec_wind_link(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_link(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -349,17 +346,17 @@ void ec_wind_link(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], &fop->loc[1], fop->xdata); } -int32_t ec_manager_link(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_link(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: - ec_lock_prepare_parent_inode(fop, &fop->loc[1], &fop->loc[0], - EC_UPDATE_DATA | EC_UPDATE_META | - EC_INODE_SIZE); + ec_lock_prepare_parent_inode( + fop, &fop->loc[1], &fop->loc[0], + EC_UPDATE_DATA | EC_UPDATE_META | EC_INODE_SIZE); ec_lock(fop); return EC_STATE_DISPATCH; @@ -392,8 +389,7 @@ int32_t ec_manager_link(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.link != NULL) - { + if (fop->cbks.link != NULL) { fop->cbks.link(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, fop->loc[0].inode, &cbk->iatt[0], &cbk->iatt[1], &cbk->iatt[2], cbk->xdata); @@ -408,8 +404,7 @@ int32_t ec_manager_link(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.link != NULL) - { + if (fop->cbks.link != NULL) { fop->cbks.link(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL, NULL, NULL); } @@ -429,23 +424,23 @@ int32_t ec_manager_link(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_link(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_link_cbk_t func, void * data, loc_t * oldloc, - loc_t * newloc, dict_t * xdata) +void +ec_link(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_link_cbk_t func, void *data, loc_t *oldloc, loc_t *newloc, + dict_t *xdata) { - ec_cbk_t callback = { .link = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.link = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(LINK) %p", frame); + gf_msg_trace("ec", 0, "EC(LINK) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -459,26 +454,26 @@ void ec_link(call_frame_t * frame, xlator_t * this, uintptr_t target, if (oldloc != NULL) { if (loc_copy(&fop->loc[0], oldloc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } } if (newloc != NULL) { if (loc_copy(&fop->loc[1], newloc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } } if (xdata != NULL) { - fop->xdata = dict_copy_with_ref (xdata, NULL); + fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -496,16 +491,17 @@ out: /* FOP: mkdir */ -int32_t ec_mkdir_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, inode_t * inode, - struct iatt * buf, struct iatt * preparent, - struct iatt * postparent, dict_t * xdata) +int32_t +ec_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, inode_t *inode, struct iatt *buf, + struct iatt *preparent, struct iatt *postparent, dict_t *xdata) { - return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno, - buf, preparent, postparent, NULL, NULL, xdata); + return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, buf, + preparent, postparent, NULL, NULL, xdata); } -void ec_wind_mkdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_mkdir(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -514,14 +510,14 @@ void ec_wind_mkdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], fop->mode[0], fop->mode[1], fop->xdata); } -int32_t ec_manager_mkdir(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_mkdir(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; uint64_t version[2] = {0, 0}; int32_t err; - switch (state) - { + switch (state) { case EC_STATE_INIT: if (fop->xdata == NULL) { fop->xdata = dict_new(); @@ -539,7 +535,7 @@ int32_t ec_manager_mkdir(ec_fop_data_t * fop, int32_t state) return EC_STATE_REPORT; } - /* Fall through */ + /* Fall through */ case EC_STATE_LOCK: ec_lock_prepare_parent_inode(fop, &fop->loc[0], NULL, @@ -572,8 +568,7 @@ int32_t ec_manager_mkdir(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.mkdir != NULL) - { + if (fop->cbks.mkdir != NULL) { fop->cbks.mkdir(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, fop->loc[0].inode, &cbk->iatt[0], &cbk->iatt[1], &cbk->iatt[2], cbk->xdata); @@ -589,8 +584,7 @@ int32_t ec_manager_mkdir(ec_fop_data_t * fop, int32_t state) cbk = fop->answer; GF_ASSERT(fop->error != 0); - if (fop->cbks.mkdir != NULL) - { + if (fop->cbks.mkdir != NULL) { fop->cbks.mkdir(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL, NULL, ((cbk) ? cbk->xdata : NULL)); @@ -611,31 +605,30 @@ int32_t ec_manager_mkdir(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_mkdir(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_mkdir_cbk_t func, void * data, loc_t * loc, - mode_t mode, mode_t umask, dict_t * xdata) +void +ec_mkdir(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_mkdir_cbk_t func, void *data, loc_t *loc, mode_t mode, + mode_t umask, dict_t *xdata) { - ec_cbk_t callback = { .mkdir = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.mkdir = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(MKDIR) %p", frame); + gf_msg_trace("ec", 0, "EC(MKDIR) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); fop = ec_fop_data_allocate(frame, this, GF_FOP_MKDIR, 0, target, minimum, - ec_wind_mkdir, ec_manager_mkdir, callback, - data); + ec_wind_mkdir, ec_manager_mkdir, callback, data); if (fop == NULL) { goto out; } @@ -645,18 +638,18 @@ void ec_mkdir(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } } if (xdata != NULL) { - fop->xdata = dict_copy_with_ref (xdata, NULL); + fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -674,16 +667,17 @@ out: /* FOP: mknod */ -int32_t ec_mknod_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, inode_t * inode, - struct iatt * buf, struct iatt * preparent, - struct iatt * postparent, dict_t * xdata) +int32_t +ec_mknod_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, inode_t *inode, struct iatt *buf, + struct iatt *preparent, struct iatt *postparent, dict_t *xdata) { - return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno, - buf, preparent, postparent, NULL, NULL, xdata); + return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, buf, + preparent, postparent, NULL, NULL, xdata); } -void ec_wind_mknod(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_mknod(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -693,15 +687,15 @@ void ec_wind_mknod(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->xdata); } -int32_t ec_manager_mknod(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_mknod(ec_fop_data_t *fop, int32_t state) { ec_config_t config; ec_t *ec; - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; uint64_t version[2] = {0, 0}; - switch (state) - { + switch (state) { case EC_STATE_INIT: if (S_ISREG(fop->mode[0])) { int32_t err; @@ -745,7 +739,7 @@ int32_t ec_manager_mknod(ec_fop_data_t * fop, int32_t state) } } - /* Fall through */ + /* Fall through */ case EC_STATE_LOCK: ec_lock_prepare_parent_inode(fop, &fop->loc[0], NULL, @@ -778,8 +772,7 @@ int32_t ec_manager_mknod(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.mknod != NULL) - { + if (fop->cbks.mknod != NULL) { fop->cbks.mknod(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, fop->loc[0].inode, &cbk->iatt[0], &cbk->iatt[1], &cbk->iatt[2], cbk->xdata); @@ -794,8 +787,7 @@ int32_t ec_manager_mknod(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.mknod != NULL) - { + if (fop->cbks.mknod != NULL) { fop->cbks.mknod(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL, NULL, NULL); } @@ -815,31 +807,30 @@ int32_t ec_manager_mknod(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_mknod(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_mknod_cbk_t func, void * data, loc_t * loc, - mode_t mode, dev_t rdev, mode_t umask, dict_t * xdata) +void +ec_mknod(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_mknod_cbk_t func, void *data, loc_t *loc, mode_t mode, dev_t rdev, + mode_t umask, dict_t *xdata) { - ec_cbk_t callback = { .mknod = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.mknod = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(MKNOD) %p", frame); + gf_msg_trace("ec", 0, "EC(MKNOD) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); fop = ec_fop_data_allocate(frame, this, GF_FOP_MKNOD, 0, target, minimum, - ec_wind_mknod, ec_manager_mknod, callback, - data); + ec_wind_mknod, ec_manager_mknod, callback, data); if (fop == NULL) { goto out; } @@ -850,18 +841,18 @@ void ec_mknod(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } } if (xdata != NULL) { - fop->xdata = dict_copy_with_ref (xdata, NULL); + fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -879,18 +870,19 @@ out: /* FOP: rename */ -int32_t ec_rename_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, struct iatt * buf, - struct iatt * preoldparent, struct iatt * postoldparent, - struct iatt * prenewparent, struct iatt * postnewparent, - dict_t * xdata) +int32_t +ec_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, struct iatt *buf, struct iatt *preoldparent, + struct iatt *postoldparent, struct iatt *prenewparent, + struct iatt *postnewparent, dict_t *xdata) { - return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno, - buf, preoldparent, postoldparent, prenewparent, - postnewparent, xdata); + return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, buf, + preoldparent, postoldparent, prenewparent, + postnewparent, xdata); } -void ec_wind_rename(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_rename(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -899,17 +891,17 @@ void ec_wind_rename(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], &fop->loc[1], fop->xdata); } -int32_t ec_manager_rename(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_rename(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: - ec_lock_prepare_parent_inode(fop, &fop->loc[0], &fop->loc[0], - EC_UPDATE_DATA | EC_UPDATE_META | - EC_INODE_SIZE); + ec_lock_prepare_parent_inode( + fop, &fop->loc[0], &fop->loc[0], + EC_UPDATE_DATA | EC_UPDATE_META | EC_INODE_SIZE); ec_lock_prepare_parent_inode(fop, &fop->loc[1], NULL, EC_UPDATE_DATA | EC_UPDATE_META); ec_lock(fop); @@ -938,8 +930,7 @@ int32_t ec_manager_rename(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.rename != NULL) - { + if (fop->cbks.rename != NULL) { fop->cbks.rename(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->iatt[0], &cbk->iatt[1], &cbk->iatt[2], &cbk->iatt[3], &cbk->iatt[4], @@ -955,8 +946,7 @@ int32_t ec_manager_rename(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.rename != NULL) - { + if (fop->cbks.rename != NULL) { fop->cbks.rename(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL, NULL, NULL, NULL); } @@ -976,23 +966,23 @@ int32_t ec_manager_rename(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_rename(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_rename_cbk_t func, void * data, - loc_t * oldloc, loc_t * newloc, dict_t * xdata) +void +ec_rename(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_rename_cbk_t func, void *data, loc_t *oldloc, + loc_t *newloc, dict_t *xdata) { - ec_cbk_t callback = { .rename = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.rename = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(RENAME) %p", frame); + gf_msg_trace("ec", 0, "EC(RENAME) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -1007,26 +997,26 @@ void ec_rename(call_frame_t * frame, xlator_t * this, uintptr_t target, if (oldloc != NULL) { if (loc_copy(&fop->loc[0], oldloc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } } if (newloc != NULL) { if (loc_copy(&fop->loc[1], newloc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } } if (xdata != NULL) { - fop->xdata = dict_copy_with_ref (xdata, NULL); + fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1044,15 +1034,17 @@ out: /* FOP: rmdir */ -int32_t ec_rmdir_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, struct iatt * preparent, - struct iatt * postparent, dict_t * xdata) +int32_t +ec_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, struct iatt *preparent, struct iatt *postparent, + dict_t *xdata) { - return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno, NULL, - preparent, postparent, NULL, NULL, xdata); + return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, NULL, + preparent, postparent, NULL, NULL, xdata); } -void ec_wind_rmdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_rmdir(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -1061,12 +1053,12 @@ void ec_wind_rmdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], fop->int32, fop->xdata); } -int32_t ec_manager_rmdir(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_rmdir(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: ec_lock_prepare_parent_inode(fop, &fop->loc[0], NULL, @@ -1090,8 +1082,7 @@ int32_t ec_manager_rmdir(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.rmdir != NULL) - { + if (fop->cbks.rmdir != NULL) { fop->cbks.rmdir(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->iatt[0], &cbk->iatt[1], cbk->xdata); @@ -1106,8 +1097,7 @@ int32_t ec_manager_rmdir(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.rmdir != NULL) - { + if (fop->cbks.rmdir != NULL) { fop->cbks.rmdir(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL); } @@ -1127,31 +1117,30 @@ int32_t ec_manager_rmdir(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_rmdir(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_rmdir_cbk_t func, void * data, loc_t * loc, - int xflags, dict_t * xdata) +void +ec_rmdir(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_rmdir_cbk_t func, void *data, loc_t *loc, int xflags, + dict_t *xdata) { - ec_cbk_t callback = { .rmdir = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.rmdir = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(RMDIR) %p", frame); + gf_msg_trace("ec", 0, "EC(RMDIR) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); fop = ec_fop_data_allocate(frame, this, GF_FOP_RMDIR, 0, target, minimum, - ec_wind_rmdir, ec_manager_rmdir, callback, - data); + ec_wind_rmdir, ec_manager_rmdir, callback, data); if (fop == NULL) { goto out; } @@ -1160,18 +1149,18 @@ void ec_rmdir(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } } if (xdata != NULL) { - fop->xdata = dict_copy_with_ref (xdata, NULL); + fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1189,16 +1178,18 @@ out: /* FOP: symlink */ -int32_t ec_symlink_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, inode_t * inode, - struct iatt * buf, struct iatt * preparent, - struct iatt * postparent, dict_t * xdata) +int32_t +ec_symlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, inode_t *inode, + struct iatt *buf, struct iatt *preparent, + struct iatt *postparent, dict_t *xdata) { - return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno, - buf, preparent, postparent, NULL, NULL, xdata); + return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, buf, + preparent, postparent, NULL, NULL, xdata); } -void ec_wind_symlink(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_symlink(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -1207,12 +1198,12 @@ void ec_wind_symlink(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->str[0], &fop->loc[0], fop->mode[0], fop->xdata); } -int32_t ec_manager_symlink(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_symlink(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: ec_lock_prepare_parent_inode(fop, &fop->loc[0], NULL, @@ -1245,8 +1236,7 @@ int32_t ec_manager_symlink(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.symlink != NULL) - { + if (fop->cbks.symlink != NULL) { fop->cbks.symlink(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, fop->loc[0].inode, &cbk->iatt[0], &cbk->iatt[1], &cbk->iatt[2], @@ -1262,8 +1252,7 @@ int32_t ec_manager_symlink(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.symlink != NULL) - { + if (fop->cbks.symlink != NULL) { fop->cbks.symlink(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL, NULL, NULL); } @@ -1283,24 +1272,23 @@ int32_t ec_manager_symlink(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_symlink(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_symlink_cbk_t func, void * data, - const char * linkname, loc_t * loc, mode_t umask, - dict_t * xdata) +void +ec_symlink(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_symlink_cbk_t func, void *data, + const char *linkname, loc_t *loc, mode_t umask, dict_t *xdata) { - ec_cbk_t callback = { .symlink = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.symlink = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(SYMLINK) %p", frame); + gf_msg_trace("ec", 0, "EC(SYMLINK) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -1318,16 +1306,16 @@ void ec_symlink(call_frame_t * frame, xlator_t * this, uintptr_t target, if (linkname != NULL) { fop->str[0] = gf_strdup(linkname); if (fop->str[0] == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, "Failed to duplicate a string."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to duplicate a string."); goto out; } } if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -1335,9 +1323,9 @@ void ec_symlink(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1355,16 +1343,17 @@ out: /* FOP: unlink */ -int32_t ec_unlink_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, - struct iatt * preparent, struct iatt * postparent, - dict_t * xdata) +int32_t +ec_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, struct iatt *preparent, struct iatt *postparent, + dict_t *xdata) { - return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno, NULL, - preparent, postparent, NULL, NULL, xdata); + return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, NULL, + preparent, postparent, NULL, NULL, xdata); } -void ec_wind_unlink(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_unlink(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -1373,12 +1362,12 @@ void ec_wind_unlink(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], fop->int32, fop->xdata); } -int32_t ec_manager_unlink(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_unlink(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: ec_lock_prepare_parent_inode(fop, &fop->loc[0], NULL, @@ -1402,8 +1391,7 @@ int32_t ec_manager_unlink(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.unlink != NULL) - { + if (fop->cbks.unlink != NULL) { fop->cbks.unlink(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->iatt[0], &cbk->iatt[1], cbk->xdata); @@ -1418,8 +1406,7 @@ int32_t ec_manager_unlink(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.unlink != NULL) - { + if (fop->cbks.unlink != NULL) { fop->cbks.unlink(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL); } @@ -1439,23 +1426,23 @@ int32_t ec_manager_unlink(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_unlink(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_unlink_cbk_t func, void * data, - loc_t * loc, int xflags, dict_t * xdata) +void +ec_unlink(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_unlink_cbk_t func, void *data, loc_t *loc, + int xflags, dict_t *xdata) { - ec_cbk_t callback = { .unlink = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.unlink = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(UNLINK) %p", frame); + gf_msg_trace("ec", 0, "EC(UNLINK) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -1472,18 +1459,18 @@ void ec_unlink(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } } if (xdata != NULL) { - fop->xdata = dict_copy_with_ref (xdata, NULL); + fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } diff --git a/xlators/cluster/ec/src/ec-generic.c b/xlators/cluster/ec/src/ec-generic.c index a5f986e74f4..d12481bdc18 100644 --- a/xlators/cluster/ec/src/ec-generic.c +++ b/xlators/cluster/ec/src/ec-generic.c @@ -22,11 +22,12 @@ /* FOP: flush */ -int32_t ec_flush_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, dict_t * xdata) +int32_t +ec_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -36,21 +37,18 @@ int32_t ec_flush_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FLUSH, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (xdata != NULL) - { + if (cbk != NULL) { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -60,15 +58,15 @@ int32_t ec_flush_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_flush(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_flush(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -77,12 +75,12 @@ void ec_wind_flush(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->xdata); } -int32_t ec_manager_flush(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_flush(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: ec_lock_prepare_fd(fop, fop->fd, 0, 0, LLONG_MAX); @@ -110,8 +108,7 @@ int32_t ec_manager_flush(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.flush != NULL) - { + if (fop->cbks.flush != NULL) { fop->cbks.flush(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, cbk->xdata); } @@ -126,8 +123,7 @@ int32_t ec_manager_flush(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.flush != NULL) - { + if (fop->cbks.flush != NULL) { fop->cbks.flush(fop->req_frame, fop, fop->xl, -1, fop->error, NULL); } @@ -147,31 +143,29 @@ int32_t ec_manager_flush(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_flush(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_flush_cbk_t func, void * data, fd_t * fd, - dict_t * xdata) +void +ec_flush(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_flush_cbk_t func, void *data, fd_t *fd, dict_t *xdata) { - ec_cbk_t callback = { .flush = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.flush = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(FLUSH) %p", frame); + gf_msg_trace("ec", 0, "EC(FLUSH) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); fop = ec_fop_data_allocate(frame, this, GF_FOP_FLUSH, 0, target, minimum, - ec_wind_flush, ec_manager_flush, callback, - data); + ec_wind_flush, ec_manager_flush, callback, data); if (fop == NULL) { goto out; } @@ -181,9 +175,9 @@ void ec_flush(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -191,9 +185,9 @@ void ec_flush(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -211,13 +205,13 @@ out: /* FOP: fsync */ -int32_t ec_combine_fsync(ec_fop_data_t * fop, ec_cbk_data_t * dst, - ec_cbk_data_t * src) +int32_t +ec_combine_fsync(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src) { if (!ec_iatt_combine(fop, dst->iatt, src->iatt, 2)) { - gf_msg (fop->xl->name, GF_LOG_NOTICE, 0, - EC_MSG_IATT_MISMATCH, "Mismatching iatt in " - "answers of 'GF_FOP_FSYNC'"); + gf_msg(fop->xl->name, GF_LOG_NOTICE, 0, EC_MSG_IATT_MISMATCH, + "Mismatching iatt in " + "answers of 'GF_FOP_FSYNC'"); return 0; } @@ -225,12 +219,13 @@ int32_t ec_combine_fsync(ec_fop_data_t * fop, ec_cbk_data_t * dst, return 1; } -int32_t ec_fsync_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, struct iatt * prebuf, - struct iatt * postbuf, dict_t * xdata) +int32_t +ec_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, struct iatt *prebuf, struct iatt *postbuf, + dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -240,32 +235,26 @@ int32_t ec_fsync_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FSYNC, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (op_ret >= 0) - { - if (prebuf != NULL) - { + if (cbk != NULL) { + if (op_ret >= 0) { + if (prebuf != NULL) { cbk->iatt[0] = *prebuf; } - if (postbuf != NULL) - { + if (postbuf != NULL) { cbk->iatt[1] = *postbuf; } } - if (xdata != NULL) - { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -275,15 +264,15 @@ int32_t ec_fsync_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_fsync(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_fsync(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -292,12 +281,12 @@ void ec_wind_fsync(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->int32, fop->xdata); } -int32_t ec_manager_fsync(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_fsync(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, 0, LLONG_MAX); @@ -318,8 +307,7 @@ int32_t ec_manager_fsync(ec_fop_data_t * fop, int32_t state) case EC_STATE_PREPARE_ANSWER: cbk = ec_fop_prepare_answer(fop, _gf_false); if (cbk != NULL) { - ec_iatt_rebuild(fop->xl->private, cbk->iatt, 2, - cbk->count); + ec_iatt_rebuild(fop->xl->private, cbk->iatt, 2, cbk->count); /* This shouldn't fail because we have the inode locked. */ GF_ASSERT(ec_get_inode_size(fop, fop->fd->inode, @@ -334,8 +322,7 @@ int32_t ec_manager_fsync(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.fsync != NULL) - { + if (fop->cbks.fsync != NULL) { fop->cbks.fsync(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->iatt[0], &cbk->iatt[1], cbk->xdata); @@ -351,8 +338,7 @@ int32_t ec_manager_fsync(ec_fop_data_t * fop, int32_t state) case -EC_STATE_DELAYED_START: GF_ASSERT(fop->error != 0); - if (fop->cbks.fsync != NULL) - { + if (fop->cbks.fsync != NULL) { fop->cbks.fsync(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL); } @@ -372,31 +358,30 @@ int32_t ec_manager_fsync(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_fsync(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fsync_cbk_t func, void * data, fd_t * fd, - int32_t datasync, dict_t * xdata) +void +ec_fsync(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_fsync_cbk_t func, void *data, fd_t *fd, int32_t datasync, + dict_t *xdata) { - ec_cbk_t callback = { .fsync = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.fsync = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(FSYNC) %p", frame); + gf_msg_trace("ec", 0, "EC(FSYNC) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); fop = ec_fop_data_allocate(frame, this, GF_FOP_FSYNC, 0, target, minimum, - ec_wind_fsync, ec_manager_fsync, callback, - data); + ec_wind_fsync, ec_manager_fsync, callback, data); if (fop == NULL) { goto out; } @@ -408,9 +393,9 @@ void ec_fsync(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -418,9 +403,9 @@ void ec_fsync(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -438,11 +423,12 @@ out: /* FOP: fsyncdir */ -int32_t ec_fsyncdir_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, dict_t * xdata) +int32_t +ec_fsyncdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -452,21 +438,18 @@ int32_t ec_fsyncdir_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FSYNCDIR, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (xdata != NULL) - { + if (cbk != NULL) { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -476,15 +459,15 @@ int32_t ec_fsyncdir_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_fsyncdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_fsyncdir(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -493,12 +476,12 @@ void ec_wind_fsyncdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->fd, fop->int32, fop->xdata); } -int32_t ec_manager_fsyncdir(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_fsyncdir(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: ec_lock_prepare_fd(fop, fop->fd, 0, 0, LLONG_MAX); @@ -526,8 +509,7 @@ int32_t ec_manager_fsyncdir(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.fsyncdir != NULL) - { + if (fop->cbks.fsyncdir != NULL) { fop->cbks.fsyncdir(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, cbk->xdata); } @@ -542,10 +524,9 @@ int32_t ec_manager_fsyncdir(ec_fop_data_t * fop, int32_t state) case -EC_STATE_DELAYED_START: GF_ASSERT(fop->error != 0); - if (fop->cbks.fsyncdir != NULL) - { - fop->cbks.fsyncdir(fop->req_frame, fop, fop->xl, -1, - fop->error, NULL); + if (fop->cbks.fsyncdir != NULL) { + fop->cbks.fsyncdir(fop->req_frame, fop, fop->xl, -1, fop->error, + NULL); } return EC_STATE_LOCK_REUSE; @@ -563,31 +544,31 @@ int32_t ec_manager_fsyncdir(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_fsyncdir(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fsyncdir_cbk_t func, void * data, - fd_t * fd, int32_t datasync, dict_t * xdata) +void +ec_fsyncdir(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fsyncdir_cbk_t func, void *data, fd_t *fd, + int32_t datasync, dict_t *xdata) { - ec_cbk_t callback = { .fsyncdir = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.fsyncdir = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(FSYNCDIR) %p", frame); + gf_msg_trace("ec", 0, "EC(FSYNCDIR) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate(frame, this, GF_FOP_FSYNCDIR, 0, target, - minimum, ec_wind_fsyncdir, ec_manager_fsyncdir, - callback, data); + fop = ec_fop_data_allocate(frame, this, GF_FOP_FSYNCDIR, 0, target, minimum, + ec_wind_fsyncdir, ec_manager_fsyncdir, callback, + data); if (fop == NULL) { goto out; } @@ -599,9 +580,9 @@ void ec_fsyncdir(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -609,9 +590,9 @@ void ec_fsyncdir(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -629,9 +610,10 @@ out: /* FOP: lookup */ -void ec_lookup_rebuild(ec_t * ec, ec_fop_data_t * fop, ec_cbk_data_t * cbk) +void +ec_lookup_rebuild(ec_t *ec, ec_fop_data_t *fop, ec_cbk_data_t *cbk) { - ec_inode_t * ctx = NULL; + ec_inode_t *ctx = NULL; uint64_t size = 0; int32_t have_size = 0, err; @@ -650,8 +632,7 @@ void ec_lookup_rebuild(ec_t * ec, ec_fop_data_t * fop, ec_cbk_data_t * cbk) LOCK(&cbk->inode->lock); ctx = __ec_inode_get(cbk->inode, fop->xl); - if (ctx != NULL) - { + if (ctx != NULL) { if (ctx->have_version) { cbk->version[0] = ctx->post_version[0]; cbk->version[1] = ctx->post_version[1]; @@ -664,24 +645,22 @@ void ec_lookup_rebuild(ec_t * ec, ec_fop_data_t * fop, ec_cbk_data_t * cbk) UNLOCK(&cbk->inode->lock); - if (cbk->iatt[0].ia_type == IA_IFREG) - { + if (cbk->iatt[0].ia_type == IA_IFREG) { cbk->size = cbk->iatt[0].ia_size; ec_dict_del_number(cbk->xdata, EC_XATTR_SIZE, &cbk->iatt[0].ia_size); - if (have_size) - { + if (have_size) { cbk->iatt[0].ia_size = size; } } } -int32_t ec_combine_lookup(ec_fop_data_t * fop, ec_cbk_data_t * dst, - ec_cbk_data_t * src) +int32_t +ec_combine_lookup(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src) { if (!ec_iatt_combine(fop, dst->iatt, src->iatt, 2)) { - gf_msg (fop->xl->name, GF_LOG_NOTICE, 0, - EC_MSG_IATT_MISMATCH, "Mismatching iatt in " - "answers of 'GF_FOP_LOOKUP'"); + gf_msg(fop->xl->name, GF_LOG_NOTICE, 0, EC_MSG_IATT_MISMATCH, + "Mismatching iatt in " + "answers of 'GF_FOP_LOOKUP'"); return 0; } @@ -689,15 +668,15 @@ int32_t ec_combine_lookup(ec_fop_data_t * fop, ec_cbk_data_t * dst, return 1; } -int32_t ec_lookup_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, inode_t * inode, - struct iatt * buf, dict_t * xdata, - struct iatt * postparent) +int32_t +ec_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, inode_t *inode, struct iatt *buf, dict_t *xdata, + struct iatt *postparent) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; - uint64_t dirty[2] = {0}; + uint64_t dirty[2] = {0}; VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -706,63 +685,54 @@ int32_t ec_lookup_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_LOOKUP, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (op_ret >= 0) - { - if (inode != NULL) - { + if (cbk != NULL) { + if (op_ret >= 0) { + if (inode != NULL) { cbk->inode = inode_ref(inode); - if (cbk->inode == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_INODE_REF_FAIL, - "Failed to reference an inode."); + if (cbk->inode == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_INODE_REF_FAIL, + "Failed to reference an inode."); goto out; } } - if (buf != NULL) - { + if (buf != NULL) { cbk->iatt[0] = *buf; } - if (postparent != NULL) - { + if (postparent != NULL) { cbk->iatt[1] = *postparent; } } - if (xdata != NULL) - { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } - ec_dict_del_array (xdata, EC_XATTR_DIRTY, dirty, EC_VERSION_SIZE); + ec_dict_del_array(xdata, EC_XATTR_DIRTY, dirty, EC_VERSION_SIZE); } ec_combine(cbk, ec_combine_lookup); } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_lookup(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_lookup(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -771,20 +741,21 @@ void ec_wind_lookup(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], fop->xdata); } -int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_lookup(ec_fop_data_t *fop, int32_t state) { ec_cbk_data_t *cbk; int32_t err; - switch (state) - { + switch (state) { case EC_STATE_INIT: if (fop->xdata == NULL) { fop->xdata = dict_new(); if (fop->xdata == NULL) { - gf_msg (fop->xl->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOOKUP_REQ_PREP_FAIL, "Unable to prepare " - "lookup request"); + gf_msg(fop->xl->name, GF_LOG_ERROR, ENOMEM, + EC_MSG_LOOKUP_REQ_PREP_FAIL, + "Unable to prepare " + "lookup request"); fop->error = ENOMEM; @@ -792,7 +763,7 @@ int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state) } } else { /*TODO: To be handled once we have 'syndromes' */ - dict_del (fop->xdata, GF_CONTENT_KEY); + dict_del(fop->xdata, GF_CONTENT_KEY); } err = dict_set_uint64(fop->xdata, EC_XATTR_SIZE, 0); if (err == 0) { @@ -802,16 +773,17 @@ int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state) err = dict_set_uint64(fop->xdata, EC_XATTR_DIRTY, 0); } if (err != 0) { - gf_msg (fop->xl->name, GF_LOG_ERROR, -err, - EC_MSG_LOOKUP_REQ_PREP_FAIL, "Unable to prepare lookup " - "request"); + gf_msg(fop->xl->name, GF_LOG_ERROR, -err, + EC_MSG_LOOKUP_REQ_PREP_FAIL, + "Unable to prepare lookup " + "request"); fop->error = -err; return EC_STATE_REPORT; } - /* Fall through */ + /* Fall through */ case EC_STATE_DISPATCH: ec_dispatch_all(fop); @@ -827,8 +799,8 @@ int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state) */ if (!fop->answer && !list_empty(&fop->cbk_list)) { - fop->answer = list_entry (fop->cbk_list.next, ec_cbk_data_t, - list); + fop->answer = list_entry(fop->cbk_list.next, ec_cbk_data_t, + list); } cbk = ec_fop_prepare_answer(fop, _gf_true); @@ -845,8 +817,7 @@ int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.lookup != NULL) - { + if (fop->cbks.lookup != NULL) { fop->cbks.lookup(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, cbk->inode, &cbk->iatt[0], cbk->xdata, &cbk->iatt[1]); @@ -860,8 +831,7 @@ int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.lookup != NULL) - { + if (fop->cbks.lookup != NULL) { fop->cbks.lookup(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL, NULL); } @@ -869,23 +839,23 @@ int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_lookup(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_lookup_cbk_t func, void * data, - loc_t * loc, dict_t * xdata) +void +ec_lookup(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_lookup_cbk_t func, void *data, loc_t *loc, + dict_t *xdata) { - ec_cbk_t callback = { .lookup = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.lookup = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(LOOKUP) %p", frame); + gf_msg_trace("ec", 0, "EC(LOOKUP) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -900,14 +870,14 @@ void ec_lookup(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } } if (xdata != NULL) { - fop->xdata = dict_copy_with_ref (xdata, NULL); + fop->xdata = dict_copy_with_ref(xdata, NULL); /* Do not log failures here as a memory problem would have already * been logged by the corresponding alloc functions */ if (fop->xdata == NULL) @@ -926,20 +896,20 @@ out: /* FOP: statfs */ -int32_t ec_combine_statfs(ec_fop_data_t * fop, ec_cbk_data_t * dst, - ec_cbk_data_t * src) +int32_t +ec_combine_statfs(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src) { ec_statvfs_combine(&dst->statvfs, &src->statvfs); return 1; } -int32_t ec_statfs_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, struct statvfs * buf, - dict_t * xdata) +int32_t +ec_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, struct statvfs *buf, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -949,28 +919,23 @@ int32_t ec_statfs_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_STATFS, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (op_ret >= 0) - { - if (buf != NULL) - { + if (cbk != NULL) { + if (op_ret >= 0) { + if (buf != NULL) { cbk->statvfs = *buf; } } - if (xdata != NULL) - { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -980,15 +945,15 @@ int32_t ec_statfs_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_statfs(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_statfs(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -997,14 +962,14 @@ void ec_wind_statfs(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], fop->xdata); } -int32_t ec_manager_statfs(ec_fop_data_t *fop, int32_t state) +int32_t +ec_manager_statfs(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t *cbk = NULL; - gf_boolean_t deem_statfs_enabled = _gf_false; - int32_t err = 0; + ec_cbk_data_t *cbk = NULL; + gf_boolean_t deem_statfs_enabled = _gf_false; + int32_t err = 0; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_DISPATCH: ec_dispatch_all(fop); @@ -1017,8 +982,8 @@ int32_t ec_manager_statfs(ec_fop_data_t *fop, int32_t state) ec_t *ec = fop->xl->private; if (cbk->xdata) { - err = dict_get_int8 (cbk->xdata, "quota-deem-statfs", - (int8_t *)&deem_statfs_enabled); + err = dict_get_int8(cbk->xdata, "quota-deem-statfs", + (int8_t *)&deem_statfs_enabled); if (err != -ENOENT) { ec_cbk_set_error(cbk, -err, _gf_true); } @@ -1038,8 +1003,7 @@ int32_t ec_manager_statfs(ec_fop_data_t *fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.statfs != NULL) - { + if (fop->cbks.statfs != NULL) { fop->cbks.statfs(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->statvfs, cbk->xdata); } @@ -1052,8 +1016,7 @@ int32_t ec_manager_statfs(ec_fop_data_t *fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.statfs != NULL) - { + if (fop->cbks.statfs != NULL) { fop->cbks.statfs(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL); } @@ -1061,23 +1024,23 @@ int32_t ec_manager_statfs(ec_fop_data_t *fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_statfs(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_statfs_cbk_t func, void * data, - loc_t * loc, dict_t * xdata) +void +ec_statfs(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_statfs_cbk_t func, void *data, loc_t *loc, + dict_t *xdata) { - ec_cbk_t callback = { .statfs = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.statfs = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(STATFS) %p", frame); + gf_msg_trace("ec", 0, "EC(STATFS) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -1092,8 +1055,8 @@ void ec_statfs(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -1101,9 +1064,9 @@ void ec_statfs(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1121,14 +1084,13 @@ out: /* FOP: xattrop */ -int32_t ec_combine_xattrop(ec_fop_data_t *fop, ec_cbk_data_t *dst, - ec_cbk_data_t *src) +int32_t +ec_combine_xattrop(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src) { - if (!ec_dict_compare(dst->dict, src->dict)) - { - gf_msg (fop->xl->name, GF_LOG_DEBUG, 0, - EC_MSG_DICT_MISMATCH, "Mismatching dictionary in " - "answers of 'GF_FOP_XATTROP'"); + if (!ec_dict_compare(dst->dict, src->dict)) { + gf_msg(fop->xl->name, GF_LOG_DEBUG, 0, EC_MSG_DICT_MISMATCH, + "Mismatching dictionary in " + "answers of 'GF_FOP_XATTROP'"); return 0; } @@ -1137,72 +1099,71 @@ int32_t ec_combine_xattrop(ec_fop_data_t *fop, ec_cbk_data_t *dst, } int32_t -ec_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *xattr, - dict_t *xdata) +ec_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xattr, dict_t *xdata) { - ec_fop_data_t *fop = NULL; - ec_lock_link_t *link = NULL; - ec_cbk_data_t *cbk = NULL; - uint64_t dirty[2] = {0}; - data_t *data; - uint64_t *version; - int32_t idx = (int32_t)(uintptr_t)cookie; - - VALIDATE_OR_GOTO (this, out); - GF_VALIDATE_OR_GOTO (this->name, frame, out); - GF_VALIDATE_OR_GOTO (this->name, frame->local, out); - GF_VALIDATE_OR_GOTO (this->name, this->private, out); - - fop = frame->local; - - ec_trace ("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); - - cbk = ec_cbk_data_allocate (frame, this, fop, fop->id, idx, op_ret, - op_errno); - if (!cbk) - goto out; + ec_fop_data_t *fop = NULL; + ec_lock_link_t *link = NULL; + ec_cbk_data_t *cbk = NULL; + uint64_t dirty[2] = {0}; + data_t *data; + uint64_t *version; + int32_t idx = (int32_t)(uintptr_t)cookie; - if (op_ret >= 0) { - cbk->dict = dict_ref (xattr); + VALIDATE_OR_GOTO(this, out); + GF_VALIDATE_OR_GOTO(this->name, frame, out); + GF_VALIDATE_OR_GOTO(this->name, frame->local, out); + GF_VALIDATE_OR_GOTO(this->name, this->private, out); - data = dict_get(cbk->dict, EC_XATTR_VERSION); - if ((data != NULL) && (data->len >= sizeof(uint64_t))) { - version = (uint64_t *)data->data; + fop = frame->local; - if (((ntoh64(version[0]) >> EC_SELFHEAL_BIT) & 1) != 0) { - LOCK(&fop->lock); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); - fop->healing |= 1ULL << idx; + cbk = ec_cbk_data_allocate(frame, this, fop, fop->id, idx, op_ret, + op_errno); + if (!cbk) + goto out; - UNLOCK(&fop->lock); - } - } + if (op_ret >= 0) { + cbk->dict = dict_ref(xattr); - ec_dict_del_array (xattr, EC_XATTR_DIRTY, dirty, - EC_VERSION_SIZE); - link = fop->data; - if (link) { - /*Keep a note of if the dirty is already set or not*/ - link->dirty[0] |= (dirty[0] != 0); - link->dirty[1] |= (dirty[1] != 0); - } + data = dict_get(cbk->dict, EC_XATTR_VERSION); + if ((data != NULL) && (data->len >= sizeof(uint64_t))) { + version = (uint64_t *)data->data; + + if (((ntoh64(version[0]) >> EC_SELFHEAL_BIT) & 1) != 0) { + LOCK(&fop->lock); + + fop->healing |= 1ULL << idx; + + UNLOCK(&fop->lock); + } + } + + ec_dict_del_array(xattr, EC_XATTR_DIRTY, dirty, EC_VERSION_SIZE); + link = fop->data; + if (link) { + /*Keep a note of if the dirty is already set or not*/ + link->dirty[0] |= (dirty[0] != 0); + link->dirty[1] |= (dirty[1] != 0); } + } - if (xdata) - cbk->xdata = dict_ref(xdata); + if (xdata) + cbk->xdata = dict_ref(xdata); - ec_combine (cbk, ec_combine_xattrop); + ec_combine(cbk, ec_combine_xattrop); out: - if (fop) - ec_complete(fop); + if (fop) + ec_complete(fop); - return 0; + return 0; } -void ec_wind_xattrop(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_xattrop(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -1211,20 +1172,19 @@ void ec_wind_xattrop(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], fop->xattrop_flags, fop->dict, fop->xdata); } -int32_t ec_manager_xattrop(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_xattrop(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: if (fop->fd == NULL) { ec_lock_prepare_inode(fop, &fop->loc[0], EC_UPDATE_META, 0, LLONG_MAX); } else { - ec_lock_prepare_fd(fop, fop->fd, EC_UPDATE_META, 0, - LLONG_MAX); + ec_lock_prepare_fd(fop, fop->fd, EC_UPDATE_META, 0, LLONG_MAX); } ec_lock(fop); @@ -1251,19 +1211,13 @@ int32_t ec_manager_xattrop(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->id == GF_FOP_XATTROP) - { - if (fop->cbks.xattrop != NULL) - { - fop->cbks.xattrop(fop->req_frame, fop, fop->xl, - cbk->op_ret, cbk->op_errno, cbk->dict, - cbk->xdata); + if (fop->id == GF_FOP_XATTROP) { + if (fop->cbks.xattrop != NULL) { + fop->cbks.xattrop(fop->req_frame, fop, fop->xl, cbk->op_ret, + cbk->op_errno, cbk->dict, cbk->xdata); } - } - else - { - if (fop->cbks.fxattrop != NULL) - { + } else { + if (fop->cbks.fxattrop != NULL) { fop->cbks.fxattrop(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, cbk->dict, cbk->xdata); @@ -1279,18 +1233,13 @@ int32_t ec_manager_xattrop(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->id == GF_FOP_XATTROP) - { - if (fop->cbks.xattrop != NULL) - { + if (fop->id == GF_FOP_XATTROP) { + if (fop->cbks.xattrop != NULL) { fop->cbks.xattrop(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL); } - } - else - { - if (fop->cbks.fxattrop != NULL) - { + } else { + if (fop->cbks.fxattrop != NULL) { fop->cbks.fxattrop(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL); } @@ -1311,24 +1260,23 @@ int32_t ec_manager_xattrop(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_xattrop(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_xattrop_cbk_t func, void * data, - loc_t * loc, gf_xattrop_flags_t optype, dict_t * xattr, - dict_t * xdata) +void +ec_xattrop(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_xattrop_cbk_t func, void *data, loc_t *loc, + gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata) { - ec_cbk_t callback = { .xattrop = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.xattrop = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(XATTROP) %p", frame); + gf_msg_trace("ec", 0, "EC(XATTROP) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -1345,8 +1293,8 @@ void ec_xattrop(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -1354,9 +1302,9 @@ void ec_xattrop(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xattr != NULL) { fop->dict = dict_ref(xattr); if (fop->dict == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1364,9 +1312,9 @@ void ec_xattrop(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1382,7 +1330,8 @@ out: } } -void ec_wind_fxattrop(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_fxattrop(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -1391,24 +1340,24 @@ void ec_wind_fxattrop(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->fd, fop->xattrop_flags, fop->dict, fop->xdata); } -void ec_fxattrop(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fxattrop_cbk_t func, void * data, - fd_t * fd, gf_xattrop_flags_t optype, dict_t * xattr, - dict_t * xdata) +void +ec_fxattrop(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fxattrop_cbk_t func, void *data, fd_t *fd, + gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata) { - ec_cbk_t callback = { .fxattrop = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.fxattrop = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(FXATTROP) %p", frame); + gf_msg_trace("ec", 0, "EC(FXATTROP) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate(frame, this, GF_FOP_FXATTROP, 0, target, - minimum, ec_wind_fxattrop, ec_manager_xattrop, - callback, data); + fop = ec_fop_data_allocate(frame, this, GF_FOP_FXATTROP, 0, target, minimum, + ec_wind_fxattrop, ec_manager_xattrop, callback, + data); if (fop == NULL) { goto out; } @@ -1420,9 +1369,9 @@ void ec_fxattrop(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -1430,9 +1379,9 @@ void ec_fxattrop(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xattr != NULL) { fop->dict = dict_ref(xattr); if (fop->dict == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1440,9 +1389,9 @@ void ec_fxattrop(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1460,11 +1409,12 @@ out: /* FOP: IPC */ -int32_t ec_ipc_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, dict_t * xdata) +int32_t +ec_ipc_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -1474,16 +1424,14 @@ int32_t ec_ipc_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_IPC, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (xdata != NULL) - { + if (cbk != NULL) { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); } @@ -1491,29 +1439,29 @@ int32_t ec_ipc_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_ipc(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_ipc(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); STACK_WIND_COOKIE(fop->frame, ec_ipc_cbk, (void *)(uintptr_t)idx, - ec->xl_list[idx], ec->xl_list[idx]->fops->ipc, - fop->int32, fop->xdata); + ec->xl_list[idx], ec->xl_list[idx]->fops->ipc, fop->int32, + fop->xdata); } -int32_t ec_manager_ipc(ec_fop_data_t *fop, int32_t state) +int32_t +ec_manager_ipc(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_DISPATCH: ec_dispatch_all(fop); @@ -1529,10 +1477,9 @@ int32_t ec_manager_ipc(ec_fop_data_t *fop, int32_t state) cbk = fop->answer; GF_ASSERT(cbk != NULL); - if (fop->cbks.ipc != NULL) - { + if (fop->cbks.ipc != NULL) { fop->cbks.ipc(fop->req_frame, fop, fop->xl, cbk->op_ret, - cbk->op_errno, cbk->xdata); + cbk->op_errno, cbk->xdata); } return EC_STATE_END; @@ -1543,8 +1490,7 @@ int32_t ec_manager_ipc(ec_fop_data_t *fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.ipc != NULL) - { + if (fop->cbks.ipc != NULL) { fop->cbks.ipc(fop->req_frame, fop, fop->xl, -1, fop->error, NULL); } @@ -1552,23 +1498,22 @@ int32_t ec_manager_ipc(ec_fop_data_t *fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_ipc(call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_ipc_cbk_t func, void *data, int32_t op, - dict_t *xdata) +void +ec_ipc(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_ipc_cbk_t func, void *data, int32_t op, dict_t *xdata) { - ec_cbk_t callback = { .ipc = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.ipc = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(IPC) %p", frame); + gf_msg_trace("ec", 0, "EC(IPC) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); diff --git a/xlators/cluster/ec/src/ec-gf8.c b/xlators/cluster/ec/src/ec-gf8.c index 2665632706b..039adae5929 100644 --- a/xlators/cluster/ec/src/ec-gf8.c +++ b/xlators/cluster/ec/src/ec-gf8.c @@ -10,5886 +10,5810 @@ #include "ec-gf8.h" -static ec_gf_op_t ec_gf8_mul_00_ops[] = { - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_00 = { - 0, - { 0, }, - ec_gf8_mul_00_ops -}; - -static ec_gf_op_t ec_gf8_mul_01_ops[] = { - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_01 = { - 8, - { 0, 1, 2, 3, 4, 5, 6, 7, }, - ec_gf8_mul_01_ops -}; - -static ec_gf_op_t ec_gf8_mul_02_ops[] = { - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_02 = { - 8, - { 7, 0, 1, 2, 3, 4, 5, 6, }, - ec_gf8_mul_02_ops -}; +static ec_gf_op_t ec_gf8_mul_00_ops[] = {{EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_00 = {0, + { + 0, + }, + ec_gf8_mul_00_ops}; + +static ec_gf_op_t ec_gf8_mul_01_ops[] = {{EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_01 = {8, + { + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + }, + ec_gf8_mul_01_ops}; + +static ec_gf_op_t ec_gf8_mul_02_ops[] = {{EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_02 = {8, + { + 7, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + }, + ec_gf8_mul_02_ops}; static ec_gf_op_t ec_gf8_mul_03_ops[] = { - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_COPY, 8, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_03 = { - 9, - { 0, 1, 2, 3, 4, 5, 6, 7, 8, }, - ec_gf8_mul_03_ops -}; + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_COPY, 8, 3, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_03 = {9, + { + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + }, + ec_gf8_mul_03_ops}; static ec_gf_op_t ec_gf8_mul_04_ops[] = { - { EC_GF_OP_XOR3, 8, 6, 7 }, - { EC_GF_OP_XOR2, 2, 8, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_04 = { - 9, - { 6, 7, 0, 1, 2, 3, 4, 5, 8, }, - ec_gf8_mul_04_ops -}; + {EC_GF_OP_XOR3, 8, 6, 7}, {EC_GF_OP_XOR2, 2, 8, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 1, 8, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_04 = {9, + { + 6, + 7, + 0, + 1, + 2, + 3, + 4, + 5, + 8, + }, + ec_gf8_mul_04_ops}; static ec_gf_op_t ec_gf8_mul_05_ops[] = { - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_05 = { - 8, - { 0, 1, 2, 6, 7, 3, 4, 5, }, - ec_gf8_mul_05_ops -}; + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_05 = {8, + { + 0, + 1, + 2, + 6, + 7, + 3, + 4, + 5, + }, + ec_gf8_mul_05_ops}; static ec_gf_op_t ec_gf8_mul_06_ops[] = { - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_COPY, 8, 2, 0 }, - { EC_GF_OP_XOR2, 8, 3, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_06 = { - 9, - { 7, 0, 1, 2, 8, 3, 4, 5, 6, }, - ec_gf8_mul_06_ops -}; + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_COPY, 8, 2, 0}, + {EC_GF_OP_XOR2, 8, 3, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_06 = {9, + { + 7, + 0, + 1, + 2, + 8, + 3, + 4, + 5, + 6, + }, + ec_gf8_mul_06_ops}; static ec_gf_op_t ec_gf8_mul_07_ops[] = { - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_07 = { - 8, - { 6, 0, 1, 3, 2, 4, 5, 7, }, - ec_gf8_mul_07_ops -}; + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_07 = {8, + { + 6, + 0, + 1, + 3, + 2, + 4, + 5, + 7, + }, + ec_gf8_mul_07_ops}; static ec_gf_op_t ec_gf8_mul_08_ops[] = { - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR3, 8, 6, 7 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 2, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_08 = { - 9, - { 5, 6, 7, 0, 1, 2, 3, 4, 8, }, - ec_gf8_mul_08_ops -}; + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR3, 8, 6, 7}, + {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 2, 8, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_08 = {9, + { + 5, + 6, + 7, + 0, + 1, + 2, + 3, + 4, + 8, + }, + ec_gf8_mul_08_ops}; static ec_gf_op_t ec_gf8_mul_09_ops[] = { - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_09 = { - 8, - { 0, 1, 2, 3, 5, 6, 7, 4, }, - ec_gf8_mul_09_ops -}; + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_09 = {8, + { + 0, + 1, + 2, + 3, + 5, + 6, + 7, + 4, + }, + ec_gf8_mul_09_ops}; static ec_gf_op_t ec_gf8_mul_0A_ops[] = { - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_0A = { - 8, - { 5, 0, 1, 2, 6, 7, 3, 4, }, - ec_gf8_mul_0A_ops -}; + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_0A = {8, + { + 5, + 0, + 1, + 2, + 6, + 7, + 3, + 4, + }, + ec_gf8_mul_0A_ops}; static ec_gf_op_t ec_gf8_mul_0B_ops[] = { - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_COPY, 9, 3, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_COPY, 8, 5, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR3, 3, 8, 6 }, - { EC_GF_OP_XOR2, 1, 9, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_0B = { - 10, - { 7, 1, 5, 2, 4, 3, 0, 6, 8, 9, }, - ec_gf8_mul_0B_ops -}; + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_COPY, 9, 3, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_COPY, 8, 5, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR3, 3, 8, 6}, {EC_GF_OP_XOR2, 1, 9, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_0B = {10, + { + 7, + 1, + 5, + 2, + 4, + 3, + 0, + 6, + 8, + 9, + }, + ec_gf8_mul_0B_ops}; static ec_gf_op_t ec_gf8_mul_0C_ops[] = { - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_COPY, 8, 1, 0 }, - { EC_GF_OP_XOR2, 8, 2, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_0C = { - 9, - { 5, 7, 0, 1, 8, 2, 3, 4, 6, }, - ec_gf8_mul_0C_ops -}; + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_COPY, 8, 1, 0}, + {EC_GF_OP_XOR2, 8, 2, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_0C = {9, + { + 5, + 7, + 0, + 1, + 8, + 2, + 3, + 4, + 6, + }, + ec_gf8_mul_0C_ops}; static ec_gf_op_t ec_gf8_mul_0D_ops[] = { - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR3, 8, 2, 4 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR3, 2, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_0D = { - 9, - { 5, 6, 7, 3, 1, 0, 2, 4, 8, }, - ec_gf8_mul_0D_ops -}; + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR3, 8, 2, 4}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 1, 8, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR3, 2, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_0D = {9, + { + 5, + 6, + 7, + 3, + 1, + 0, + 2, + 4, + 8, + }, + ec_gf8_mul_0D_ops}; static ec_gf_op_t ec_gf8_mul_0E_ops[] = { - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_0E = { - 8, - { 7, 0, 6, 1, 3, 2, 4, 5, }, - ec_gf8_mul_0E_ops -}; + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_0E = {8, + { + 7, + 0, + 6, + 1, + 3, + 2, + 4, + 5, + }, + ec_gf8_mul_0E_ops}; static ec_gf_op_t ec_gf8_mul_0F_ops[] = { - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_0F = { - 8, - { 1, 0, 5, 6, 7, 2, 3, 4, }, - ec_gf8_mul_0F_ops -}; + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_0F = {8, + { + 1, + 0, + 5, + 6, + 7, + 2, + 3, + 4, + }, + ec_gf8_mul_0F_ops}; static ec_gf_op_t ec_gf8_mul_10_ops[] = { - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_10 = { - 8, - { 4, 5, 6, 7, 0, 1, 2, 3, }, - ec_gf8_mul_10_ops -}; + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_10 = {8, + { + 4, + 5, + 6, + 7, + 0, + 1, + 2, + 3, + }, + ec_gf8_mul_10_ops}; static ec_gf_op_t ec_gf8_mul_11_ops[] = { - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_11 = { - 8, - { 4, 1, 2, 6, 0, 5, 7, 3, }, - ec_gf8_mul_11_ops -}; + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_11 = {8, + { + 4, + 1, + 2, + 6, + 0, + 5, + 7, + 3, + }, + ec_gf8_mul_11_ops}; static ec_gf_op_t ec_gf8_mul_12_ops[] = { - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_12 = { - 8, - { 7, 0, 1, 2, 3, 5, 6, 4, }, - ec_gf8_mul_12_ops -}; + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_12 = {8, + { + 7, + 0, + 1, + 2, + 3, + 5, + 6, + 4, + }, + ec_gf8_mul_12_ops}; static ec_gf_op_t ec_gf8_mul_13_ops[] = { - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR3, 8, 3, 7 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 6, 8, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 0, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_13 = { - 9, - { 4, 5, 2, 6, 0, 1, 7, 3, 8, }, - ec_gf8_mul_13_ops -}; + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR3, 8, 3, 7}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 6, 8, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 0, 8, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_13 = {9, + { + 4, + 5, + 2, + 6, + 0, + 1, + 7, + 3, + 8, + }, + ec_gf8_mul_13_ops}; static ec_gf_op_t ec_gf8_mul_14_ops[] = { - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_14 = { - 8, - { 6, 7, 0, 1, 2, 4, 5, 3, }, - ec_gf8_mul_14_ops -}; + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_14 = {8, + { + 6, + 7, + 0, + 1, + 2, + 4, + 5, + 3, + }, + ec_gf8_mul_14_ops}; static ec_gf_op_t ec_gf8_mul_15_ops[] = { - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR3, 5, 8, 7 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_15 = { - 9, - { 0, 1, 2, 4, 7, 6, 5, 3, 8, }, - ec_gf8_mul_15_ops -}; + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR3, 5, 8, 7}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_15 = {9, + { + 0, + 1, + 2, + 4, + 7, + 6, + 5, + 3, + 8, + }, + ec_gf8_mul_15_ops}; static ec_gf_op_t ec_gf8_mul_16_ops[] = { - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_16 = { - 8, - { 6, 7, 4, 1, 2, 3, 5, 0, }, - ec_gf8_mul_16_ops -}; + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_16 = {8, + { + 6, + 7, + 4, + 1, + 2, + 3, + 5, + 0, + }, + ec_gf8_mul_16_ops}; static ec_gf_op_t ec_gf8_mul_17_ops[] = { - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_17 = { - 8, - { 5, 7, 0, 1, 3, 2, 4, 6, }, - ec_gf8_mul_17_ops -}; + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_17 = {8, + { + 5, + 7, + 0, + 1, + 3, + 2, + 4, + 6, + }, + ec_gf8_mul_17_ops}; static ec_gf_op_t ec_gf8_mul_18_ops[] = { - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 6, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_18 = { - 9, - { 4, 5, 7, 6, 0, 1, 2, 3, 8, }, - ec_gf8_mul_18_ops -}; + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_18 = {9, + { + 4, + 5, + 7, + 6, + 0, + 1, + 2, + 3, + 8, + }, + ec_gf8_mul_18_ops}; static ec_gf_op_t ec_gf8_mul_19_ops[] = { - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_19 = { - 8, - { 0, 5, 2, 6, 7, 1, 3, 4, }, - ec_gf8_mul_19_ops -}; + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_19 = {8, + { + 0, + 5, + 2, + 6, + 7, + 1, + 3, + 4, + }, + ec_gf8_mul_19_ops}; static ec_gf_op_t ec_gf8_mul_1A_ops[] = { - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_1A = { - 8, - { 7, 0, 4, 5, 3, 1, 2, 6, }, - ec_gf8_mul_1A_ops -}; + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_1A = {8, + { + 7, + 0, + 4, + 5, + 3, + 1, + 2, + 6, + }, + ec_gf8_mul_1A_ops}; static ec_gf_op_t ec_gf8_mul_1B_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_1B = { - 8, - { 7, 4, 5, 6, 3, 1, 2, 0, }, - ec_gf8_mul_1B_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_1B = {8, + { + 7, + 4, + 5, + 6, + 3, + 1, + 2, + 0, + }, + ec_gf8_mul_1B_ops}; static ec_gf_op_t ec_gf8_mul_1C_ops[] = { - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_1C = { - 8, - { 5, 4, 3, 0, 1, 7, 2, 6, }, - ec_gf8_mul_1C_ops -}; + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_1C = {8, + { + 5, + 4, + 3, + 0, + 1, + 7, + 2, + 6, + }, + ec_gf8_mul_1C_ops}; static ec_gf_op_t ec_gf8_mul_1D_ops[] = { - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR3, 8, 4, 2 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_1D = { - 9, - { 0, 7, 5, 8, 2, 3, 4, 1, 6, }, - ec_gf8_mul_1D_ops -}; + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR3, 8, 4, 2}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 5, 8, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_1D = {9, + { + 0, + 7, + 5, + 8, + 2, + 3, + 4, + 1, + 6, + }, + ec_gf8_mul_1D_ops}; static ec_gf_op_t ec_gf8_mul_1E_ops[] = { - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_1E = { - 8, - { 4, 7, 5, 1, 6, 0, 2, 3, }, - ec_gf8_mul_1E_ops -}; + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_1E = {8, + { + 4, + 7, + 5, + 1, + 6, + 0, + 2, + 3, + }, + ec_gf8_mul_1E_ops}; static ec_gf_op_t ec_gf8_mul_1F_ops[] = { - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR3, 8, 3, 7 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_1F = { - 9, - { 1, 4, 5, 6, 7, 0, 3, 2, 8, }, - ec_gf8_mul_1F_ops -}; + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR3, 8, 3, 7}, + {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 1, 8, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_1F = {9, + { + 1, + 4, + 5, + 6, + 7, + 0, + 3, + 2, + 8, + }, + ec_gf8_mul_1F_ops}; static ec_gf_op_t ec_gf8_mul_20_ops[] = { - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_20 = { - 8, - { 7, 4, 5, 6, 3, 0, 1, 2, }, - ec_gf8_mul_20_ops -}; + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_20 = {8, + { + 7, + 4, + 5, + 6, + 3, + 0, + 1, + 2, + }, + ec_gf8_mul_20_ops}; static ec_gf_op_t ec_gf8_mul_21_ops[] = { - { EC_GF_OP_COPY, 9, 0, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR3, 8, 7, 5 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_XOR2, 2, 8, 0 }, - { EC_GF_OP_XOR2, 4, 9, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_21 = { - 10, - { 0, 1, 2, 7, 5, 4, 3, 6, 8, 9, }, - ec_gf8_mul_21_ops -}; + {EC_GF_OP_COPY, 9, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR3, 8, 7, 5}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_XOR2, 2, 8, 0}, + {EC_GF_OP_XOR2, 4, 9, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_21 = {10, + { + 0, + 1, + 2, + 7, + 5, + 4, + 3, + 6, + 8, + 9, + }, + ec_gf8_mul_21_ops}; static ec_gf_op_t ec_gf8_mul_22_ops[] = { - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_22 = { - 8, - { 3, 0, 5, 2, 6, 4, 1, 7, }, - ec_gf8_mul_22_ops -}; + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_22 = {8, + { + 3, + 0, + 5, + 2, + 6, + 4, + 1, + 7, + }, + ec_gf8_mul_22_ops}; static ec_gf_op_t ec_gf8_mul_23_ops[] = { - { EC_GF_OP_COPY, 8, 2, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_23 = { - 9, - { 0, 4, 3, 2, 5, 6, 1, 8, 7, }, - ec_gf8_mul_23_ops -}; + {EC_GF_OP_COPY, 8, 2, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 3, 8, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_23 = {9, + { + 0, + 4, + 3, + 2, + 5, + 6, + 1, + 8, + 7, + }, + ec_gf8_mul_23_ops}; static ec_gf_op_t ec_gf8_mul_24_ops[] = { - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_24 = { - 8, - { 6, 7, 0, 1, 2, 4, 5, 3, }, - ec_gf8_mul_24_ops -}; + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_24 = {8, + { + 6, + 7, + 0, + 1, + 2, + 4, + 5, + 3, + }, + ec_gf8_mul_24_ops}; static ec_gf_op_t ec_gf8_mul_25_ops[] = { - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_25 = { - 8, - { 2, 7, 0, 1, 3, 4, 5, 6, }, - ec_gf8_mul_25_ops -}; + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_25 = {8, + { + 2, + 7, + 0, + 1, + 3, + 4, + 5, + 6, + }, + ec_gf8_mul_25_ops}; static ec_gf_op_t ec_gf8_mul_26_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_26 = { - 8, - { 3, 4, 1, 2, 0, 5, 6, 7, }, - ec_gf8_mul_26_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_26 = {8, + { + 3, + 4, + 1, + 2, + 0, + 5, + 6, + 7, + }, + ec_gf8_mul_26_ops}; static ec_gf_op_t ec_gf8_mul_27_ops[] = { - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_27 = { - 8, - { 3, 0, 1, 2, 6, 7, 4, 5, }, - ec_gf8_mul_27_ops -}; + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_27 = {8, + { + 3, + 0, + 1, + 2, + 6, + 7, + 4, + 5, + }, + ec_gf8_mul_27_ops}; static ec_gf_op_t ec_gf8_mul_28_ops[] = { - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_28 = { - 8, - { 5, 6, 3, 0, 1, 2, 4, 7, }, - ec_gf8_mul_28_ops -}; + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_28 = {8, + { + 5, + 6, + 3, + 0, + 1, + 2, + 4, + 7, + }, + ec_gf8_mul_28_ops}; static ec_gf_op_t ec_gf8_mul_29_ops[] = { - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_29 = { - 8, - { 4, 6, 3, 5, 7, 0, 1, 2, }, - ec_gf8_mul_29_ops -}; + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_29 = {8, + { + 4, + 6, + 3, + 5, + 7, + 0, + 1, + 2, + }, + ec_gf8_mul_29_ops}; static ec_gf_op_t ec_gf8_mul_2A_ops[] = { - { EC_GF_OP_COPY, 8, 1, 0 }, - { EC_GF_OP_XOR2, 8, 0, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR3, 6, 8, 4 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_2A = { - 9, - { 3, 4, 7, 2, 6, 5, 1, 0, 8, }, - ec_gf8_mul_2A_ops -}; + {EC_GF_OP_COPY, 8, 1, 0}, {EC_GF_OP_XOR2, 8, 0, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR3, 6, 8, 4}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_2A = {9, + { + 3, + 4, + 7, + 2, + 6, + 5, + 1, + 0, + 8, + }, + ec_gf8_mul_2A_ops}; static ec_gf_op_t ec_gf8_mul_2B_ops[] = { - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_2B = { - 8, - { 3, 4, 7, 5, 6, 0, 1, 2, }, - ec_gf8_mul_2B_ops -}; + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_2B = {8, + { + 3, + 4, + 7, + 5, + 6, + 0, + 1, + 2, + }, + ec_gf8_mul_2B_ops}; static ec_gf_op_t ec_gf8_mul_2C_ops[] = { - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_2C = { - 8, - { 5, 6, 7, 0, 2, 3, 4, 1, }, - ec_gf8_mul_2C_ops -}; + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_2C = {8, + { + 5, + 6, + 7, + 0, + 2, + 3, + 4, + 1, + }, + ec_gf8_mul_2C_ops}; static ec_gf_op_t ec_gf8_mul_2D_ops[] = { - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR3, 8, 4, 6 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_2D = { - 9, - { 7, 0, 3, 5, 1, 4, 2, 6, 8, }, - ec_gf8_mul_2D_ops -}; + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR3, 8, 4, 6}, + {EC_GF_OP_XOR2, 5, 8, 0}, {EC_GF_OP_XOR2, 7, 8, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_2D = {9, + { + 7, + 0, + 3, + 5, + 1, + 4, + 2, + 6, + 8, + }, + ec_gf8_mul_2D_ops}; static ec_gf_op_t ec_gf8_mul_2E_ops[] = { - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_COPY, 8, 4, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 8, 7, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 2, 8, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 6, 8, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_2E = { - 9, - { 5, 0, 7, 3, 2, 6, 4, 1, 8, }, - ec_gf8_mul_2E_ops -}; + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_COPY, 8, 4, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 8, 7, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 2, 8, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_2E = {9, + { + 5, + 0, + 7, + 3, + 2, + 6, + 4, + 1, + 8, + }, + ec_gf8_mul_2E_ops}; static ec_gf_op_t ec_gf8_mul_2F_ops[] = { - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR3, 8, 7, 6 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_XOR2, 2, 8, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_2F = { - 9, - { 6, 3, 2, 5, 7, 0, 1, 4, 8, }, - ec_gf8_mul_2F_ops -}; + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR3, 8, 7, 6}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 3, 8, 0}, + {EC_GF_OP_XOR2, 2, 8, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_2F = {9, + { + 6, + 3, + 2, + 5, + 7, + 0, + 1, + 4, + 8, + }, + ec_gf8_mul_2F_ops}; static ec_gf_op_t ec_gf8_mul_30_ops[] = { - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 8, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR3, 6, 8, 7 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_30 = { - 9, - { 3, 4, 7, 5, 0, 6, 1, 2, 8, }, - ec_gf8_mul_30_ops -}; + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 8, 1, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR3, 6, 8, 7}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_30 = {9, + { + 3, + 4, + 7, + 5, + 0, + 6, + 1, + 2, + 8, + }, + ec_gf8_mul_30_ops}; static ec_gf_op_t ec_gf8_mul_31_ops[] = { - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_31 = { - 8, - { 7, 1, 4, 5, 6, 0, 2, 3, }, - ec_gf8_mul_31_ops -}; + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_31 = {8, + { + 7, + 1, + 4, + 5, + 6, + 0, + 2, + 3, + }, + ec_gf8_mul_31_ops}; static ec_gf_op_t ec_gf8_mul_32_ops[] = { - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_32 = { - 8, - { 3, 4, 6, 7, 5, 0, 1, 2, }, - ec_gf8_mul_32_ops -}; + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_32 = {8, + { + 3, + 4, + 6, + 7, + 5, + 0, + 1, + 2, + }, + ec_gf8_mul_32_ops}; static ec_gf_op_t ec_gf8_mul_33_ops[] = { - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_33 = { - 8, - { 5, 4, 3, 0, 2, 1, 6, 7, }, - ec_gf8_mul_33_ops -}; + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_33 = {8, + { + 5, + 4, + 3, + 0, + 2, + 1, + 6, + 7, + }, + ec_gf8_mul_33_ops}; static ec_gf_op_t ec_gf8_mul_34_ops[] = { - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_34 = { - 8, - { 7, 5, 3, 0, 2, 4, 1, 6, }, - ec_gf8_mul_34_ops -}; + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_34 = {8, + { + 7, + 5, + 3, + 0, + 2, + 4, + 1, + 6, + }, + ec_gf8_mul_34_ops}; static ec_gf_op_t ec_gf8_mul_35_ops[] = { - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_35 = { - 8, - { 6, 7, 5, 4, 2, 0, 1, 3, }, - ec_gf8_mul_35_ops -}; + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_35 = {8, + { + 6, + 7, + 5, + 4, + 2, + 0, + 1, + 3, + }, + ec_gf8_mul_35_ops}; static ec_gf_op_t ec_gf8_mul_36_ops[] = { - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_36 = { - 8, - { 6, 7, 4, 1, 2, 3, 0, 5, }, - ec_gf8_mul_36_ops -}; + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_36 = {8, + { + 6, + 7, + 4, + 1, + 2, + 3, + 0, + 5, + }, + ec_gf8_mul_36_ops}; static ec_gf_op_t ec_gf8_mul_37_ops[] = { - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR3, 8, 0, 1 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_37 = { - 9, - { 6, 7, 2, 1, 0, 3, 4, 5, 8, }, - ec_gf8_mul_37_ops -}; + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR3, 8, 0, 1}, + {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_XOR2, 7, 8, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_37 = {9, + { + 6, + 7, + 2, + 1, + 0, + 3, + 4, + 5, + 8, + }, + ec_gf8_mul_37_ops}; static ec_gf_op_t ec_gf8_mul_38_ops[] = { - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR3, 8, 6, 7 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 0, 8, 0 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_38 = { - 9, - { 4, 5, 6, 3, 0, 1, 7, 2, 8, }, - ec_gf8_mul_38_ops -}; + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR3, 8, 6, 7}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 4, 8, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_38 = {9, + { + 4, + 5, + 6, + 3, + 0, + 1, + 7, + 2, + 8, + }, + ec_gf8_mul_38_ops}; static ec_gf_op_t ec_gf8_mul_39_ops[] = { - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_39 = { - 8, - { 1, 6, 3, 0, 5, 2, 4, 7, }, - ec_gf8_mul_39_ops -}; + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_39 = {8, + { + 1, + 6, + 3, + 0, + 5, + 2, + 4, + 7, + }, + ec_gf8_mul_39_ops}; static ec_gf_op_t ec_gf8_mul_3A_ops[] = { - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_3A = { - 8, - { 3, 4, 7, 0, 5, 6, 1, 2, }, - ec_gf8_mul_3A_ops -}; + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_3A = {8, + { + 3, + 4, + 7, + 0, + 5, + 6, + 1, + 2, + }, + ec_gf8_mul_3A_ops}; static ec_gf_op_t ec_gf8_mul_3B_ops[] = { - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR3, 8, 7, 3 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_3B = { - 9, - { 3, 0, 1, 7, 6, 2, 4, 8, 5, }, - ec_gf8_mul_3B_ops -}; + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR3, 8, 7, 3}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_3B = {9, + { + 3, + 0, + 1, + 7, + 6, + 2, + 4, + 8, + 5, + }, + ec_gf8_mul_3B_ops}; static ec_gf_op_t ec_gf8_mul_3C_ops[] = { - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_3C = { - 8, - { 3, 6, 4, 1, 7, 2, 0, 5, }, - ec_gf8_mul_3C_ops -}; + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_3C = {8, + { + 3, + 6, + 4, + 1, + 7, + 2, + 0, + 5, + }, + ec_gf8_mul_3C_ops}; static ec_gf_op_t ec_gf8_mul_3D_ops[] = { - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_3D = { - 8, - { 2, 3, 4, 5, 6, 7, 0, 1, }, - ec_gf8_mul_3D_ops -}; + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_3D = {8, + { + 2, + 3, + 4, + 5, + 6, + 7, + 0, + 1, + }, + ec_gf8_mul_3D_ops}; static ec_gf_op_t ec_gf8_mul_3E_ops[] = { - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_3E = { - 8, - { 6, 1, 2, 7, 0, 3, 5, 4, }, - ec_gf8_mul_3E_ops -}; + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_3E = {8, + { + 6, + 1, + 2, + 7, + 0, + 3, + 5, + 4, + }, + ec_gf8_mul_3E_ops}; static ec_gf_op_t ec_gf8_mul_3F_ops[] = { - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_COPY, 10, 4, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_COPY, 9, 2, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR3, 4, 9, 7 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 3, 10, 0 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_3F = { - 11, - { 1, 7, 6, 2, 4, 3, 5, 0, 8, 9, 10, }, - ec_gf8_mul_3F_ops -}; + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_COPY, 10, 4, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_COPY, 9, 2, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR3, 4, 9, 7}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 3, 10, 0}, {EC_GF_OP_XOR2, 5, 8, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_3F = {11, + { + 1, + 7, + 6, + 2, + 4, + 3, + 5, + 0, + 8, + 9, + 10, + }, + ec_gf8_mul_3F_ops}; static ec_gf_op_t ec_gf8_mul_40_ops[] = { - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR3, 8, 7, 6 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_40 = { - 9, - { 5, 7, 4, 6, 2, 3, 0, 1, 8, }, - ec_gf8_mul_40_ops -}; + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR3, 8, 7, 6}, + {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 5, 8, 0}, + {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_40 = {9, + { + 5, + 7, + 4, + 6, + 2, + 3, + 0, + 1, + 8, + }, + ec_gf8_mul_40_ops}; static ec_gf_op_t ec_gf8_mul_41_ops[] = { - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 8, 4, 0 }, - { EC_GF_OP_XOR2, 8, 5, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_41 = { - 9, - { 0, 7, 6, 5, 3, 4, 8, 1, 2, }, - ec_gf8_mul_41_ops -}; + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 8, 4, 0}, + {EC_GF_OP_XOR2, 8, 5, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_41 = {9, + { + 0, + 7, + 6, + 5, + 3, + 4, + 8, + 1, + 2, + }, + ec_gf8_mul_41_ops}; static ec_gf_op_t ec_gf8_mul_42_ops[] = { - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 8, 3, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_42 = { - 9, - { 2, 7, 1, 6, 4, 3, 0, 5, 8, }, - ec_gf8_mul_42_ops -}; + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 8, 3, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_42 = {9, + { + 2, + 7, + 1, + 6, + 4, + 3, + 0, + 5, + 8, + }, + ec_gf8_mul_42_ops}; static ec_gf_op_t ec_gf8_mul_43_ops[] = { - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_43 = { - 8, - { 2, 6, 4, 1, 7, 3, 0, 5, }, - ec_gf8_mul_43_ops -}; + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_43 = {8, + { + 2, + 6, + 4, + 1, + 7, + 3, + 0, + 5, + }, + ec_gf8_mul_43_ops}; static ec_gf_op_t ec_gf8_mul_44_ops[] = { - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_44 = { - 8, - { 2, 3, 4, 1, 6, 5, 0, 7, }, - ec_gf8_mul_44_ops -}; + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_44 = {8, + { + 2, + 3, + 4, + 1, + 6, + 5, + 0, + 7, + }, + ec_gf8_mul_44_ops}; static ec_gf_op_t ec_gf8_mul_45_ops[] = { - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_45 = { - 8, - { 2, 3, 0, 1, 7, 4, 5, 6, }, - ec_gf8_mul_45_ops -}; + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_45 = {8, + { + 2, + 3, + 0, + 1, + 7, + 4, + 5, + 6, + }, + ec_gf8_mul_45_ops}; static ec_gf_op_t ec_gf8_mul_46_ops[] = { - { EC_GF_OP_XOR3, 8, 2, 4 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 8, 0, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_46 = { - 9, - { 2, 0, 1, 3, 4, 5, 6, 7, 8, }, - ec_gf8_mul_46_ops -}; + {EC_GF_OP_XOR3, 8, 2, 4}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 8, 0, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 8, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_46 = {9, + { + 2, + 0, + 1, + 3, + 4, + 5, + 6, + 7, + 8, + }, + ec_gf8_mul_46_ops}; static ec_gf_op_t ec_gf8_mul_47_ops[] = { - { EC_GF_OP_XOR3, 8, 0, 1 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_47 = { - 9, - { 2, 3, 4, 5, 6, 7, 0, 1, 8, }, - ec_gf8_mul_47_ops -}; + {EC_GF_OP_XOR3, 8, 0, 1}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_47 = {9, + { + 2, + 3, + 4, + 5, + 6, + 7, + 0, + 1, + 8, + }, + ec_gf8_mul_47_ops}; static ec_gf_op_t ec_gf8_mul_48_ops[] = { - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_48 = { - 8, - { 4, 5, 6, 0, 1, 3, 7, 2, }, - ec_gf8_mul_48_ops -}; + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_48 = {8, + { + 4, + 5, + 6, + 0, + 1, + 3, + 7, + 2, + }, + ec_gf8_mul_48_ops}; static ec_gf_op_t ec_gf8_mul_49_ops[] = { - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR3, 8, 0, 6 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR3, 1, 8, 5 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_49 = { - 9, - { 7, 2, 4, 0, 3, 5, 1, 6, 8, }, - ec_gf8_mul_49_ops -}; + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR3, 8, 0, 6}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 7, 8, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR3, 1, 8, 5}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_49 = {9, + { + 7, + 2, + 4, + 0, + 3, + 5, + 1, + 6, + 8, + }, + ec_gf8_mul_49_ops}; static ec_gf_op_t ec_gf8_mul_4A_ops[] = { - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_4A = { - 8, - { 5, 6, 7, 0, 1, 3, 4, 2, }, - ec_gf8_mul_4A_ops -}; + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_4A = {8, + { + 5, + 6, + 7, + 0, + 1, + 3, + 4, + 2, + }, + ec_gf8_mul_4A_ops}; static ec_gf_op_t ec_gf8_mul_4B_ops[] = { - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR3, 8, 3, 7 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_4B = { - 9, - { 5, 3, 6, 7, 0, 2, 4, 1, 8, }, - ec_gf8_mul_4B_ops -}; + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR3, 8, 3, 7}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 4, 8, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 5, 8, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_4B = {9, + { + 5, + 3, + 6, + 7, + 0, + 2, + 4, + 1, + 8, + }, + ec_gf8_mul_4B_ops}; static ec_gf_op_t ec_gf8_mul_4C_ops[] = { - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_4C = { - 8, - { 5, 3, 4, 7, 0, 6, 2, 1, }, - ec_gf8_mul_4C_ops -}; + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_4C = {8, + { + 5, + 3, + 4, + 7, + 0, + 6, + 2, + 1, + }, + ec_gf8_mul_4C_ops}; static ec_gf_op_t ec_gf8_mul_4D_ops[] = { - { EC_GF_OP_COPY, 8, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR3, 9, 3, 1 }, - { EC_GF_OP_XOR2, 5, 9, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR3, 0, 8, 2 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_4D = { - 10, - { 0, 9, 3, 5, 6, 4, 7, 1, 2, 8, }, - ec_gf8_mul_4D_ops -}; + {EC_GF_OP_COPY, 8, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR3, 9, 3, 1}, + {EC_GF_OP_XOR2, 5, 9, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR3, 0, 8, 2}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_4D = {10, + { + 0, + 9, + 3, + 5, + 6, + 4, + 7, + 1, + 2, + 8, + }, + ec_gf8_mul_4D_ops}; static ec_gf_op_t ec_gf8_mul_4E_ops[] = { - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_4E = { - 8, - { 2, 3, 0, 1, 5, 6, 7, 4, }, - ec_gf8_mul_4E_ops -}; + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_4E = {8, + { + 2, + 3, + 0, + 1, + 5, + 6, + 7, + 4, + }, + ec_gf8_mul_4E_ops}; static ec_gf_op_t ec_gf8_mul_4F_ops[] = { - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_4F = { - 8, - { 0, 3, 5, 6, 1, 2, 7, 4, }, - ec_gf8_mul_4F_ops -}; + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_4F = {8, + { + 0, + 3, + 5, + 6, + 1, + 2, + 7, + 4, + }, + ec_gf8_mul_4F_ops}; static ec_gf_op_t ec_gf8_mul_50_ops[] = { - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_50 = { - 8, - { 4, 5, 7, 3, 0, 1, 2, 6, }, - ec_gf8_mul_50_ops -}; + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_50 = {8, + { + 4, + 5, + 7, + 3, + 0, + 1, + 2, + 6, + }, + ec_gf8_mul_50_ops}; static ec_gf_op_t ec_gf8_mul_51_ops[] = { - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_51 = { - 8, - { 0, 1, 7, 2, 3, 4, 5, 6, }, - ec_gf8_mul_51_ops -}; + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_51 = {8, + { + 0, + 1, + 7, + 2, + 3, + 4, + 5, + 6, + }, + ec_gf8_mul_51_ops}; static ec_gf_op_t ec_gf8_mul_52_ops[] = { - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_COPY, 9, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR3, 3, 5, 8 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 2, 9, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_52 = { - 10, - { 2, 3, 1, 4, 6, 7, 0, 5, 8, 9, }, - ec_gf8_mul_52_ops -}; + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_COPY, 9, 4, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR3, 3, 5, 8}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 2, 9, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_52 = {10, + { + 2, + 3, + 1, + 4, + 6, + 7, + 0, + 5, + 8, + 9, + }, + ec_gf8_mul_52_ops}; static ec_gf_op_t ec_gf8_mul_53_ops[] = { - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_53 = { - 8, - { 2, 0, 1, 4, 5, 6, 7, 3, }, - ec_gf8_mul_53_ops -}; + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_53 = {8, + { + 2, + 0, + 1, + 4, + 5, + 6, + 7, + 3, + }, + ec_gf8_mul_53_ops}; static ec_gf_op_t ec_gf8_mul_54_ops[] = { - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_54 = { - 8, - { 7, 3, 0, 4, 2, 6, 5, 1, }, - ec_gf8_mul_54_ops -}; + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_54 = {8, + { + 7, + 3, + 0, + 4, + 2, + 6, + 5, + 1, + }, + ec_gf8_mul_54_ops}; static ec_gf_op_t ec_gf8_mul_55_ops[] = { - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_55 = { - 8, - { 1, 5, 6, 4, 3, 7, 2, 0, }, - ec_gf8_mul_55_ops -}; + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_55 = {8, + { + 1, + 5, + 6, + 4, + 3, + 7, + 2, + 0, + }, + ec_gf8_mul_55_ops}; static ec_gf_op_t ec_gf8_mul_56_ops[] = { - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_56 = { - 8, - { 2, 3, 0, 4, 5, 6, 7, 1, }, - ec_gf8_mul_56_ops -}; + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_56 = {8, + { + 2, + 3, + 0, + 4, + 5, + 6, + 7, + 1, + }, + ec_gf8_mul_56_ops}; static ec_gf_op_t ec_gf8_mul_57_ops[] = { - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_57 = { - 8, - { 2, 3, 0, 1, 4, 5, 6, 7, }, - ec_gf8_mul_57_ops -}; + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_57 = {8, + { + 2, + 3, + 0, + 1, + 4, + 5, + 6, + 7, + }, + ec_gf8_mul_57_ops}; static ec_gf_op_t ec_gf8_mul_58_ops[] = { - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_58 = { - 8, - { 4, 3, 2, 7, 0, 1, 5, 6, }, - ec_gf8_mul_58_ops -}; + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_58 = {8, + { + 4, + 3, + 2, + 7, + 0, + 1, + 5, + 6, + }, + ec_gf8_mul_58_ops}; static ec_gf_op_t ec_gf8_mul_59_ops[] = { - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_59 = { - 8, - { 7, 3, 5, 6, 1, 2, 0, 4, }, - ec_gf8_mul_59_ops -}; + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_59 = {8, + { + 7, + 3, + 5, + 6, + 1, + 2, + 0, + 4, + }, + ec_gf8_mul_59_ops}; static ec_gf_op_t ec_gf8_mul_5A_ops[] = { - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_5A = { - 8, - { 6, 7, 0, 1, 2, 3, 5, 4, }, - ec_gf8_mul_5A_ops -}; + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_5A = {8, + { + 6, + 7, + 0, + 1, + 2, + 3, + 5, + 4, + }, + ec_gf8_mul_5A_ops}; static ec_gf_op_t ec_gf8_mul_5B_ops[] = { - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_5B = { - 8, - { 6, 0, 7, 5, 2, 1, 3, 4, }, - ec_gf8_mul_5B_ops -}; + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_5B = {8, + { + 6, + 0, + 7, + 5, + 2, + 1, + 3, + 4, + }, + ec_gf8_mul_5B_ops}; static ec_gf_op_t ec_gf8_mul_5C_ops[] = { - { EC_GF_OP_COPY, 8, 3, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 2, 8, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_5C = { - 9, - { 7, 5, 2, 4, 1, 0, 6, 3, 8, }, - ec_gf8_mul_5C_ops -}; + {EC_GF_OP_COPY, 8, 3, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 2, 8, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_5C = {9, + { + 7, + 5, + 2, + 4, + 1, + 0, + 6, + 3, + 8, + }, + ec_gf8_mul_5C_ops}; static ec_gf_op_t ec_gf8_mul_5D_ops[] = { - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_5D = { - 8, - { 1, 3, 5, 4, 6, 7, 2, 0, }, - ec_gf8_mul_5D_ops -}; + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_5D = {8, + { + 1, + 3, + 5, + 4, + 6, + 7, + 2, + 0, + }, + ec_gf8_mul_5D_ops}; static ec_gf_op_t ec_gf8_mul_5E_ops[] = { - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_5E = { - 8, - { 4, 3, 6, 2, 5, 7, 0, 1, }, - ec_gf8_mul_5E_ops -}; + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_5E = {8, + { + 4, + 3, + 6, + 2, + 5, + 7, + 0, + 1, + }, + ec_gf8_mul_5E_ops}; static ec_gf_op_t ec_gf8_mul_5F_ops[] = { - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_5F = { - 8, - { 6, 1, 3, 4, 5, 7, 2, 0, }, - ec_gf8_mul_5F_ops -}; + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_5F = {8, + { + 6, + 1, + 3, + 4, + 5, + 7, + 2, + 0, + }, + ec_gf8_mul_5F_ops}; static ec_gf_op_t ec_gf8_mul_60_ops[] = { - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_60 = { - 8, - { 2, 3, 4, 7, 5, 6, 0, 1, }, - ec_gf8_mul_60_ops -}; + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_60 = {8, + { + 2, + 3, + 4, + 7, + 5, + 6, + 0, + 1, + }, + ec_gf8_mul_60_ops}; static ec_gf_op_t ec_gf8_mul_61_ops[] = { - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_61 = { - 8, - { 0, 5, 6, 7, 4, 2, 1, 3, }, - ec_gf8_mul_61_ops -}; + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_61 = {8, + { + 0, + 5, + 6, + 7, + 4, + 2, + 1, + 3, + }, + ec_gf8_mul_61_ops}; static ec_gf_op_t ec_gf8_mul_62_ops[] = { - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_62 = { - 8, - { 2, 0, 3, 4, 5, 6, 7, 1, }, - ec_gf8_mul_62_ops -}; + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_62 = {8, + { + 2, + 0, + 3, + 4, + 5, + 6, + 7, + 1, + }, + ec_gf8_mul_62_ops}; static ec_gf_op_t ec_gf8_mul_63_ops[] = { - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_63 = { - 8, - { 3, 4, 6, 5, 7, 0, 1, 2, }, - ec_gf8_mul_63_ops -}; + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_63 = {8, + { + 3, + 4, + 6, + 5, + 7, + 0, + 1, + 2, + }, + ec_gf8_mul_63_ops}; static ec_gf_op_t ec_gf8_mul_64_ops[] = { - { EC_GF_OP_COPY, 8, 1, 0 }, - { EC_GF_OP_XOR2, 8, 0, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 8, 7, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_64 = { - 9, - { 2, 3, 4, 6, 5, 7, 8, 1, 0, }, - ec_gf8_mul_64_ops -}; + {EC_GF_OP_COPY, 8, 1, 0}, {EC_GF_OP_XOR2, 8, 0, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 8, 7, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_64 = {9, + { + 2, + 3, + 4, + 6, + 5, + 7, + 8, + 1, + 0, + }, + ec_gf8_mul_64_ops}; static ec_gf_op_t ec_gf8_mul_65_ops[] = { - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_65 = { - 8, - { 2, 5, 1, 3, 4, 0, 6, 7, }, - ec_gf8_mul_65_ops -}; + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_65 = {8, + { + 2, + 5, + 1, + 3, + 4, + 0, + 6, + 7, + }, + ec_gf8_mul_65_ops}; static ec_gf_op_t ec_gf8_mul_66_ops[] = { - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_66 = { - 8, - { 2, 3, 1, 4, 5, 7, 0, 6, }, - ec_gf8_mul_66_ops -}; + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_66 = {8, + { + 2, + 3, + 1, + 4, + 5, + 7, + 0, + 6, + }, + ec_gf8_mul_66_ops}; static ec_gf_op_t ec_gf8_mul_67_ops[] = { - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_67 = { - 8, - { 2, 4, 5, 6, 7, 3, 1, 0, }, - ec_gf8_mul_67_ops -}; + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_67 = {8, + { + 2, + 4, + 5, + 6, + 7, + 3, + 1, + 0, + }, + ec_gf8_mul_67_ops}; static ec_gf_op_t ec_gf8_mul_68_ops[] = { - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_68 = { - 8, - { 5, 7, 2, 3, 0, 6, 4, 1, }, - ec_gf8_mul_68_ops -}; + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_68 = {8, + { + 5, + 7, + 2, + 3, + 0, + 6, + 4, + 1, + }, + ec_gf8_mul_68_ops}; static ec_gf_op_t ec_gf8_mul_69_ops[] = { - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_69 = { - 8, - { 0, 1, 3, 2, 4, 5, 7, 6, }, - ec_gf8_mul_69_ops -}; + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_69 = {8, + { + 0, + 1, + 3, + 2, + 4, + 5, + 7, + 6, + }, + ec_gf8_mul_69_ops}; static ec_gf_op_t ec_gf8_mul_6A_ops[] = { - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_6A = { - 8, - { 5, 7, 4, 6, 1, 2, 0, 3, }, - ec_gf8_mul_6A_ops -}; + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_6A = {8, + { + 5, + 7, + 4, + 6, + 1, + 2, + 0, + 3, + }, + ec_gf8_mul_6A_ops}; static ec_gf_op_t ec_gf8_mul_6B_ops[] = { - { EC_GF_OP_COPY, 8, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 0, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_6B = { - 9, - { 6, 7, 2, 0, 3, 1, 5, 4, 8, }, - ec_gf8_mul_6B_ops -}; + {EC_GF_OP_COPY, 8, 1, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_6B = {9, + { + 6, + 7, + 2, + 0, + 3, + 1, + 5, + 4, + 8, + }, + ec_gf8_mul_6B_ops}; static ec_gf_op_t ec_gf8_mul_6C_ops[] = { - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_6C = { - 8, - { 5, 6, 7, 0, 1, 2, 3, 4, }, - ec_gf8_mul_6C_ops -}; + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_6C = {8, + { + 5, + 6, + 7, + 0, + 1, + 2, + 3, + 4, + }, + ec_gf8_mul_6C_ops}; static ec_gf_op_t ec_gf8_mul_6D_ops[] = { - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR3, 8, 3, 4 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 0, 8, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 6, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_6D = { - 9, - { 3, 6, 7, 0, 4, 5, 1, 2, 8, }, - ec_gf8_mul_6D_ops -}; + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR3, 8, 3, 4}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_6D = {9, + { + 3, + 6, + 7, + 0, + 4, + 5, + 1, + 2, + 8, + }, + ec_gf8_mul_6D_ops}; static ec_gf_op_t ec_gf8_mul_6E_ops[] = { - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_6E = { - 8, - { 5, 6, 3, 1, 7, 2, 0, 4, }, - ec_gf8_mul_6E_ops -}; + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_6E = {8, + { + 5, + 6, + 3, + 1, + 7, + 2, + 0, + 4, + }, + ec_gf8_mul_6E_ops}; static ec_gf_op_t ec_gf8_mul_6F_ops[] = { - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR3, 0, 8, 7 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_6F = { - 9, - { 2, 6, 3, 7, 0, 1, 4, 5, 8, }, - ec_gf8_mul_6F_ops -}; + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR3, 0, 8, 7}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_6F = {9, + { + 2, + 6, + 3, + 7, + 0, + 1, + 4, + 5, + 8, + }, + ec_gf8_mul_6F_ops}; static ec_gf_op_t ec_gf8_mul_70_ops[] = { - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_70 = { - 8, - { 3, 4, 5, 2, 6, 0, 1, 7, }, - ec_gf8_mul_70_ops -}; + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_70 = {8, + { + 3, + 4, + 5, + 2, + 6, + 0, + 1, + 7, + }, + ec_gf8_mul_70_ops}; static ec_gf_op_t ec_gf8_mul_71_ops[] = { - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_71 = { - 8, - { 4, 7, 5, 3, 6, 0, 2, 1, }, - ec_gf8_mul_71_ops -}; + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_71 = {8, + { + 4, + 7, + 5, + 3, + 6, + 0, + 2, + 1, + }, + ec_gf8_mul_71_ops}; static ec_gf_op_t ec_gf8_mul_72_ops[] = { - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_72 = { - 8, - { 0, 5, 2, 7, 4, 1, 3, 6, }, - ec_gf8_mul_72_ops -}; + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_72 = {8, + { + 0, + 5, + 2, + 7, + 4, + 1, + 3, + 6, + }, + ec_gf8_mul_72_ops}; static ec_gf_op_t ec_gf8_mul_73_ops[] = { - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_73 = { - 8, - { 6, 0, 1, 7, 4, 5, 2, 3, }, - ec_gf8_mul_73_ops -}; + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_73 = {8, + { + 6, + 0, + 1, + 7, + 4, + 5, + 2, + 3, + }, + ec_gf8_mul_73_ops}; static ec_gf_op_t ec_gf8_mul_74_ops[] = { - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_74 = { - 8, - { 3, 2, 1, 0, 4, 5, 6, 7, }, - ec_gf8_mul_74_ops -}; + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_74 = {8, + { + 3, + 2, + 1, + 0, + 4, + 5, + 6, + 7, + }, + ec_gf8_mul_74_ops}; static ec_gf_op_t ec_gf8_mul_75_ops[] = { - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_75 = { - 8, - { 4, 5, 6, 7, 0, 1, 2, 3, }, - ec_gf8_mul_75_ops -}; + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_75 = {8, + { + 4, + 5, + 6, + 7, + 0, + 1, + 2, + 3, + }, + ec_gf8_mul_75_ops}; static ec_gf_op_t ec_gf8_mul_76_ops[] = { - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR3, 8, 6, 2 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 0, 8, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_76 = { - 9, - { 2, 3, 0, 6, 5, 1, 7, 8, 4, }, - ec_gf8_mul_76_ops -}; + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR3, 8, 6, 2}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 0, 8, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_76 = {9, + { + 2, + 3, + 0, + 6, + 5, + 1, + 7, + 8, + 4, + }, + ec_gf8_mul_76_ops}; static ec_gf_op_t ec_gf8_mul_77_ops[] = { - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_77 = { - 8, - { 7, 4, 3, 6, 0, 1, 5, 2, }, - ec_gf8_mul_77_ops -}; + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_77 = {8, + { + 7, + 4, + 3, + 6, + 0, + 1, + 5, + 2, + }, + ec_gf8_mul_77_ops}; static ec_gf_op_t ec_gf8_mul_78_ops[] = { - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR3, 8, 0, 2 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_78 = { - 9, - { 4, 7, 3, 2, 5, 1, 6, 0, 8, }, - ec_gf8_mul_78_ops -}; + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR3, 8, 0, 2}, + {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 1, 8, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_78 = {9, + { + 4, + 7, + 3, + 2, + 5, + 1, + 6, + 0, + 8, + }, + ec_gf8_mul_78_ops}; static ec_gf_op_t ec_gf8_mul_79_ops[] = { - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR3, 8, 4, 7 }, - { EC_GF_OP_XOR2, 0, 8, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 6, 8, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_79 = { - 9, - { 4, 5, 7, 3, 1, 6, 2, 0, 8, }, - ec_gf8_mul_79_ops -}; + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR3, 8, 4, 7}, + {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_79 = {9, + { + 4, + 5, + 7, + 3, + 1, + 6, + 2, + 0, + 8, + }, + ec_gf8_mul_79_ops}; static ec_gf_op_t ec_gf8_mul_7A_ops[] = { - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_7A = { - 8, - { 1, 2, 3, 4, 5, 6, 7, 0, }, - ec_gf8_mul_7A_ops -}; + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_7A = {8, + { + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 0, + }, + ec_gf8_mul_7A_ops}; static ec_gf_op_t ec_gf8_mul_7B_ops[] = { - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR3, 8, 5, 3 }, - { EC_GF_OP_XOR2, 8, 0, 0 }, - { EC_GF_OP_COPY, 9, 4, 0 }, - { EC_GF_OP_XOR2, 8, 2, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR3, 4, 1, 9 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_7B = { - 10, - { 1, 2, 3, 4, 8, 5, 6, 0, 7, 9, }, - ec_gf8_mul_7B_ops -}; + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR3, 8, 5, 3}, + {EC_GF_OP_XOR2, 8, 0, 0}, {EC_GF_OP_COPY, 9, 4, 0}, + {EC_GF_OP_XOR2, 8, 2, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR3, 4, 1, 9}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_7B = {10, + { + 1, + 2, + 3, + 4, + 8, + 5, + 6, + 0, + 7, + 9, + }, + ec_gf8_mul_7B_ops}; static ec_gf_op_t ec_gf8_mul_7C_ops[] = { - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_7C = { - 8, - { 2, 4, 1, 6, 3, 5, 7, 0, }, - ec_gf8_mul_7C_ops -}; + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_7C = {8, + { + 2, + 4, + 1, + 6, + 3, + 5, + 7, + 0, + }, + ec_gf8_mul_7C_ops}; static ec_gf_op_t ec_gf8_mul_7D_ops[] = { - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_7D = { - 8, - { 1, 0, 3, 5, 6, 7, 2, 4, }, - ec_gf8_mul_7D_ops -}; + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_7D = {8, + { + 1, + 0, + 3, + 5, + 6, + 7, + 2, + 4, + }, + ec_gf8_mul_7D_ops}; static ec_gf_op_t ec_gf8_mul_7E_ops[] = { - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR3, 6, 2, 7 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 6, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_7E = { - 9, - { 5, 1, 2, 0, 7, 3, 4, 6, 8, }, - ec_gf8_mul_7E_ops -}; + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_COPY, 8, 0, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR3, 6, 2, 7}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_7E = {9, + { + 5, + 1, + 2, + 0, + 7, + 3, + 4, + 6, + 8, + }, + ec_gf8_mul_7E_ops}; static ec_gf_op_t ec_gf8_mul_7F_ops[] = { - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR3, 9, 7, 5 }, - { EC_GF_OP_XOR2, 2, 9, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 6, 9, 0 }, - { EC_GF_OP_XOR3, 9, 6, 4 }, - { EC_GF_OP_XOR2, 7, 9, 0 }, - { EC_GF_OP_XOR2, 3, 9, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_7F = { - 10, - { 4, 1, 0, 5, 6, 7, 2, 3, 8, 9, }, - ec_gf8_mul_7F_ops -}; + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR3, 9, 7, 5}, {EC_GF_OP_XOR2, 2, 9, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 6, 9, 0}, + {EC_GF_OP_XOR3, 9, 6, 4}, {EC_GF_OP_XOR2, 7, 9, 0}, + {EC_GF_OP_XOR2, 3, 9, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_7F = {10, + { + 4, + 1, + 0, + 5, + 6, + 7, + 2, + 3, + 8, + 9, + }, + ec_gf8_mul_7F_ops}; static ec_gf_op_t ec_gf8_mul_80_ops[] = { - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_80 = { - 8, - { 7, 5, 6, 4, 1, 2, 3, 0, }, - ec_gf8_mul_80_ops -}; + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_80 = {8, + { + 7, + 5, + 6, + 4, + 1, + 2, + 3, + 0, + }, + ec_gf8_mul_80_ops}; static ec_gf_op_t ec_gf8_mul_81_ops[] = { - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_81 = { - 8, - { 2, 7, 4, 1, 5, 6, 3, 0, }, - ec_gf8_mul_81_ops -}; + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_81 = {8, + { + 2, + 7, + 4, + 1, + 5, + 6, + 3, + 0, + }, + ec_gf8_mul_81_ops}; static ec_gf_op_t ec_gf8_mul_82_ops[] = { - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_COPY, 8, 6, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR3, 5, 8, 7 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_82 = { - 9, - { 6, 2, 7, 5, 1, 3, 4, 0, 8, }, - ec_gf8_mul_82_ops -}; + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_COPY, 8, 6, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR3, 5, 8, 7}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_82 = {9, + { + 6, + 2, + 7, + 5, + 1, + 3, + 4, + 0, + 8, + }, + ec_gf8_mul_82_ops}; static ec_gf_op_t ec_gf8_mul_83_ops[] = { - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_83 = { - 8, - { 3, 5, 6, 7, 1, 2, 4, 0, }, - ec_gf8_mul_83_ops -}; + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_83 = {8, + { + 3, + 5, + 6, + 7, + 1, + 2, + 4, + 0, + }, + ec_gf8_mul_83_ops}; static ec_gf_op_t ec_gf8_mul_84_ops[] = { - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_84 = { - 8, - { 7, 6, 0, 4, 1, 5, 3, 2, }, - ec_gf8_mul_84_ops -}; + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_84 = {8, + { + 7, + 6, + 0, + 4, + 1, + 5, + 3, + 2, + }, + ec_gf8_mul_84_ops}; static ec_gf_op_t ec_gf8_mul_85_ops[] = { - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_85 = { - 8, - { 7, 6, 0, 3, 2, 4, 5, 1, }, - ec_gf8_mul_85_ops -}; + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_85 = {8, + { + 7, + 6, + 0, + 3, + 2, + 4, + 5, + 1, + }, + ec_gf8_mul_85_ops}; static ec_gf_op_t ec_gf8_mul_86_ops[] = { - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_86 = { - 8, - { 1, 2, 6, 4, 5, 7, 3, 0, }, - ec_gf8_mul_86_ops -}; + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_86 = {8, + { + 1, + 2, + 6, + 4, + 5, + 7, + 3, + 0, + }, + ec_gf8_mul_86_ops}; static ec_gf_op_t ec_gf8_mul_87_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_COPY, 8, 1, 0 }, - { EC_GF_OP_XOR2, 8, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR3, 5, 8, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 2, 8, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_87 = { - 9, - { 1, 2, 3, 4, 5, 7, 6, 0, 8, }, - ec_gf8_mul_87_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_COPY, 8, 1, 0}, + {EC_GF_OP_XOR2, 8, 6, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR3, 5, 8, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 2, 8, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_87 = {9, + { + 1, + 2, + 3, + 4, + 5, + 7, + 6, + 0, + 8, + }, + ec_gf8_mul_87_ops}; static ec_gf_op_t ec_gf8_mul_88_ops[] = { - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_88 = { - 8, - { 6, 7, 3, 1, 2, 4, 5, 0, }, - ec_gf8_mul_88_ops -}; + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_88 = {8, + { + 6, + 7, + 3, + 1, + 2, + 4, + 5, + 0, + }, + ec_gf8_mul_88_ops}; static ec_gf_op_t ec_gf8_mul_89_ops[] = { - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR3, 8, 5, 2 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 0, 8, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_89 = { - 9, - { 2, 1, 6, 5, 7, 3, 4, 0, 8, }, - ec_gf8_mul_89_ops -}; + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR3, 8, 5, 2}, + {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_89 = {9, + { + 2, + 1, + 6, + 5, + 7, + 3, + 4, + 0, + 8, + }, + ec_gf8_mul_89_ops}; static ec_gf_op_t ec_gf8_mul_8A_ops[] = { - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_8A = { - 8, - { 1, 2, 3, 0, 6, 7, 4, 5, }, - ec_gf8_mul_8A_ops -}; + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_8A = {8, + { + 1, + 2, + 3, + 0, + 6, + 7, + 4, + 5, + }, + ec_gf8_mul_8A_ops}; static ec_gf_op_t ec_gf8_mul_8B_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_8B = { - 8, - { 6, 1, 2, 3, 5, 7, 4, 0, }, - ec_gf8_mul_8B_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_8B = {8, + { + 6, + 1, + 2, + 3, + 5, + 7, + 4, + 0, + }, + ec_gf8_mul_8B_ops}; static ec_gf_op_t ec_gf8_mul_8C_ops[] = { - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_8C = { - 8, - { 1, 2, 0, 7, 3, 4, 5, 6, }, - ec_gf8_mul_8C_ops -}; + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_8C = {8, + { + 1, + 2, + 0, + 7, + 3, + 4, + 5, + 6, + }, + ec_gf8_mul_8C_ops}; static ec_gf_op_t ec_gf8_mul_8D_ops[] = { - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_8D = { - 8, - { 7, 1, 3, 2, 4, 5, 0, 6, }, - ec_gf8_mul_8D_ops -}; - -static ec_gf_op_t ec_gf8_mul_8E_ops[] = { - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_8E = { - 8, - { 1, 2, 3, 4, 5, 6, 7, 0, }, - ec_gf8_mul_8E_ops -}; + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_8D = {8, + { + 7, + 1, + 3, + 2, + 4, + 5, + 0, + 6, + }, + ec_gf8_mul_8D_ops}; + +static ec_gf_op_t ec_gf8_mul_8E_ops[] = {{EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_8E = {8, + { + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 0, + }, + ec_gf8_mul_8E_ops}; static ec_gf_op_t ec_gf8_mul_8F_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_8F = { - 8, - { 1, 2, 3, 4, 5, 6, 7, 0, }, - ec_gf8_mul_8F_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_8F = {8, + { + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 0, + }, + ec_gf8_mul_8F_ops}; static ec_gf_op_t ec_gf8_mul_90_ops[] = { - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_90 = { - 8, - { 4, 5, 6, 7, 0, 1, 3, 2, }, - ec_gf8_mul_90_ops -}; + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_90 = {8, + { + 4, + 5, + 6, + 7, + 0, + 1, + 3, + 2, + }, + ec_gf8_mul_90_ops}; static ec_gf_op_t ec_gf8_mul_91_ops[] = { - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_COPY, 9, 1, 0 }, - { EC_GF_OP_COPY, 8, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 7, 9, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR3, 5, 8, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_91 = { - 10, - { 2, 3, 1, 4, 0, 6, 7, 5, 8, 9, }, - ec_gf8_mul_91_ops -}; + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_COPY, 9, 1, 0}, {EC_GF_OP_COPY, 8, 3, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 7, 9, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR3, 5, 8, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_91 = {10, + { + 2, + 3, + 1, + 4, + 0, + 6, + 7, + 5, + 8, + 9, + }, + ec_gf8_mul_91_ops}; static ec_gf_op_t ec_gf8_mul_92_ops[] = { - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_92 = { - 8, - { 6, 7, 0, 1, 2, 3, 5, 4, }, - ec_gf8_mul_92_ops -}; + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_92 = {8, + { + 6, + 7, + 0, + 1, + 2, + 3, + 5, + 4, + }, + ec_gf8_mul_92_ops}; static ec_gf_op_t ec_gf8_mul_93_ops[] = { - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_93 = { - 8, - { 6, 4, 5, 1, 7, 2, 3, 0, }, - ec_gf8_mul_93_ops -}; + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_93 = {8, + { + 6, + 4, + 5, + 1, + 7, + 2, + 3, + 0, + }, + ec_gf8_mul_93_ops}; static ec_gf_op_t ec_gf8_mul_94_ops[] = { - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_94 = { - 8, - { 7, 5, 0, 2, 6, 1, 3, 4, }, - ec_gf8_mul_94_ops -}; + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_94 = {8, + { + 7, + 5, + 0, + 2, + 6, + 1, + 3, + 4, + }, + ec_gf8_mul_94_ops}; static ec_gf_op_t ec_gf8_mul_95_ops[] = { - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_95 = { - 8, - { 7, 6, 1, 3, 0, 4, 5, 2, }, - ec_gf8_mul_95_ops -}; + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_95 = {8, + { + 7, + 6, + 1, + 3, + 0, + 4, + 5, + 2, + }, + ec_gf8_mul_95_ops}; static ec_gf_op_t ec_gf8_mul_96_ops[] = { - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR3, 8, 0, 4 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 8, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_96 = { - 9, - { 4, 0, 1, 6, 7, 2, 3, 5, 8, }, - ec_gf8_mul_96_ops -}; + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR3, 8, 0, 4}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 8, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 5, 8, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_96 = {9, + { + 4, + 0, + 1, + 6, + 7, + 2, + 3, + 5, + 8, + }, + ec_gf8_mul_96_ops}; static ec_gf_op_t ec_gf8_mul_97_ops[] = { - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_COPY, 8, 2, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 8, 6, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_97 = { - 9, - { 4, 5, 3, 6, 7, 1, 2, 0, 8, }, - ec_gf8_mul_97_ops -}; + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_COPY, 8, 2, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 8, 6, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 5, 8, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_97 = {9, + { + 4, + 5, + 3, + 6, + 7, + 1, + 2, + 0, + 8, + }, + ec_gf8_mul_97_ops}; static ec_gf_op_t ec_gf8_mul_98_ops[] = { - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_98 = { - 8, - { 4, 2, 3, 6, 7, 5, 1, 0, }, - ec_gf8_mul_98_ops -}; + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_98 = {8, + { + 4, + 2, + 3, + 6, + 7, + 5, + 1, + 0, + }, + ec_gf8_mul_98_ops}; static ec_gf_op_t ec_gf8_mul_99_ops[] = { - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_99 = { - 8, - { 6, 5, 3, 7, 0, 1, 4, 2, }, - ec_gf8_mul_99_ops -}; + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_99 = {8, + { + 6, + 5, + 3, + 7, + 0, + 1, + 4, + 2, + }, + ec_gf8_mul_99_ops}; static ec_gf_op_t ec_gf8_mul_9A_ops[] = { - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR3, 8, 4, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_9A = { - 9, - { 6, 3, 4, 0, 5, 1, 2, 7, 8, }, - ec_gf8_mul_9A_ops -}; + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR3, 8, 4, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_XOR2, 1, 8, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_9A = {9, + { + 6, + 3, + 4, + 0, + 5, + 1, + 2, + 7, + 8, + }, + ec_gf8_mul_9A_ops}; static ec_gf_op_t ec_gf8_mul_9B_ops[] = { - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_COPY, 9, 5, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR3, 8, 3, 2 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 3, 9, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_9B = { - 10, - { 4, 5, 8, 6, 7, 1, 2, 0, 3, 9, }, - ec_gf8_mul_9B_ops -}; + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_COPY, 9, 5, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR3, 8, 3, 2}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 3, 9, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_9B = {10, + { + 4, + 5, + 8, + 6, + 7, + 1, + 2, + 0, + 3, + 9, + }, + ec_gf8_mul_9B_ops}; static ec_gf_op_t ec_gf8_mul_9C_ops[] = { - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_9C = { - 8, - { 3, 2, 1, 0, 4, 5, 6, 7, }, - ec_gf8_mul_9C_ops -}; + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_9C = {8, + { + 3, + 2, + 1, + 0, + 4, + 5, + 6, + 7, + }, + ec_gf8_mul_9C_ops}; static ec_gf_op_t ec_gf8_mul_9D_ops[] = { - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_9D = { - 8, - { 0, 1, 2, 3, 7, 4, 5, 6, }, - ec_gf8_mul_9D_ops -}; + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_9D = {8, + { + 0, + 1, + 2, + 3, + 7, + 4, + 5, + 6, + }, + ec_gf8_mul_9D_ops}; static ec_gf_op_t ec_gf8_mul_9E_ops[] = { - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_COPY, 8, 7, 0 }, - { EC_GF_OP_XOR2, 8, 5, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 0, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_9E = { - 9, - { 4, 5, 3, 8, 6, 0, 2, 7, 1, }, - ec_gf8_mul_9E_ops -}; + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_COPY, 8, 7, 0}, + {EC_GF_OP_XOR2, 8, 5, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_9E = {9, + { + 4, + 5, + 3, + 8, + 6, + 0, + 2, + 7, + 1, + }, + ec_gf8_mul_9E_ops}; static ec_gf_op_t ec_gf8_mul_9F_ops[] = { - { EC_GF_OP_XOR3, 8, 1, 2 }, - { EC_GF_OP_XOR2, 8, 3, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 6, 8, 0 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_9F = { - 9, - { 4, 5, 6, 7, 0, 1, 2, 3, 8, }, - ec_gf8_mul_9F_ops -}; + {EC_GF_OP_XOR3, 8, 1, 2}, {EC_GF_OP_XOR2, 8, 3, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_XOR2, 5, 8, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_9F = {9, + { + 4, + 5, + 6, + 7, + 0, + 1, + 2, + 3, + 8, + }, + ec_gf8_mul_9F_ops}; static ec_gf_op_t ec_gf8_mul_A0_ops[] = { - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_A0 = { - 8, - { 3, 1, 6, 7, 5, 2, 4, 0, }, - ec_gf8_mul_A0_ops -}; + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_A0 = {8, + { + 3, + 1, + 6, + 7, + 5, + 2, + 4, + 0, + }, + ec_gf8_mul_A0_ops}; static ec_gf_op_t ec_gf8_mul_A1_ops[] = { - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR3, 8, 0, 6 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_A1 = { - 9, - { 7, 4, 1, 5, 6, 0, 2, 3, 8, }, - ec_gf8_mul_A1_ops -}; + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR3, 8, 0, 6}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 7, 8, 0}, + {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_A1 = {9, + { + 7, + 4, + 1, + 5, + 6, + 0, + 2, + 3, + 8, + }, + ec_gf8_mul_A1_ops}; static ec_gf_op_t ec_gf8_mul_A2_ops[] = { - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_A2 = { - 8, - { 7, 0, 6, 3, 2, 1, 4, 5, }, - ec_gf8_mul_A2_ops -}; + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_A2 = {8, + { + 7, + 0, + 6, + 3, + 2, + 1, + 4, + 5, + }, + ec_gf8_mul_A2_ops}; static ec_gf_op_t ec_gf8_mul_A3_ops[] = { - { EC_GF_OP_COPY, 8, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_A3 = { - 9, - { 3, 7, 2, 6, 1, 4, 0, 5, 8, }, - ec_gf8_mul_A3_ops -}; + {EC_GF_OP_COPY, 8, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 3, 8, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_A3 = {9, + { + 3, + 7, + 2, + 6, + 1, + 4, + 0, + 5, + 8, + }, + ec_gf8_mul_A3_ops}; static ec_gf_op_t ec_gf8_mul_A4_ops[] = { - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_A4 = { - 8, - { 5, 6, 7, 2, 4, 3, 0, 1, }, - ec_gf8_mul_A4_ops -}; + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_A4 = {8, + { + 5, + 6, + 7, + 2, + 4, + 3, + 0, + 1, + }, + ec_gf8_mul_A4_ops}; static ec_gf_op_t ec_gf8_mul_A5_ops[] = { - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR3, 8, 5, 6 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_A5 = { - 9, - { 1, 4, 2, 5, 6, 7, 3, 0, 8, }, - ec_gf8_mul_A5_ops -}; + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR3, 8, 5, 6}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 7, 8, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_A5 = {9, + { + 1, + 4, + 2, + 5, + 6, + 7, + 3, + 0, + 8, + }, + ec_gf8_mul_A5_ops}; static ec_gf_op_t ec_gf8_mul_A6_ops[] = { - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_A6 = { - 8, - { 1, 2, 0, 3, 4, 5, 6, 7, }, - ec_gf8_mul_A6_ops -}; + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_A6 = {8, + { + 1, + 2, + 0, + 3, + 4, + 5, + 6, + 7, + }, + ec_gf8_mul_A6_ops}; static ec_gf_op_t ec_gf8_mul_A7_ops[] = { - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_A7 = { - 8, - { 0, 1, 2, 5, 6, 7, 3, 4, }, - ec_gf8_mul_A7_ops -}; + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_A7 = {8, + { + 0, + 1, + 2, + 5, + 6, + 7, + 3, + 4, + }, + ec_gf8_mul_A7_ops}; static ec_gf_op_t ec_gf8_mul_A8_ops[] = { - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 8, 1, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_COPY, 9, 4, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 8, 3, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 9, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_A8 = { - 10, - { 1, 7, 5, 8, 6, 3, 4, 0, 2, 9, }, - ec_gf8_mul_A8_ops -}; + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 8, 1, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_COPY, 9, 4, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 8, 3, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 2, 9, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_A8 = {10, + { + 1, + 7, + 5, + 8, + 6, + 3, + 4, + 0, + 2, + 9, + }, + ec_gf8_mul_A8_ops}; static ec_gf_op_t ec_gf8_mul_A9_ops[] = { - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_A9 = { - 8, - { 3, 7, 6, 1, 2, 0, 4, 5, }, - ec_gf8_mul_A9_ops -}; + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_A9 = {8, + { + 3, + 7, + 6, + 1, + 2, + 0, + 4, + 5, + }, + ec_gf8_mul_A9_ops}; static ec_gf_op_t ec_gf8_mul_AA_ops[] = { - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_AA = { - 8, - { 0, 4, 5, 3, 6, 7, 1, 2, }, - ec_gf8_mul_AA_ops -}; + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_AA = {8, + { + 0, + 4, + 5, + 3, + 6, + 7, + 1, + 2, + }, + ec_gf8_mul_AA_ops}; static ec_gf_op_t ec_gf8_mul_AB_ops[] = { - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_COPY, 9, 6, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 8, 7, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR3, 3, 9, 7 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_AB = { - 10, - { 2, 3, 8, 0, 5, 6, 1, 4, 7, 9, }, - ec_gf8_mul_AB_ops -}; + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_COPY, 9, 6, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 8, 7, 0}, {EC_GF_OP_XOR2, 3, 8, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR3, 3, 9, 7}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_AB = {10, + { + 2, + 3, + 8, + 0, + 5, + 6, + 1, + 4, + 7, + 9, + }, + ec_gf8_mul_AB_ops}; static ec_gf_op_t ec_gf8_mul_AC_ops[] = { - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_AC = { - 8, - { 3, 2, 1, 0, 4, 5, 6, 7, }, - ec_gf8_mul_AC_ops -}; + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_AC = {8, + { + 3, + 2, + 1, + 0, + 4, + 5, + 6, + 7, + }, + ec_gf8_mul_AC_ops}; static ec_gf_op_t ec_gf8_mul_AD_ops[] = { - { EC_GF_OP_XOR3, 8, 1, 2 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_AD = { - 9, - { 3, 4, 5, 6, 7, 0, 1, 2, 8, }, - ec_gf8_mul_AD_ops -}; + {EC_GF_OP_XOR3, 8, 1, 2}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 8, 0}, + {EC_GF_OP_XOR2, 5, 8, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_AD = {9, + { + 3, + 4, + 5, + 6, + 7, + 0, + 1, + 2, + 8, + }, + ec_gf8_mul_AD_ops}; static ec_gf_op_t ec_gf8_mul_AE_ops[] = { - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_COPY, 8, 5, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_AE = { - 9, - { 7, 0, 5, 6, 3, 4, 1, 2, 8, }, - ec_gf8_mul_AE_ops -}; + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_COPY, 8, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 8, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_AE = {9, + { + 7, + 0, + 5, + 6, + 3, + 4, + 1, + 2, + 8, + }, + ec_gf8_mul_AE_ops}; static ec_gf_op_t ec_gf8_mul_AF_ops[] = { - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_AF = { - 8, - { 0, 1, 2, 7, 3, 4, 5, 6, }, - ec_gf8_mul_AF_ops -}; + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_AF = {8, + { + 0, + 1, + 2, + 7, + 3, + 4, + 5, + 6, + }, + ec_gf8_mul_AF_ops}; static ec_gf_op_t ec_gf8_mul_B0_ops[] = { - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_B0 = { - 8, - { 4, 0, 7, 2, 3, 1, 6, 5, }, - ec_gf8_mul_B0_ops -}; + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_B0 = {8, + { + 4, + 0, + 7, + 2, + 3, + 1, + 6, + 5, + }, + ec_gf8_mul_B0_ops}; static ec_gf_op_t ec_gf8_mul_B1_ops[] = { - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_COPY, 8, 4, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR3, 5, 8, 1 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_B1 = { - 9, - { 2, 6, 4, 7, 0, 1, 3, 5, 8, }, - ec_gf8_mul_B1_ops -}; + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_COPY, 8, 4, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR3, 5, 8, 1}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_B1 = {9, + { + 2, + 6, + 4, + 7, + 0, + 1, + 3, + 5, + 8, + }, + ec_gf8_mul_B1_ops}; static ec_gf_op_t ec_gf8_mul_B2_ops[] = { - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR3, 8, 4, 5 }, - { EC_GF_OP_XOR2, 2, 8, 0 }, - { EC_GF_OP_XOR2, 8, 1, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_B2 = { - 9, - { 0, 7, 4, 5, 6, 1, 2, 3, 8, }, - ec_gf8_mul_B2_ops -}; + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR3, 8, 4, 5}, + {EC_GF_OP_XOR2, 2, 8, 0}, {EC_GF_OP_XOR2, 8, 1, 0}, + {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_XOR2, 3, 8, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_B2 = {9, + { + 0, + 7, + 4, + 5, + 6, + 1, + 2, + 3, + 8, + }, + ec_gf8_mul_B2_ops}; static ec_gf_op_t ec_gf8_mul_B3_ops[] = { - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_COPY, 9, 5, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR3, 8, 6, 4 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 8, 5, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR2, 0, 8, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR3, 1, 9, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_B3 = { - 10, - { 2, 3, 4, 5, 1, 6, 0, 7, 8, 9, }, - ec_gf8_mul_B3_ops -}; + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_COPY, 9, 5, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR3, 8, 6, 4}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 8, 5, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 7, 8, 0}, + {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR3, 1, 9, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_B3 = {10, + { + 2, + 3, + 4, + 5, + 1, + 6, + 0, + 7, + 8, + 9, + }, + ec_gf8_mul_B3_ops}; static ec_gf_op_t ec_gf8_mul_B4_ops[] = { - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_B4 = { - 8, - { 5, 6, 7, 0, 1, 2, 3, 4, }, - ec_gf8_mul_B4_ops -}; + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_B4 = {8, + { + 5, + 6, + 7, + 0, + 1, + 2, + 3, + 4, + }, + ec_gf8_mul_B4_ops}; static ec_gf_op_t ec_gf8_mul_B5_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_COPY, 8, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR3, 4, 8, 3 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_B5 = { - 9, - { 3, 4, 0, 7, 1, 5, 6, 2, 8, }, - ec_gf8_mul_B5_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_COPY, 8, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR3, 4, 8, 3}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_B5 = {9, + { + 3, + 4, + 0, + 7, + 1, + 5, + 6, + 2, + 8, + }, + ec_gf8_mul_B5_ops}; static ec_gf_op_t ec_gf8_mul_B6_ops[] = { - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_B6 = { - 8, - { 5, 3, 6, 4, 7, 0, 1, 2, }, - ec_gf8_mul_B6_ops -}; + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_B6 = {8, + { + 5, + 3, + 6, + 4, + 7, + 0, + 1, + 2, + }, + ec_gf8_mul_B6_ops}; static ec_gf_op_t ec_gf8_mul_B7_ops[] = { - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_B7 = { - 8, - { 5, 0, 1, 4, 2, 6, 7, 3, }, - ec_gf8_mul_B7_ops -}; + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_B7 = {8, + { + 5, + 0, + 1, + 4, + 2, + 6, + 7, + 3, + }, + ec_gf8_mul_B7_ops}; static ec_gf_op_t ec_gf8_mul_B8_ops[] = { - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_B8 = { - 8, - { 6, 4, 5, 1, 2, 0, 7, 3, }, - ec_gf8_mul_B8_ops -}; + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_B8 = {8, + { + 6, + 4, + 5, + 1, + 2, + 0, + 7, + 3, + }, + ec_gf8_mul_B8_ops}; static ec_gf_op_t ec_gf8_mul_B9_ops[] = { - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR3, 0, 8, 2 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_B9 = { - 9, - { 6, 7, 0, 2, 1, 4, 5, 3, 8, }, - ec_gf8_mul_B9_ops -}; + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR3, 0, 8, 2}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_B9 = {9, + { + 6, + 7, + 0, + 2, + 1, + 4, + 5, + 3, + 8, + }, + ec_gf8_mul_B9_ops}; static ec_gf_op_t ec_gf8_mul_BA_ops[] = { - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_BA = { - 8, - { 1, 2, 4, 3, 5, 6, 0, 7, }, - ec_gf8_mul_BA_ops -}; + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_BA = {8, + { + 1, + 2, + 4, + 3, + 5, + 6, + 0, + 7, + }, + ec_gf8_mul_BA_ops}; static ec_gf_op_t ec_gf8_mul_BB_ops[] = { - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_COPY, 8, 3, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 8, 5, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 8, 7, 0 }, - { EC_GF_OP_XOR2, 2, 8, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_BB = { - 9, - { 7, 2, 1, 8, 3, 5, 6, 4, 0, }, - ec_gf8_mul_BB_ops -}; + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_COPY, 8, 3, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 8, 5, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 8, 7, 0}, {EC_GF_OP_XOR2, 2, 8, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_BB = {9, + { + 7, + 2, + 1, + 8, + 3, + 5, + 6, + 4, + 0, + }, + ec_gf8_mul_BB_ops}; static ec_gf_op_t ec_gf8_mul_BC_ops[] = { - { EC_GF_OP_COPY, 8, 1, 0 }, - { EC_GF_OP_XOR2, 8, 2, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR3, 2, 8, 4 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_BC = { - 9, - { 2, 6, 3, 4, 5, 1, 7, 0, 8, }, - ec_gf8_mul_BC_ops -}; + {EC_GF_OP_COPY, 8, 1, 0}, {EC_GF_OP_XOR2, 8, 2, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_XOR3, 2, 8, 4}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_BC = {9, + { + 2, + 6, + 3, + 4, + 5, + 1, + 7, + 0, + 8, + }, + ec_gf8_mul_BC_ops}; static ec_gf_op_t ec_gf8_mul_BD_ops[] = { - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_BD = { - 8, - { 4, 5, 0, 2, 7, 1, 6, 3, }, - ec_gf8_mul_BD_ops -}; + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_BD = {8, + { + 4, + 5, + 0, + 2, + 7, + 1, + 6, + 3, + }, + ec_gf8_mul_BD_ops}; static ec_gf_op_t ec_gf8_mul_BE_ops[] = { - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_BE = { - 8, - { 0, 6, 7, 4, 5, 1, 3, 2, }, - ec_gf8_mul_BE_ops -}; + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_BE = {8, + { + 0, + 6, + 7, + 4, + 5, + 1, + 3, + 2, + }, + ec_gf8_mul_BE_ops}; static ec_gf_op_t ec_gf8_mul_BF_ops[] = { - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_BF = { - 8, - { 5, 6, 1, 7, 3, 0, 2, 4, }, - ec_gf8_mul_BF_ops -}; + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_BF = {8, + { + 5, + 6, + 1, + 7, + 3, + 0, + 2, + 4, + }, + ec_gf8_mul_BF_ops}; static ec_gf_op_t ec_gf8_mul_C0_ops[] = { - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_C0 = { - 8, - { 1, 2, 3, 4, 7, 5, 6, 0, }, - ec_gf8_mul_C0_ops -}; + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_C0 = {8, + { + 1, + 2, + 3, + 4, + 7, + 5, + 6, + 0, + }, + ec_gf8_mul_C0_ops}; static ec_gf_op_t ec_gf8_mul_C1_ops[] = { - { EC_GF_OP_XOR3, 8, 1, 2 }, - { EC_GF_OP_XOR2, 8, 3, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 6, 8, 0 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_C1 = { - 9, - { 5, 6, 7, 4, 1, 2, 3, 0, 8, }, - ec_gf8_mul_C1_ops -}; + {EC_GF_OP_XOR3, 8, 1, 2}, {EC_GF_OP_XOR2, 8, 3, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_XOR2, 5, 8, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_C1 = {9, + { + 5, + 6, + 7, + 4, + 1, + 2, + 3, + 0, + 8, + }, + ec_gf8_mul_C1_ops}; static ec_gf_op_t ec_gf8_mul_C2_ops[] = { - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_C2 = { - 8, - { 7, 6, 3, 0, 1, 4, 5, 2, }, - ec_gf8_mul_C2_ops -}; + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_C2 = {8, + { + 7, + 6, + 3, + 0, + 1, + 4, + 5, + 2, + }, + ec_gf8_mul_C2_ops}; static ec_gf_op_t ec_gf8_mul_C3_ops[] = { - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR3, 0, 2, 6 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR3, 9, 1, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 7, 9, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_C3 = { - 10, - { 5, 6, 4, 7, 1, 2, 3, 0, 8, 9, }, - ec_gf8_mul_C3_ops -}; + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR3, 0, 2, 6}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR3, 9, 1, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 7, 9, 0}, + {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_C3 = {10, + { + 5, + 6, + 4, + 7, + 1, + 2, + 3, + 0, + 8, + 9, + }, + ec_gf8_mul_C3_ops}; static ec_gf_op_t ec_gf8_mul_C4_ops[] = { - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_C4 = { - 8, - { 0, 2, 1, 3, 4, 5, 6, 7, }, - ec_gf8_mul_C4_ops -}; + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 1, 0, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_C4 = {8, + { + 0, + 2, + 1, + 3, + 4, + 5, + 6, + 7, + }, + ec_gf8_mul_C4_ops}; static ec_gf_op_t ec_gf8_mul_C5_ops[] = { - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_C5 = { - 8, - { 4, 3, 5, 7, 6, 2, 0, 1, }, - ec_gf8_mul_C5_ops -}; + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_C5 = {8, + { + 4, + 3, + 5, + 7, + 6, + 2, + 0, + 1, + }, + ec_gf8_mul_C5_ops}; static ec_gf_op_t ec_gf8_mul_C6_ops[] = { - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_COPY, 8, 4, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR3, 9, 5, 4 }, - { EC_GF_OP_XOR2, 6, 9, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 7, 9, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 6, 8, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_C6 = { - 10, - { 6, 3, 0, 4, 5, 7, 2, 1, 8, 9, }, - ec_gf8_mul_C6_ops -}; + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_COPY, 8, 4, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR3, 9, 5, 4}, + {EC_GF_OP_XOR2, 6, 9, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 7, 9, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 6, 8, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_C6 = {10, + { + 6, + 3, + 0, + 4, + 5, + 7, + 2, + 1, + 8, + 9, + }, + ec_gf8_mul_C6_ops}; static ec_gf_op_t ec_gf8_mul_C7_ops[] = { - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_C7 = { - 8, - { 7, 0, 6, 2, 5, 3, 4, 1, }, - ec_gf8_mul_C7_ops -}; + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_C7 = {8, + { + 7, + 0, + 6, + 2, + 5, + 3, + 4, + 1, + }, + ec_gf8_mul_C7_ops}; static ec_gf_op_t ec_gf8_mul_C8_ops[] = { - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_C8 = { - 8, - { 1, 3, 2, 4, 6, 7, 5, 0, }, - ec_gf8_mul_C8_ops -}; + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_C8 = {8, + { + 1, + 3, + 2, + 4, + 6, + 7, + 5, + 0, + }, + ec_gf8_mul_C8_ops}; static ec_gf_op_t ec_gf8_mul_C9_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_C9 = { - 8, - { 2, 3, 4, 5, 6, 7, 0, 1, }, - ec_gf8_mul_C9_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_C9 = {8, + { + 2, + 3, + 4, + 5, + 6, + 7, + 0, + 1, + }, + ec_gf8_mul_C9_ops}; static ec_gf_op_t ec_gf8_mul_CA_ops[] = { - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_CA = { - 8, - { 1, 2, 5, 7, 3, 4, 0, 6, }, - ec_gf8_mul_CA_ops -}; + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_CA = {8, + { + 1, + 2, + 5, + 7, + 3, + 4, + 0, + 6, + }, + ec_gf8_mul_CA_ops}; static ec_gf_op_t ec_gf8_mul_CB_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_CB = { - 8, - { 2, 3, 4, 5, 7, 6, 0, 1, }, - ec_gf8_mul_CB_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_CB = {8, + { + 2, + 3, + 4, + 5, + 7, + 6, + 0, + 1, + }, + ec_gf8_mul_CB_ops}; static ec_gf_op_t ec_gf8_mul_CC_ops[] = { - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_CC = { - 8, - { 2, 7, 1, 0, 5, 6, 3, 4, }, - ec_gf8_mul_CC_ops -}; + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_CC = {8, + { + 2, + 7, + 1, + 0, + 5, + 6, + 3, + 4, + }, + ec_gf8_mul_CC_ops}; static ec_gf_op_t ec_gf8_mul_CD_ops[] = { - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_CD = { - 8, - { 0, 6, 1, 2, 7, 3, 4, 5, }, - ec_gf8_mul_CD_ops -}; + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_CD = {8, + { + 0, + 6, + 1, + 2, + 7, + 3, + 4, + 5, + }, + ec_gf8_mul_CD_ops}; static ec_gf_op_t ec_gf8_mul_CE_ops[] = { - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_COPY, 8, 7, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR3, 3, 6, 8 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR3, 8, 2, 3 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_CE = { - 9, - { 5, 7, 3, 0, 2, 6, 4, 1, 8, }, - ec_gf8_mul_CE_ops -}; + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_COPY, 8, 7, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR3, 3, 6, 8}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR3, 8, 2, 3}, + {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 4, 8, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_CE = {9, + { + 5, + 7, + 3, + 0, + 2, + 6, + 4, + 1, + 8, + }, + ec_gf8_mul_CE_ops}; static ec_gf_op_t ec_gf8_mul_CF_ops[] = { - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_CF = { - 8, - { 3, 6, 7, 0, 2, 4, 5, 1, }, - ec_gf8_mul_CF_ops -}; + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_CF = {8, + { + 3, + 6, + 7, + 0, + 2, + 4, + 5, + 1, + }, + ec_gf8_mul_CF_ops}; static ec_gf_op_t ec_gf8_mul_D0_ops[] = { - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_D0 = { - 8, - { 5, 6, 7, 2, 0, 3, 1, 4, }, - ec_gf8_mul_D0_ops -}; + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_D0 = {8, + { + 5, + 6, + 7, + 2, + 0, + 3, + 1, + 4, + }, + ec_gf8_mul_D0_ops}; static ec_gf_op_t ec_gf8_mul_D1_ops[] = { - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR3, 8, 6, 0 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_D1 = { - 9, - { 5, 6, 3, 2, 0, 7, 4, 1, 8, }, - ec_gf8_mul_D1_ops -}; + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR3, 8, 6, 0}, + {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 1, 8, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_D1 = {9, + { + 5, + 6, + 3, + 2, + 0, + 7, + 4, + 1, + 8, + }, + ec_gf8_mul_D1_ops}; static ec_gf_op_t ec_gf8_mul_D2_ops[] = { - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_D2 = { - 8, - { 7, 0, 2, 1, 3, 4, 6, 5, }, - ec_gf8_mul_D2_ops -}; + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_D2 = {8, + { + 7, + 0, + 2, + 1, + 3, + 4, + 6, + 5, + }, + ec_gf8_mul_D2_ops}; static ec_gf_op_t ec_gf8_mul_D3_ops[] = { - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_COPY, 8, 4, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 8, 6, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_D3 = { - 9, - { 0, 3, 2, 8, 4, 6, 7, 1, 5, }, - ec_gf8_mul_D3_ops -}; + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_COPY, 8, 4, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 8, 6, 0}, {EC_GF_OP_XOR2, 3, 8, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_D3 = {9, + { + 0, + 3, + 2, + 8, + 4, + 6, + 7, + 1, + 5, + }, + ec_gf8_mul_D3_ops}; static ec_gf_op_t ec_gf8_mul_D4_ops[] = { - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_COPY, 8, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR3, 1, 7, 8 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_D4 = { - 9, - { 4, 1, 7, 5, 0, 6, 3, 2, 8, }, - ec_gf8_mul_D4_ops -}; + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_COPY, 8, 1, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR3, 1, 7, 8}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_D4 = {9, + { + 4, + 1, + 7, + 5, + 0, + 6, + 3, + 2, + 8, + }, + ec_gf8_mul_D4_ops}; static ec_gf_op_t ec_gf8_mul_D5_ops[] = { - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_D5 = { - 8, - { 6, 7, 4, 5, 2, 3, 1, 0, }, - ec_gf8_mul_D5_ops -}; + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_D5 = {8, + { + 6, + 7, + 4, + 5, + 2, + 3, + 1, + 0, + }, + ec_gf8_mul_D5_ops}; static ec_gf_op_t ec_gf8_mul_D6_ops[] = { - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_D6 = { - 9, - { 0, 6, 2, 7, 1, 3, 4, 5, 8, }, - ec_gf8_mul_D6_ops -}; + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_D6 = {9, + { + 0, + 6, + 2, + 7, + 1, + 3, + 4, + 5, + 8, + }, + ec_gf8_mul_D6_ops}; static ec_gf_op_t ec_gf8_mul_D7_ops[] = { - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR3, 8, 3, 5 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 0, 8, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR3, 6, 7, 8 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_D7 = { - 9, - { 3, 4, 6, 5, 0, 7, 1, 2, 8, }, - ec_gf8_mul_D7_ops -}; + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR3, 8, 3, 5}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR3, 6, 7, 8}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_D7 = {9, + { + 3, + 4, + 6, + 5, + 0, + 7, + 1, + 2, + 8, + }, + ec_gf8_mul_D7_ops}; static ec_gf_op_t ec_gf8_mul_D8_ops[] = { - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_D8 = { - 8, - { 4, 5, 6, 7, 0, 1, 2, 3, }, - ec_gf8_mul_D8_ops -}; + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_D8 = {8, + { + 4, + 5, + 6, + 7, + 0, + 1, + 2, + 3, + }, + ec_gf8_mul_D8_ops}; static ec_gf_op_t ec_gf8_mul_D9_ops[] = { - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_D9 = { - 8, - { 1, 2, 6, 7, 4, 5, 0, 3, }, - ec_gf8_mul_D9_ops -}; + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 7, 0, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_D9 = {8, + { + 1, + 2, + 6, + 7, + 4, + 5, + 0, + 3, + }, + ec_gf8_mul_D9_ops}; static ec_gf_op_t ec_gf8_mul_DA_ops[] = { - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR3, 8, 2, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_DA = { - 9, - { 2, 5, 7, 1, 0, 4, 3, 6, 8, }, - ec_gf8_mul_DA_ops -}; + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR3, 8, 2, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 8, 0}, + {EC_GF_OP_XOR2, 5, 8, 0}, {EC_GF_OP_XOR2, 2, 4, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_DA = {9, + { + 2, + 5, + 7, + 1, + 0, + 4, + 3, + 6, + 8, + }, + ec_gf8_mul_DA_ops}; static ec_gf_op_t ec_gf8_mul_DB_ops[] = { - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 8, 4, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_DB = { - 9, - { 7, 5, 6, 2, 3, 4, 1, 0, 8, }, - ec_gf8_mul_DB_ops -}; + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 8, 4, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 8, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_DB = {9, + { + 7, + 5, + 6, + 2, + 3, + 4, + 1, + 0, + 8, + }, + ec_gf8_mul_DB_ops}; static ec_gf_op_t ec_gf8_mul_DC_ops[] = { - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_DC = { - 8, - { 4, 5, 2, 6, 7, 1, 0, 3, }, - ec_gf8_mul_DC_ops -}; + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_DC = {8, + { + 4, + 5, + 2, + 6, + 7, + 1, + 0, + 3, + }, + ec_gf8_mul_DC_ops}; static ec_gf_op_t ec_gf8_mul_DD_ops[] = { - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_DD = { - 8, - { 1, 2, 3, 6, 7, 0, 4, 5, }, - ec_gf8_mul_DD_ops -}; + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_DD = {8, + { + 1, + 2, + 3, + 6, + 7, + 0, + 4, + 5, + }, + ec_gf8_mul_DD_ops}; static ec_gf_op_t ec_gf8_mul_DE_ops[] = { - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_DE = { - 8, - { 0, 5, 2, 6, 7, 1, 3, 4, }, - ec_gf8_mul_DE_ops -}; + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_DE = {8, + { + 0, + 5, + 2, + 6, + 7, + 1, + 3, + 4, + }, + ec_gf8_mul_DE_ops}; static ec_gf_op_t ec_gf8_mul_DF_ops[] = { - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 8, 3, 0 }, - { EC_GF_OP_COPY, 9, 0, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 8, 7, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR3, 1, 9, 2 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_DF = { - 10, - { 7, 2, 8, 4, 3, 1, 0, 6, 5, 9, }, - ec_gf8_mul_DF_ops -}; + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 8, 3, 0}, + {EC_GF_OP_COPY, 9, 0, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 8, 7, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 5, 8, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR3, 1, 9, 2}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_DF = {10, + { + 7, + 2, + 8, + 4, + 3, + 1, + 0, + 6, + 5, + 9, + }, + ec_gf8_mul_DF_ops}; static ec_gf_op_t ec_gf8_mul_E0_ops[] = { - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_E0 = { - 8, - { 2, 3, 4, 7, 5, 6, 0, 1, }, - ec_gf8_mul_E0_ops -}; + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 7, 1, 0}, + {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_E0 = {8, + { + 2, + 3, + 4, + 7, + 5, + 6, + 0, + 1, + }, + ec_gf8_mul_E0_ops}; static ec_gf_op_t ec_gf8_mul_E1_ops[] = { - { EC_GF_OP_COPY, 8, 1, 0 }, - { EC_GF_OP_XOR2, 8, 7, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_XOR3, 9, 5, 3 }, - { EC_GF_OP_XOR2, 0, 9, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 4, 9, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 2, 8, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_E1 = { - 10, - { 0, 7, 1, 3, 4, 5, 6, 2, 8, 9, }, - ec_gf8_mul_E1_ops -}; + {EC_GF_OP_COPY, 8, 1, 0}, {EC_GF_OP_XOR2, 8, 7, 0}, + {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_XOR3, 9, 5, 3}, + {EC_GF_OP_XOR2, 0, 9, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 4, 9, 0}, {EC_GF_OP_XOR2, 0, 2, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 2, 8, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_E1 = {10, + { + 0, + 7, + 1, + 3, + 4, + 5, + 6, + 2, + 8, + 9, + }, + ec_gf8_mul_E1_ops}; static ec_gf_op_t ec_gf8_mul_E2_ops[] = { - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_E2 = { - 8, - { 2, 3, 7, 1, 5, 6, 0, 4, }, - ec_gf8_mul_E2_ops -}; + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_E2 = {8, + { + 2, + 3, + 7, + 1, + 5, + 6, + 0, + 4, + }, + ec_gf8_mul_E2_ops}; static ec_gf_op_t ec_gf8_mul_E3_ops[] = { - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR3, 8, 2, 7 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 0, 8, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR3, 6, 8, 4 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_E3 = { - 9, - { 5, 4, 7, 2, 1, 3, 6, 0, 8, }, - ec_gf8_mul_E3_ops -}; + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 3, 1, 0}, + {EC_GF_OP_XOR3, 8, 2, 7}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 0, 1, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR3, 6, 8, 4}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_E3 = {9, + { + 5, + 4, + 7, + 2, + 1, + 3, + 6, + 0, + 8, + }, + ec_gf8_mul_E3_ops}; static ec_gf_op_t ec_gf8_mul_E4_ops[] = { - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 4, 5, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_E4 = { - 8, - { 7, 0, 1, 6, 3, 4, 2, 5, }, - ec_gf8_mul_E4_ops -}; + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 5, 0}, + {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_E4 = {8, + { + 7, + 0, + 1, + 6, + 3, + 4, + 2, + 5, + }, + ec_gf8_mul_E4_ops}; static ec_gf_op_t ec_gf8_mul_E5_ops[] = { - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_E5 = { - 9, - { 4, 5, 3, 6, 7, 1, 0, 2, 8, }, - ec_gf8_mul_E5_ops -}; + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_E5 = {9, + { + 4, + 5, + 3, + 6, + 7, + 1, + 0, + 2, + 8, + }, + ec_gf8_mul_E5_ops}; static ec_gf_op_t ec_gf8_mul_E6_ops[] = { - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_E6 = { - 8, - { 5, 4, 3, 6, 7, 0, 1, 2, }, - ec_gf8_mul_E6_ops -}; + {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_E6 = {8, + { + 5, + 4, + 3, + 6, + 7, + 0, + 1, + 2, + }, + ec_gf8_mul_E6_ops}; static ec_gf_op_t ec_gf8_mul_E7_ops[] = { - { EC_GF_OP_COPY, 8, 6, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR3, 9, 0, 6 }, - { EC_GF_OP_XOR2, 4, 9, 0 }, - { EC_GF_OP_XOR2, 5, 9, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_E7 = { - 10, - { 1, 4, 3, 6, 7, 5, 2, 0, 8, 9, }, - ec_gf8_mul_E7_ops -}; + {EC_GF_OP_COPY, 8, 6, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR3, 9, 0, 6}, {EC_GF_OP_XOR2, 4, 9, 0}, + {EC_GF_OP_XOR2, 5, 9, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_E7 = {10, + { + 1, + 4, + 3, + 6, + 7, + 5, + 2, + 0, + 8, + 9, + }, + ec_gf8_mul_E7_ops}; static ec_gf_op_t ec_gf8_mul_E8_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 1, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_E8 = { - 8, - { 1, 4, 2, 7, 3, 0, 5, 6, }, - ec_gf8_mul_E8_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 2, 5, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 1, 4, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_E8 = {8, + { + 1, + 4, + 2, + 7, + 3, + 0, + 5, + 6, + }, + ec_gf8_mul_E8_ops}; static ec_gf_op_t ec_gf8_mul_E9_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_COPY, 8, 1, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 6, 3, 0 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR3, 1, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_E9 = { - 9, - { 6, 2, 0, 3, 4, 1, 5, 7, 8, }, - ec_gf8_mul_E9_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_COPY, 8, 1, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 6, 3, 0}, + {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR3, 1, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_E9 = {9, + { + 6, + 2, + 0, + 3, + 4, + 1, + 5, + 7, + 8, + }, + ec_gf8_mul_E9_ops}; static ec_gf_op_t ec_gf8_mul_EA_ops[] = { - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_EA = { - 8, - { 3, 4, 5, 6, 7, 0, 1, 2, }, - ec_gf8_mul_EA_ops -}; + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_EA = {8, + { + 3, + 4, + 5, + 6, + 7, + 0, + 1, + 2, + }, + ec_gf8_mul_EA_ops}; static ec_gf_op_t ec_gf8_mul_EB_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_EB = { - 8, - { 3, 4, 5, 6, 7, 0, 1, 2, }, - ec_gf8_mul_EB_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_EB = {8, + { + 3, + 4, + 5, + 6, + 7, + 0, + 1, + 2, + }, + ec_gf8_mul_EB_ops}; static ec_gf_op_t ec_gf8_mul_EC_ops[] = { - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR3, 8, 4, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_EC = { - 9, - { 7, 4, 3, 0, 2, 5, 1, 6, 8, }, - ec_gf8_mul_EC_ops -}; + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR3, 8, 4, 0}, {EC_GF_OP_XOR2, 1, 8, 0}, + {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_EC = {9, + { + 7, + 4, + 3, + 0, + 2, + 5, + 1, + 6, + 8, + }, + ec_gf8_mul_EC_ops}; static ec_gf_op_t ec_gf8_mul_ED_ops[] = { - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_ED = { - 8, - { 5, 6, 7, 0, 1, 4, 3, 2, }, - ec_gf8_mul_ED_ops -}; + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 0, 0}, + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_ED = {8, + { + 5, + 6, + 7, + 0, + 1, + 4, + 3, + 2, + }, + ec_gf8_mul_ED_ops}; static ec_gf_op_t ec_gf8_mul_EE_ops[] = { - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR3, 8, 2, 3 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 8, 5, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_EE = { - 9, - { 6, 4, 5, 7, 2, 3, 0, 1, 8, }, - ec_gf8_mul_EE_ops -}; + {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR3, 8, 2, 3}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 4, 8, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 8, 5, 0}, + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 7, 8, 0}, + {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_EE = {9, + { + 6, + 4, + 5, + 7, + 2, + 3, + 0, + 1, + 8, + }, + ec_gf8_mul_EE_ops}; static ec_gf_op_t ec_gf8_mul_EF_ops[] = { - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_COPY, 8, 0, 0 }, - { EC_GF_OP_XOR2, 8, 2, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 6, 8, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_EF = { - 9, - { 6, 4, 5, 7, 2, 0, 3, 1, 8, }, - ec_gf8_mul_EF_ops -}; + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_COPY, 8, 0, 0}, + {EC_GF_OP_XOR2, 8, 2, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 7, 8, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 6, 8, 0}, + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_EF = {9, + { + 6, + 4, + 5, + 7, + 2, + 0, + 3, + 1, + 8, + }, + ec_gf8_mul_EF_ops}; static ec_gf_op_t ec_gf8_mul_F0_ops[] = { - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR3, 8, 3, 6 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_XOR2, 8, 4, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 1, 8, 0 }, - { EC_GF_OP_XOR2, 0, 2, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_F0 = { - 9, - { 3, 4, 6, 1, 2, 0, 5, 7, 8, }, - ec_gf8_mul_F0_ops -}; + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR3, 8, 3, 6}, + {EC_GF_OP_XOR2, 5, 8, 0}, {EC_GF_OP_XOR2, 8, 4, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 7, 8, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 1, 8, 0}, + {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_F0 = {9, + { + 3, + 4, + 6, + 1, + 2, + 0, + 5, + 7, + 8, + }, + ec_gf8_mul_F0_ops}; static ec_gf_op_t ec_gf8_mul_F1_ops[] = { - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_COPY, 8, 3, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_COPY, 9, 2, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 9, 0, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 5, 2, 0 }, - { EC_GF_OP_XOR2, 7, 9, 0 }, - { EC_GF_OP_XOR2, 4, 9, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR3, 9, 8, 7 }, - { EC_GF_OP_XOR2, 1, 9, 0 }, - { EC_GF_OP_XOR2, 5, 9, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_F1 = { - 10, - { 7, 2, 6, 3, 5, 1, 4, 0, 8, 9, }, - ec_gf8_mul_F1_ops -}; + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_COPY, 8, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_COPY, 9, 2, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 9, 0, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 5, 2, 0}, + {EC_GF_OP_XOR2, 7, 9, 0}, {EC_GF_OP_XOR2, 4, 9, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR3, 9, 8, 7}, + {EC_GF_OP_XOR2, 1, 9, 0}, {EC_GF_OP_XOR2, 5, 9, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_F1 = {10, + { + 7, + 2, + 6, + 3, + 5, + 1, + 4, + 0, + 8, + 9, + }, + ec_gf8_mul_F1_ops}; static ec_gf_op_t ec_gf8_mul_F2_ops[] = { - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 2, 3, 0 }, - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_XOR3, 8, 6, 4 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 8, 0 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_F2 = { - 9, - { 1, 0, 6, 7, 4, 5, 2, 3, 8, }, - ec_gf8_mul_F2_ops -}; + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 7, 2, 0}, + {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 2, 3, 0}, + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR3, 8, 6, 4}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_XOR2, 5, 8, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_F2 = {9, + { + 1, + 0, + 6, + 7, + 4, + 5, + 2, + 3, + 8, + }, + ec_gf8_mul_F2_ops}; static ec_gf_op_t ec_gf8_mul_F3_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_F3 = { - 8, - { 5, 6, 7, 0, 1, 2, 3, 4, }, - ec_gf8_mul_F3_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_F3 = {8, + { + 5, + 6, + 7, + 0, + 1, + 2, + 3, + 4, + }, + ec_gf8_mul_F3_ops}; static ec_gf_op_t ec_gf8_mul_F4_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_F4 = { - 8, - { 0, 1, 2, 3, 4, 5, 6, 7, }, - ec_gf8_mul_F4_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 3, 7, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_F4 = {8, + { + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + }, + ec_gf8_mul_F4_ops}; static ec_gf_op_t ec_gf8_mul_F5_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_F5 = { - 8, - { 7, 0, 1, 2, 3, 4, 5, 6, }, - ec_gf8_mul_F5_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_F5 = {8, + { + 7, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + }, + ec_gf8_mul_F5_ops}; static ec_gf_op_t ec_gf8_mul_F6_ops[] = { - { EC_GF_OP_XOR2, 3, 1, 0 }, - { EC_GF_OP_COPY, 8, 3, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_COPY, 9, 3, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 9, 4, 0 }, - { EC_GF_OP_XOR2, 4, 1, 0 }, - { EC_GF_OP_XOR2, 6, 9, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 5, 7, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR3, 7, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_F6 = { - 10, - { 0, 6, 2, 7, 4, 3, 5, 9, 1, 8, }, - ec_gf8_mul_F6_ops -}; + {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_COPY, 8, 3, 0}, + {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_COPY, 9, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 9, 4, 0}, {EC_GF_OP_XOR2, 4, 1, 0}, + {EC_GF_OP_XOR2, 6, 9, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 5, 7, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR3, 7, 8, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_F6 = {10, + { + 0, + 6, + 2, + 7, + 4, + 3, + 5, + 9, + 1, + 8, + }, + ec_gf8_mul_F6_ops}; static ec_gf_op_t ec_gf8_mul_F7_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_F7 = { - 8, - { 6, 7, 0, 1, 2, 3, 4, 5, }, - ec_gf8_mul_F7_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0}, + {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_F7 = {8, + { + 6, + 7, + 0, + 1, + 2, + 3, + 4, + 5, + }, + ec_gf8_mul_F7_ops}; static ec_gf_op_t ec_gf8_mul_F8_ops[] = { - { EC_GF_OP_XOR2, 4, 0, 0 }, - { EC_GF_OP_XOR2, 3, 5, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_F8 = { - 8, - { 6, 2, 0, 1, 4, 5, 3, 7, }, - ec_gf8_mul_F8_ops -}; + {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 3, 5, 0}, + {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 1, 6, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 5, 1, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 6, 7, 0}, + {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_F8 = {8, + { + 6, + 2, + 0, + 1, + 4, + 5, + 3, + 7, + }, + ec_gf8_mul_F8_ops}; static ec_gf_op_t ec_gf8_mul_F9_ops[] = { - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 6, 4, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR3, 8, 7, 1 }, - { EC_GF_OP_XOR2, 1, 3, 0 }, - { EC_GF_OP_XOR2, 4, 8, 0 }, - { EC_GF_OP_XOR2, 5, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_F9 = { - 9, - { 4, 1, 7, 6, 0, 3, 5, 2, 8, }, - ec_gf8_mul_F9_ops -}; + {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 0, 5, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 6, 4, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR3, 8, 7, 1}, {EC_GF_OP_XOR2, 1, 3, 0}, + {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 5, 8, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_F9 = {9, + { + 4, + 1, + 7, + 6, + 0, + 3, + 5, + 2, + 8, + }, + ec_gf8_mul_F9_ops}; static ec_gf_op_t ec_gf8_mul_FA_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 7, 2, 0 }, - { EC_GF_OP_XOR2, 1, 5, 0 }, - { EC_GF_OP_XOR2, 3, 7, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 0, 3, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_FA = { - 8, - { 0, 1, 2, 4, 5, 6, 7, 3, }, - ec_gf8_mul_FA_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 0, 7, 0}, + {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 1, 5, 0}, + {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 0, 0}, + {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 3, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_FA = {8, + { + 0, + 1, + 2, + 4, + 5, + 6, + 7, + 3, + }, + ec_gf8_mul_FA_ops}; static ec_gf_op_t ec_gf8_mul_FB_ops[] = { - { EC_GF_OP_XOR2, 1, 0, 0 }, - { EC_GF_OP_XOR2, 2, 1, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 3, 2, 0 }, - { EC_GF_OP_XOR2, 0, 7, 0 }, - { EC_GF_OP_XOR2, 2, 7, 0 }, - { EC_GF_OP_XOR2, 1, 6, 0 }, - { EC_GF_OP_XOR2, 7, 6, 0 }, - { EC_GF_OP_XOR2, 4, 3, 0 }, - { EC_GF_OP_XOR2, 6, 5, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 5, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_FB = { - 8, - { 4, 5, 6, 7, 0, 1, 2, 3, }, - ec_gf8_mul_FB_ops -}; + {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 3, 2, 0}, + {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 2, 7, 0}, + {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 7, 6, 0}, + {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 6, 5, 0}, + {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 5, 4, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_FB = {8, + { + 4, + 5, + 6, + 7, + 0, + 1, + 2, + 3, + }, + ec_gf8_mul_FB_ops}; static ec_gf_op_t ec_gf8_mul_FC_ops[] = { - { EC_GF_OP_XOR2, 7, 0, 0 }, - { EC_GF_OP_XOR2, 7, 4, 0 }, - { EC_GF_OP_XOR2, 5, 1, 0 }, - { EC_GF_OP_COPY, 9, 3, 0 }, - { EC_GF_OP_XOR3, 8, 5, 7 }, - { EC_GF_OP_XOR2, 3, 6, 0 }, - { EC_GF_OP_XOR2, 8, 3, 0 }, - { EC_GF_OP_XOR2, 2, 8, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 3, 4, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 6, 0, 0 }, - { EC_GF_OP_XOR3, 0, 9, 2 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_FC = { - 10, - { 5, 6, 3, 7, 1, 8, 0, 4, 2, 9, }, - ec_gf8_mul_FC_ops -}; + {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 7, 4, 0}, + {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_COPY, 9, 3, 0}, + {EC_GF_OP_XOR3, 8, 5, 7}, {EC_GF_OP_XOR2, 3, 6, 0}, + {EC_GF_OP_XOR2, 8, 3, 0}, {EC_GF_OP_XOR2, 2, 8, 0}, + {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 4, 2, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 3, 4, 0}, + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 6, 0, 0}, + {EC_GF_OP_XOR3, 0, 9, 2}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_FC = {10, + { + 5, + 6, + 3, + 7, + 1, + 8, + 0, + 4, + 2, + 9, + }, + ec_gf8_mul_FC_ops}; static ec_gf_op_t ec_gf8_mul_FD_ops[] = { - { EC_GF_OP_XOR2, 7, 1, 0 }, - { EC_GF_OP_COPY, 8, 7, 0 }, - { EC_GF_OP_XOR2, 5, 0, 0 }, - { EC_GF_OP_XOR2, 7, 5, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 2, 5, 0 }, - { EC_GF_OP_XOR2, 1, 2, 0 }, - { EC_GF_OP_XOR2, 0, 1, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR3, 1, 8, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_FD = { - 9, - { 5, 3, 7, 6, 1, 2, 4, 0, 8, }, - ec_gf8_mul_FD_ops -}; + {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_COPY, 8, 7, 0}, + {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 7, 5, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 4, 7, 0}, + {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 0, 4, 0}, + {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 1, 2, 0}, + {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 6, 1, 0}, + {EC_GF_OP_XOR3, 1, 8, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_FD = {9, + { + 5, + 3, + 7, + 6, + 1, + 2, + 4, + 0, + 8, + }, + ec_gf8_mul_FD_ops}; static ec_gf_op_t ec_gf8_mul_FE_ops[] = { - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_COPY, 8, 2, 0 }, - { EC_GF_OP_XOR2, 2, 4, 0 }, - { EC_GF_OP_XOR2, 6, 2, 0 }, - { EC_GF_OP_XOR2, 8, 5, 0 }, - { EC_GF_OP_XOR2, 5, 6, 0 }, - { EC_GF_OP_XOR2, 6, 1, 0 }, - { EC_GF_OP_XOR2, 0, 6, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 7, 8, 0 }, - { EC_GF_OP_XOR2, 3, 0, 0 }, - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR2, 0, 4, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_FE = { - 9, - { 3, 4, 8, 2, 5, 0, 6, 1, 7, }, - ec_gf8_mul_FE_ops -}; + {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_COPY, 8, 2, 0}, + {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 6, 2, 0}, + {EC_GF_OP_XOR2, 8, 5, 0}, {EC_GF_OP_XOR2, 5, 6, 0}, + {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 0, 6, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_XOR2, 3, 0, 0}, + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_FE = {9, + { + 3, + 4, + 8, + 2, + 5, + 0, + 6, + 1, + 7, + }, + ec_gf8_mul_FE_ops}; static ec_gf_op_t ec_gf8_mul_FF_ops[] = { - { EC_GF_OP_XOR2, 4, 7, 0 }, - { EC_GF_OP_COPY, 9, 0, 0 }, - { EC_GF_OP_COPY, 8, 4, 0 }, - { EC_GF_OP_XOR2, 9, 1, 0 }, - { EC_GF_OP_XOR2, 4, 2, 0 }, - { EC_GF_OP_XOR2, 9, 4, 0 }, - { EC_GF_OP_XOR2, 0, 5, 0 }, - { EC_GF_OP_XOR2, 2, 0, 0 }, - { EC_GF_OP_XOR2, 3, 9, 0 }, - { EC_GF_OP_XOR2, 7, 3, 0 }, - { EC_GF_OP_XOR2, 2, 6, 0 }, - { EC_GF_OP_XOR2, 5, 3, 0 }, - { EC_GF_OP_XOR2, 6, 7, 0 }, - { EC_GF_OP_XOR2, 1, 7, 0 }, - { EC_GF_OP_XOR3, 3, 8, 5 }, - { EC_GF_OP_XOR2, 4, 6, 0 }, - { EC_GF_OP_END, 0, 0, 0 } -}; - -static ec_gf_mul_t ec_gf8_mul_FF = { - 10, - { 6, 5, 0, 1, 2, 4, 9, 3, 7, 8, }, - ec_gf8_mul_FF_ops -}; + {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_COPY, 9, 0, 0}, + {EC_GF_OP_COPY, 8, 4, 0}, {EC_GF_OP_XOR2, 9, 1, 0}, + {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 9, 4, 0}, + {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 2, 0, 0}, + {EC_GF_OP_XOR2, 3, 9, 0}, {EC_GF_OP_XOR2, 7, 3, 0}, + {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 5, 3, 0}, + {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 1, 7, 0}, + {EC_GF_OP_XOR3, 3, 8, 5}, {EC_GF_OP_XOR2, 4, 6, 0}, + {EC_GF_OP_END, 0, 0, 0}}; + +static ec_gf_mul_t ec_gf8_mul_FF = {10, + { + 6, + 5, + 0, + 1, + 2, + 4, + 9, + 3, + 7, + 8, + }, + ec_gf8_mul_FF_ops}; ec_gf_mul_t *ec_gf8_mul[] = { &ec_gf8_mul_00, &ec_gf8_mul_01, &ec_gf8_mul_02, &ec_gf8_mul_03, @@ -5955,5 +5879,4 @@ ec_gf_mul_t *ec_gf8_mul[] = { &ec_gf8_mul_F0, &ec_gf8_mul_F1, &ec_gf8_mul_F2, &ec_gf8_mul_F3, &ec_gf8_mul_F4, &ec_gf8_mul_F5, &ec_gf8_mul_F6, &ec_gf8_mul_F7, &ec_gf8_mul_F8, &ec_gf8_mul_F9, &ec_gf8_mul_FA, &ec_gf8_mul_FB, - &ec_gf8_mul_FC, &ec_gf8_mul_FD, &ec_gf8_mul_FE, &ec_gf8_mul_FF -}; + &ec_gf8_mul_FC, &ec_gf8_mul_FD, &ec_gf8_mul_FE, &ec_gf8_mul_FF}; diff --git a/xlators/cluster/ec/src/ec-heal.c b/xlators/cluster/ec/src/ec-heal.c index 976018c9e29..229c0683d91 100644 --- a/xlators/cluster/ec/src/ec-heal.c +++ b/xlators/cluster/ec/src/ec-heal.c @@ -27,84 +27,104 @@ #include "ec-fops.h" #include "ec-heald.h" -#define EC_COUNT(array, max) ({int __i; int __res = 0; for (__i = 0; __i < max; __i++) if (array[__i]) __res++; __res; }) -#define EC_INTERSECT(dst, src1, src2, max) ({int __i; for (__i = 0; __i < max; __i++) dst[__i] = src1[__i] && src2[__i]; }) -#define EC_ADJUST_SOURCE(source, sources, max) ({int __i; if (sources[source] == 0) {source = -1; for (__i = 0; __i < max; __i++) if (sources[__i]) source = __i; } }) -#define IA_EQUAL(f, s, field) (memcmp (&(f.ia_##field), &(s.ia_##field), sizeof (s.ia_##field)) == 0) -#define EC_REPLIES_ALLOC(replies, numsubvols) do { \ - int __i = 0; \ - replies = alloca0(numsubvols * sizeof (*replies)); \ - for (__i = 0; __i < numsubvols; __i++) \ - INIT_LIST_HEAD (&replies[__i].entries.list); \ - } while (0) - +#define EC_COUNT(array, max) \ + ({ \ + int __i; \ + int __res = 0; \ + for (__i = 0; __i < max; __i++) \ + if (array[__i]) \ + __res++; \ + __res; \ + }) +#define EC_INTERSECT(dst, src1, src2, max) \ + ({ \ + int __i; \ + for (__i = 0; __i < max; __i++) \ + dst[__i] = src1[__i] && src2[__i]; \ + }) +#define EC_ADJUST_SOURCE(source, sources, max) \ + ({ \ + int __i; \ + if (sources[source] == 0) { \ + source = -1; \ + for (__i = 0; __i < max; __i++) \ + if (sources[__i]) \ + source = __i; \ + } \ + }) +#define IA_EQUAL(f, s, field) \ + (memcmp(&(f.ia_##field), &(s.ia_##field), sizeof(s.ia_##field)) == 0) +#define EC_REPLIES_ALLOC(replies, numsubvols) \ + do { \ + int __i = 0; \ + replies = alloca0(numsubvols * sizeof(*replies)); \ + for (__i = 0; __i < numsubvols; __i++) \ + INIT_LIST_HEAD(&replies[__i].entries.list); \ + } while (0) struct ec_name_data { - call_frame_t *frame; - unsigned char *participants; - unsigned char *failed_on; - unsigned char *gfidless; - unsigned char *enoent; - unsigned char *same; - char *name; - inode_t *parent; - default_args_cbk_t *replies; + call_frame_t *frame; + unsigned char *participants; + unsigned char *failed_on; + unsigned char *gfidless; + unsigned char *enoent; + unsigned char *same; + char *name; + inode_t *parent; + default_args_cbk_t *replies; }; -static char *ec_ignore_xattrs[] = { - GF_SELINUX_XATTR_KEY, - QUOTA_SIZE_KEY, - NULL -}; +static char *ec_ignore_xattrs[] = {GF_SELINUX_XATTR_KEY, QUOTA_SIZE_KEY, NULL}; static gf_boolean_t -ec_ignorable_key_match (dict_t *dict, char *key, data_t *val, void *mdata) +ec_ignorable_key_match(dict_t *dict, char *key, data_t *val, void *mdata) { - int i = 0; + int i = 0; - if (!key) - goto out; + if (!key) + goto out; - if (strncmp (key, EC_XATTR_PREFIX, SLEN (EC_XATTR_PREFIX)) == 0) - return _gf_true; + if (strncmp(key, EC_XATTR_PREFIX, SLEN(EC_XATTR_PREFIX)) == 0) + return _gf_true; - for (i = 0; ec_ignore_xattrs[i]; i++) { - if (!strcmp (key, ec_ignore_xattrs[i])) - return _gf_true; - } + for (i = 0; ec_ignore_xattrs[i]; i++) { + if (!strcmp(key, ec_ignore_xattrs[i])) + return _gf_true; + } out: - return _gf_false; + return _gf_false; } static gf_boolean_t -ec_sh_key_match (dict_t *dict, char *key, data_t *val, void *mdata) +ec_sh_key_match(dict_t *dict, char *key, data_t *val, void *mdata) { - return !ec_ignorable_key_match (dict, key, val, mdata); + return !ec_ignorable_key_match(dict, key, val, mdata); } /* FOP: heal */ -uintptr_t ec_heal_check(ec_fop_data_t * fop, uintptr_t * pgood) +uintptr_t +ec_heal_check(ec_fop_data_t *fop, uintptr_t *pgood) { - ec_cbk_data_t * cbk; - uintptr_t mask[2] = { 0, 0 }; + ec_cbk_data_t *cbk; + uintptr_t mask[2] = {0, 0}; list_for_each_entry(cbk, &fop->cbk_list, list) { mask[cbk->op_ret >= 0] |= cbk->mask; } - if (pgood != NULL) - { + if (pgood != NULL) { *pgood = mask[1]; } return mask[0]; } -void ec_heal_update(ec_fop_data_t * fop, int32_t is_open) +void +ec_heal_update(ec_fop_data_t *fop, int32_t is_open) { - ec_heal_t * heal = fop->data; + ec_heal_t *heal = fop->data; uintptr_t good, bad; bad = ec_heal_check(fop, &good); @@ -112,8 +132,7 @@ void ec_heal_update(ec_fop_data_t * fop, int32_t is_open) LOCK(&heal->lock); heal->bad &= ~bad; - if (is_open) - { + if (is_open) { heal->open |= good; } @@ -122,9 +141,10 @@ void ec_heal_update(ec_fop_data_t * fop, int32_t is_open) fop->error = 0; } -void ec_heal_avoid(ec_fop_data_t * fop) +void +ec_heal_avoid(ec_fop_data_t *fop) { - ec_heal_t * heal = fop->data; + ec_heal_t *heal = fop->data; uintptr_t bad; bad = ec_heal_check(fop, NULL); @@ -136,22 +156,24 @@ void ec_heal_avoid(ec_fop_data_t * fop) UNLOCK(&heal->lock); } -int32_t ec_heal_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *xdata) +int32_t +ec_heal_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { ec_fop_data_t *fop = cookie; ec_heal_t *heal = fop->data; if (op_ret >= 0) { - GF_ASSERT(ec_set_inode_size(heal->fop, heal->fd->inode, - heal->total_size)); + GF_ASSERT( + ec_set_inode_size(heal->fop, heal->fd->inode, heal->total_size)); } return 0; } -void ec_heal_lock(ec_heal_t *heal, int32_t type, fd_t *fd, loc_t *loc, - off_t offset, size_t size) +void +ec_heal_lock(ec_heal_t *heal, int32_t type, fd_t *fd, loc_t *loc, off_t offset, + size_t size) { struct gf_flock flock; fop_inodelk_cbk_t cbk = NULL; @@ -176,15 +198,12 @@ void ec_heal_lock(ec_heal_t *heal, int32_t type, fd_t *fd, loc_t *loc, cbk = ec_heal_lock_cbk; } - if (fd != NULL) - { + if (fd != NULL) { ec_finodelk(heal->fop->frame, heal->xl, &heal->fop->frame->root->lk_owner, heal->fop->mask, EC_MINIMUM_ALL, cbk, heal, heal->xl->name, fd, F_SETLKW, &flock, NULL); - } - else - { + } else { ec_inodelk(heal->fop->frame, heal->xl, &heal->fop->frame->root->lk_owner, heal->fop->mask, EC_MINIMUM_ALL, cbk, heal, heal->xl->name, loc, F_SETLKW, @@ -192,28 +211,28 @@ void ec_heal_lock(ec_heal_t *heal, int32_t type, fd_t *fd, loc_t *loc, } } -void ec_heal_inodelk(ec_heal_t *heal, int32_t type, int32_t use_fd, - off_t offset, size_t size) +void +ec_heal_inodelk(ec_heal_t *heal, int32_t type, int32_t use_fd, off_t offset, + size_t size) { ec_heal_lock(heal, type, use_fd ? heal->fd : NULL, &heal->loc, offset, size); } int32_t -ec_heal_xattr_clean (dict_t *dict, char *key, data_t *data, - void *arg) +ec_heal_xattr_clean(dict_t *dict, char *key, data_t *data, void *arg) { - dict_t *base = arg; + dict_t *base = arg; - if (ec_ignorable_key_match (NULL, key, NULL, NULL)) { - dict_del (dict, key); - return 0; - } + if (ec_ignorable_key_match(NULL, key, NULL, NULL)) { + dict_del(dict, key); + return 0; + } - if (dict_get (base, key) != NULL) - dict_del (dict, key); + if (dict_get(base, key) != NULL) + dict_del(dict, key); - return 0; + return 0; } /******************************************************************** @@ -223,68 +242,66 @@ ec_heal_xattr_clean (dict_t *dict, char *key, data_t *data, * *******************************************************************/ void -ec_wind_xattrop_parallel (call_frame_t *frame, xlator_t *subvol, - int child_index, loc_t *loc, - gf_xattrop_flags_t flags, dict_t **dict, - dict_t *xdata) +ec_wind_xattrop_parallel(call_frame_t *frame, xlator_t *subvol, int child_index, + loc_t *loc, gf_xattrop_flags_t flags, dict_t **dict, + dict_t *xdata) { - gf_msg_debug ("EC", 0, "WIND: on child %d ", child_index); - STACK_WIND_COOKIE (frame, cluster_xattrop_cbk, - (void *)(uintptr_t) child_index, - subvol, subvol->fops->xattrop, loc, - flags, dict[child_index], xdata); + gf_msg_debug("EC", 0, "WIND: on child %d ", child_index); + STACK_WIND_COOKIE( + frame, cluster_xattrop_cbk, (void *)(uintptr_t)child_index, subvol, + subvol->fops->xattrop, loc, flags, dict[child_index], xdata); } int32_t -ec_heal_writev_cbk (call_frame_t *frame, void *cookie, - xlator_t *this, int32_t op_ret, int32_t op_errno, - struct iatt *prebuf, struct iatt *postbuf, - dict_t *xdata) +ec_heal_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iatt *prebuf, + struct iatt *postbuf, dict_t *xdata) { ec_fop_data_t *fop = cookie; ec_heal_t *heal = fop->data; ec_trace("WRITE_CBK", cookie, "ret=%d, errno=%d", op_ret, op_errno); - gf_msg_debug (fop->xl->name, 0, "%s: write op_ret %d, op_errno %s" - " at %"PRIu64, uuid_utoa (heal->fd->inode->gfid), op_ret, - strerror (op_errno), heal->offset); + gf_msg_debug(fop->xl->name, 0, + "%s: write op_ret %d, op_errno %s" + " at %" PRIu64, + uuid_utoa(heal->fd->inode->gfid), op_ret, strerror(op_errno), + heal->offset); ec_heal_update(cookie, 0); return 0; } -int32_t ec_heal_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, - struct iovec * vector, int32_t count, - struct iatt * stbuf, struct iobref * iobref, - dict_t * xdata) +int32_t +ec_heal_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iovec *vector, + int32_t count, struct iatt *stbuf, struct iobref *iobref, + dict_t *xdata) { - ec_fop_data_t * fop = cookie; - ec_heal_t * heal = fop->data; + ec_fop_data_t *fop = cookie; + ec_heal_t *heal = fop->data; ec_trace("READ_CBK", fop, "ret=%d, errno=%d", op_ret, op_errno); ec_heal_avoid(fop); - if (op_ret > 0) - { - gf_msg_debug (fop->xl->name, 0, "%s: read succeeded, proceeding " - "to write at %"PRIu64, uuid_utoa (heal->fd->inode->gfid), - heal->offset); + if (op_ret > 0) { + gf_msg_debug(fop->xl->name, 0, + "%s: read succeeded, proceeding " + "to write at %" PRIu64, + uuid_utoa(heal->fd->inode->gfid), heal->offset); ec_writev(heal->fop->frame, heal->xl, heal->bad, EC_MINIMUM_ONE, ec_heal_writev_cbk, heal, heal->fd, vector, count, heal->offset, 0, iobref, NULL); - } - else - { + } else { if (op_ret < 0) { - gf_msg_debug (fop->xl->name, 0, "%s: read failed %s, failing " - "to heal block at %"PRIu64, - uuid_utoa (heal->fd->inode->gfid), strerror (op_errno), - heal->offset); - heal->bad = 0; + gf_msg_debug(fop->xl->name, 0, + "%s: read failed %s, failing " + "to heal block at %" PRIu64, + uuid_utoa(heal->fd->inode->gfid), strerror(op_errno), + heal->offset); + heal->bad = 0; } heal->done = 1; } @@ -292,31 +309,31 @@ int32_t ec_heal_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this, return 0; } -void ec_heal_data_block(ec_heal_t *heal) +void +ec_heal_data_block(ec_heal_t *heal) { ec_trace("DATA", heal->fop, "good=%lX, bad=%lX", heal->good, heal->bad); if ((heal->good != 0) && (heal->bad != 0) && - (heal->iatt.ia_type == IA_IFREG)) - { + (heal->iatt.ia_type == IA_IFREG)) { ec_readv(heal->fop->frame, heal->xl, heal->good, EC_MINIMUM_MIN, - ec_heal_readv_cbk, heal, heal->fd, heal->size, heal->offset, - 0, NULL); + ec_heal_readv_cbk, heal, heal->fd, heal->size, heal->offset, 0, + NULL); } } /* FOP: fheal */ -void ec_fheal(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fheal_cbk_t func, void * data, fd_t * fd, - int32_t partial, dict_t *xdata) +void +ec_fheal(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_fheal_cbk_t func, void *data, fd_t *fd, int32_t partial, + dict_t *xdata) { - ec_fd_t * ctx = ec_fd_get(fd, this); + ec_fd_t *ctx = ec_fd_get(fd, this); - if (ctx != NULL) - { - gf_msg_trace ("ec", 0, "FHEAL ctx: flags=%X, open=%lX", ctx->flags, - ctx->open); + if (ctx != NULL) { + gf_msg_trace("ec", 0, "FHEAL ctx: flags=%X, open=%lX", ctx->flags, + ctx->open); ec_heal(frame, this, target, minimum, func, data, &ctx->loc, partial, xdata); } @@ -324,1624 +341,1601 @@ void ec_fheal(call_frame_t * frame, xlator_t * this, uintptr_t target, /* Common heal code */ void -ec_mask_to_char_array (uintptr_t mask, unsigned char *array, int numsubvols) +ec_mask_to_char_array(uintptr_t mask, unsigned char *array, int numsubvols) { - int i = 0; + int i = 0; - for (i = 0; i < numsubvols; i++) - array[i] = ((mask >> i) & 1); + for (i = 0; i < numsubvols; i++) + array[i] = ((mask >> i) & 1); } uintptr_t -ec_char_array_to_mask (unsigned char *array, int numsubvols) +ec_char_array_to_mask(unsigned char *array, int numsubvols) { - int i = 0; - uintptr_t mask = 0; + int i = 0; + uintptr_t mask = 0; - if (array == NULL) - goto out; + if (array == NULL) + goto out; - for (i = 0; i < numsubvols; i++) - if (array[i]) - mask |= (1ULL<<i); + for (i = 0; i < numsubvols; i++) + if (array[i]) + mask |= (1ULL << i); out: - return mask; + return mask; } int -ec_heal_entry_find_direction (ec_t *ec, default_args_cbk_t *replies, - uint64_t *versions, uint64_t *dirty, - unsigned char *sources, unsigned char *healed_sinks) +ec_heal_entry_find_direction(ec_t *ec, default_args_cbk_t *replies, + uint64_t *versions, uint64_t *dirty, + unsigned char *sources, + unsigned char *healed_sinks) { - uint64_t xattr[EC_VERSION_SIZE] = {0}; - int source = -1; - uint64_t max_version = 0; - int ret = 0; - int i = 0; + uint64_t xattr[EC_VERSION_SIZE] = {0}; + int source = -1; + uint64_t max_version = 0; + int ret = 0; + int i = 0; - for (i = 0; i < ec->nodes; i++) { - if (!replies[i].valid) - continue; - - if (replies[i].op_ret == -1) - continue; - - if (source == -1) - source = i; - - ret = ec_dict_get_array (replies[i].xdata, EC_XATTR_VERSION, - xattr, EC_VERSION_SIZE); - if (ret == 0) { - versions[i] = xattr[EC_DATA_TXN]; - if (max_version < versions[i]) { - max_version = versions[i]; - source = i; - } - } + for (i = 0; i < ec->nodes; i++) { + if (!replies[i].valid) + continue; - memset (xattr, 0, sizeof(xattr)); - ret = ec_dict_get_array (replies[i].xdata, EC_XATTR_DIRTY, - xattr, EC_VERSION_SIZE); - if (ret == 0) { - dirty[i] = xattr[EC_DATA_TXN]; - } + if (replies[i].op_ret == -1) + continue; + + if (source == -1) + source = i; + + ret = ec_dict_get_array(replies[i].xdata, EC_XATTR_VERSION, xattr, + EC_VERSION_SIZE); + if (ret == 0) { + versions[i] = xattr[EC_DATA_TXN]; + if (max_version < versions[i]) { + max_version = versions[i]; + source = i; + } } - if (source < 0) - goto out; + memset(xattr, 0, sizeof(xattr)); + ret = ec_dict_get_array(replies[i].xdata, EC_XATTR_DIRTY, xattr, + EC_VERSION_SIZE); + if (ret == 0) { + dirty[i] = xattr[EC_DATA_TXN]; + } + } - for (i = 0; i < ec->nodes; i++) { - if (!replies[i].valid) - continue; + if (source < 0) + goto out; - if (replies[i].op_ret == -1) - continue; + for (i = 0; i < ec->nodes; i++) { + if (!replies[i].valid) + continue; - if (versions[i] == versions[source]) - sources[i] = 1; - else - healed_sinks[i] = 1; - } + if (replies[i].op_ret == -1) + continue; + + if (versions[i] == versions[source]) + sources[i] = 1; + else + healed_sinks[i] = 1; + } out: - return source; + return source; } int -ec_adjust_versions (call_frame_t *frame, ec_t *ec, ec_txn_t type, - inode_t *inode, int source, unsigned char *sources, - unsigned char *healed_sinks, uint64_t *versions, - uint64_t *dirty) -{ - int i = 0; - int ret = 0; - int call_count = 0; - dict_t **xattr = NULL; - int op_ret = 0; - loc_t loc = {0}; - gf_boolean_t erase_dirty = _gf_false; - uint64_t *versions_xattr = NULL; - uint64_t *dirty_xattr = NULL; - uint64_t allzero[2] = {0}; - unsigned char *on = NULL; - unsigned char *output = NULL; - default_args_cbk_t *replies = NULL; - - /* Allocate the required memory */ - loc.inode = inode_ref (inode); - gf_uuid_copy (loc.gfid, inode->gfid); - on = alloca0 (ec->nodes); - output = alloca0 (ec->nodes); - EC_REPLIES_ALLOC (replies, ec->nodes); - xattr = GF_CALLOC (ec->nodes, sizeof (*xattr), gf_common_mt_pointer); - if (!xattr) { - op_ret = -ENOMEM; - goto out; - } - for (i = 0; i < ec->nodes; i++) { - xattr[i] = dict_new (); - if (!xattr[i]) { - op_ret = -ENOMEM; - goto out; - } +ec_adjust_versions(call_frame_t *frame, ec_t *ec, ec_txn_t type, inode_t *inode, + int source, unsigned char *sources, + unsigned char *healed_sinks, uint64_t *versions, + uint64_t *dirty) +{ + int i = 0; + int ret = 0; + int call_count = 0; + dict_t **xattr = NULL; + int op_ret = 0; + loc_t loc = {0}; + gf_boolean_t erase_dirty = _gf_false; + uint64_t *versions_xattr = NULL; + uint64_t *dirty_xattr = NULL; + uint64_t allzero[2] = {0}; + unsigned char *on = NULL; + unsigned char *output = NULL; + default_args_cbk_t *replies = NULL; + + /* Allocate the required memory */ + loc.inode = inode_ref(inode); + gf_uuid_copy(loc.gfid, inode->gfid); + on = alloca0(ec->nodes); + output = alloca0(ec->nodes); + EC_REPLIES_ALLOC(replies, ec->nodes); + xattr = GF_CALLOC(ec->nodes, sizeof(*xattr), gf_common_mt_pointer); + if (!xattr) { + op_ret = -ENOMEM; + goto out; + } + for (i = 0; i < ec->nodes; i++) { + xattr[i] = dict_new(); + if (!xattr[i]) { + op_ret = -ENOMEM; + goto out; } + } - /* dirty xattr represents if the file/dir needs heal. Unless all the - * copies are healed, don't erase it */ - if (EC_COUNT (sources, ec->nodes) + - EC_COUNT (healed_sinks, ec->nodes) == ec->nodes) - erase_dirty = _gf_true; - else - op_ret = -ENOTCONN; - - /* Populate the xattr array */ - for (i = 0; i < ec->nodes; i++) { - if (!sources[i] && !healed_sinks[i]) - continue; - versions_xattr = GF_CALLOC (EC_VERSION_SIZE, - sizeof(*versions_xattr), - gf_common_mt_pointer); - if (!versions_xattr) { - op_ret = -ENOMEM; - continue; - } - - versions_xattr[type] = hton64(versions[source] - versions[i]); - ret = dict_set_bin (xattr[i], EC_XATTR_VERSION, - versions_xattr, - (sizeof (*versions_xattr) * EC_VERSION_SIZE) - ); - if (ret < 0) { - op_ret = -ENOMEM; - continue; - } - - if (erase_dirty) { - dirty_xattr = GF_CALLOC (EC_VERSION_SIZE, - sizeof(*dirty_xattr), - gf_common_mt_pointer); - if (!dirty_xattr) { - op_ret = -ENOMEM; - continue; - } - - dirty_xattr[type] = hton64(-dirty[i]); - ret = dict_set_bin (xattr[i], EC_XATTR_DIRTY, - dirty_xattr, - (sizeof(*dirty_xattr) * - EC_VERSION_SIZE) - ); - if (ret < 0) { - op_ret = -ENOMEM; - continue; - } - } + /* dirty xattr represents if the file/dir needs heal. Unless all the + * copies are healed, don't erase it */ + if (EC_COUNT(sources, ec->nodes) + EC_COUNT(healed_sinks, ec->nodes) == + ec->nodes) + erase_dirty = _gf_true; + else + op_ret = -ENOTCONN; + + /* Populate the xattr array */ + for (i = 0; i < ec->nodes; i++) { + if (!sources[i] && !healed_sinks[i]) + continue; + versions_xattr = GF_CALLOC(EC_VERSION_SIZE, sizeof(*versions_xattr), + gf_common_mt_pointer); + if (!versions_xattr) { + op_ret = -ENOMEM; + continue; + } + + versions_xattr[type] = hton64(versions[source] - versions[i]); + ret = dict_set_bin(xattr[i], EC_XATTR_VERSION, versions_xattr, + (sizeof(*versions_xattr) * EC_VERSION_SIZE)); + if (ret < 0) { + op_ret = -ENOMEM; + continue; + } - if (memcmp (versions_xattr, allzero, - (sizeof(*versions_xattr) * EC_VERSION_SIZE)) == 0) { + if (erase_dirty) { + dirty_xattr = GF_CALLOC(EC_VERSION_SIZE, sizeof(*dirty_xattr), + gf_common_mt_pointer); + if (!dirty_xattr) { + op_ret = -ENOMEM; + continue; + } - if (!erase_dirty) { - continue; - } + dirty_xattr[type] = hton64(-dirty[i]); + ret = dict_set_bin(xattr[i], EC_XATTR_DIRTY, dirty_xattr, + (sizeof(*dirty_xattr) * EC_VERSION_SIZE)); + if (ret < 0) { + op_ret = -ENOMEM; + continue; + } + } - if (memcmp (dirty_xattr, allzero, (sizeof (*dirty_xattr) - * EC_VERSION_SIZE)) == 0) { - continue; - } - } + if (memcmp(versions_xattr, allzero, + (sizeof(*versions_xattr) * EC_VERSION_SIZE)) == 0) { + if (!erase_dirty) { + continue; + } - on[i] = 1; - call_count++; + if (memcmp(dirty_xattr, allzero, + (sizeof(*dirty_xattr) * EC_VERSION_SIZE)) == 0) { + continue; + } } - /* Update the bricks with xattr */ - if (call_count) { - PARALLEL_FOP_ONLIST (ec->xl_list, on, ec->nodes, replies, - frame, ec_wind_xattrop_parallel, - &loc, GF_XATTROP_ADD_ARRAY64, xattr, NULL); - ret = cluster_fop_success_fill (replies, ec->nodes, output); - } + on[i] = 1; + call_count++; + } - if (ret < call_count) { - op_ret = -ENOTCONN; - goto out; - } + /* Update the bricks with xattr */ + if (call_count) { + PARALLEL_FOP_ONLIST(ec->xl_list, on, ec->nodes, replies, frame, + ec_wind_xattrop_parallel, &loc, + GF_XATTROP_ADD_ARRAY64, xattr, NULL); + ret = cluster_fop_success_fill(replies, ec->nodes, output); + } + + if (ret < call_count) { + op_ret = -ENOTCONN; + goto out; + } out: - /* Cleanup */ - if (xattr) { - for (i = 0; i < ec->nodes; i++) { - if (xattr[i]) - dict_unref (xattr[i]); - } - GF_FREE (xattr); + /* Cleanup */ + if (xattr) { + for (i = 0; i < ec->nodes; i++) { + if (xattr[i]) + dict_unref(xattr[i]); } - cluster_replies_wipe (replies, ec->nodes); - loc_wipe (&loc); - return op_ret; + GF_FREE(xattr); + } + cluster_replies_wipe(replies, ec->nodes); + loc_wipe(&loc); + return op_ret; } int -ec_heal_metadata_find_direction (ec_t *ec, default_args_cbk_t *replies, - uint64_t *versions, uint64_t *dirty, - unsigned char *sources, unsigned char *healed_sinks) -{ - uint64_t xattr[EC_VERSION_SIZE] = {0}; - uint64_t max_version = 0; - int same_count = 0; - int max_same_count = 0; - int same_source = -1; - int ret = 0; - int i = 0; - int j = 0; - int *groups = NULL; - struct iatt source_ia = {0}; - struct iatt child_ia = {0}; - - groups = alloca0 (ec->nodes * sizeof(*groups)); - for (i = 0; i < ec->nodes; i++) - groups[i] = -1; - - for (i = 0; i < ec->nodes; i++) { - if (!replies[i].valid) - continue; - if (replies[i].op_ret < 0) - continue; - ret = ec_dict_get_array (replies[i].xdata, EC_XATTR_VERSION, - xattr, EC_VERSION_SIZE); - if (ret == 0) { - versions[i] = xattr[EC_METADATA_TXN]; - } - - memset (xattr, 0, sizeof (xattr)); - ret = ec_dict_get_array (replies[i].xdata, EC_XATTR_DIRTY, - xattr, EC_VERSION_SIZE); - if (ret == 0) { - dirty[i] = xattr[EC_METADATA_TXN]; - } - if (groups[i] >= 0) /*Already part of group*/ - continue; - groups[i] = i; - same_count = 1; - source_ia = replies[i].stat; - for (j = i + 1; j < ec->nodes; j++) { - if (!replies[j].valid || replies[j].op_ret < 0) - continue; - child_ia = replies[j].stat; - if (!IA_EQUAL(source_ia, child_ia, gfid) || - !IA_EQUAL(source_ia, child_ia, type) || - !IA_EQUAL(source_ia, child_ia, prot) || - !IA_EQUAL(source_ia, child_ia, uid) || - !IA_EQUAL(source_ia, child_ia, gid)) - continue; - if (!are_dicts_equal(replies[i].xdata, replies[j].xdata, - ec_sh_key_match, NULL)) - continue; - groups[j] = i; - same_count++; - } - - if (max_same_count < same_count) { - max_same_count = same_count; - same_source = i; - } +ec_heal_metadata_find_direction(ec_t *ec, default_args_cbk_t *replies, + uint64_t *versions, uint64_t *dirty, + unsigned char *sources, + unsigned char *healed_sinks) +{ + uint64_t xattr[EC_VERSION_SIZE] = {0}; + uint64_t max_version = 0; + int same_count = 0; + int max_same_count = 0; + int same_source = -1; + int ret = 0; + int i = 0; + int j = 0; + int *groups = NULL; + struct iatt source_ia = {0}; + struct iatt child_ia = {0}; + + groups = alloca0(ec->nodes * sizeof(*groups)); + for (i = 0; i < ec->nodes; i++) + groups[i] = -1; + + for (i = 0; i < ec->nodes; i++) { + if (!replies[i].valid) + continue; + if (replies[i].op_ret < 0) + continue; + ret = ec_dict_get_array(replies[i].xdata, EC_XATTR_VERSION, xattr, + EC_VERSION_SIZE); + if (ret == 0) { + versions[i] = xattr[EC_METADATA_TXN]; } - if (max_same_count < ec->fragments) { - ret = -EIO; - goto out; + memset(xattr, 0, sizeof(xattr)); + ret = ec_dict_get_array(replies[i].xdata, EC_XATTR_DIRTY, xattr, + EC_VERSION_SIZE); + if (ret == 0) { + dirty[i] = xattr[EC_METADATA_TXN]; + } + if (groups[i] >= 0) /*Already part of group*/ + continue; + groups[i] = i; + same_count = 1; + source_ia = replies[i].stat; + for (j = i + 1; j < ec->nodes; j++) { + if (!replies[j].valid || replies[j].op_ret < 0) + continue; + child_ia = replies[j].stat; + if (!IA_EQUAL(source_ia, child_ia, gfid) || + !IA_EQUAL(source_ia, child_ia, type) || + !IA_EQUAL(source_ia, child_ia, prot) || + !IA_EQUAL(source_ia, child_ia, uid) || + !IA_EQUAL(source_ia, child_ia, gid)) + continue; + if (!are_dicts_equal(replies[i].xdata, replies[j].xdata, + ec_sh_key_match, NULL)) + continue; + groups[j] = i; + same_count++; + } + + if (max_same_count < same_count) { + max_same_count = same_count; + same_source = i; } + } - for (i = 0; i < ec->nodes; i++) { - if (groups[i] == groups[same_source]) - sources[i] = 1; - else if (replies[i].valid && replies[i].op_ret >= 0) - healed_sinks[i] = 1; - } - for (i = 0; i < ec->nodes; i++) { - if (sources[i] && (versions[i] > max_version)) { - same_source = i; - max_version = versions[i]; - } + if (max_same_count < ec->fragments) { + ret = -EIO; + goto out; + } + + for (i = 0; i < ec->nodes; i++) { + if (groups[i] == groups[same_source]) + sources[i] = 1; + else if (replies[i].valid && replies[i].op_ret >= 0) + healed_sinks[i] = 1; + } + for (i = 0; i < ec->nodes; i++) { + if (sources[i] && (versions[i] > max_version)) { + same_source = i; + max_version = versions[i]; } - ret = same_source; + } + ret = same_source; out: - return ret; + return ret; } int -__ec_heal_metadata_prepare (call_frame_t *frame, ec_t *ec, inode_t *inode, - unsigned char *locked_on, default_args_cbk_t *replies, - uint64_t *versions, uint64_t *dirty, unsigned char *sources, - unsigned char *healed_sinks) -{ - loc_t loc = {0}; - unsigned char *output = NULL; - unsigned char *lookup_on = NULL; - int ret = 0; - int source = 0; - default_args_cbk_t *greplies = NULL; - int i = 0; - EC_REPLIES_ALLOC (greplies, ec->nodes); - - loc.inode = inode_ref (inode); - gf_uuid_copy (loc.gfid, inode->gfid); - output = alloca0 (ec->nodes); - lookup_on = alloca0 (ec->nodes); - ret = cluster_lookup (ec->xl_list, locked_on, ec->nodes, replies, - output, frame, ec->xl, &loc, NULL); - if (ret <= ec->fragments) { - ret = -ENOTCONN; - goto out; - } +__ec_heal_metadata_prepare(call_frame_t *frame, ec_t *ec, inode_t *inode, + unsigned char *locked_on, + default_args_cbk_t *replies, uint64_t *versions, + uint64_t *dirty, unsigned char *sources, + unsigned char *healed_sinks) +{ + loc_t loc = {0}; + unsigned char *output = NULL; + unsigned char *lookup_on = NULL; + int ret = 0; + int source = 0; + default_args_cbk_t *greplies = NULL; + int i = 0; + EC_REPLIES_ALLOC(greplies, ec->nodes); + + loc.inode = inode_ref(inode); + gf_uuid_copy(loc.gfid, inode->gfid); + output = alloca0(ec->nodes); + lookup_on = alloca0(ec->nodes); + ret = cluster_lookup(ec->xl_list, locked_on, ec->nodes, replies, output, + frame, ec->xl, &loc, NULL); + if (ret <= ec->fragments) { + ret = -ENOTCONN; + goto out; + } - memcpy (lookup_on, output, ec->nodes); - /*Use getxattr to get the filtered xattrs which filter internal xattrs*/ - ret = cluster_getxattr (ec->xl_list, lookup_on, ec->nodes, greplies, - output, frame, ec->xl, &loc, NULL, NULL); - for (i = 0; i < ec->nodes; i++) { - if (lookup_on[i] && !output[i]) { - replies[i].valid = 0; - continue; - } - if (replies[i].xdata) { - dict_unref (replies[i].xdata); - replies[i].xdata = NULL; - if (greplies[i].xattr) - replies[i].xdata = dict_ref (greplies[i].xattr); - } + memcpy(lookup_on, output, ec->nodes); + /*Use getxattr to get the filtered xattrs which filter internal xattrs*/ + ret = cluster_getxattr(ec->xl_list, lookup_on, ec->nodes, greplies, output, + frame, ec->xl, &loc, NULL, NULL); + for (i = 0; i < ec->nodes; i++) { + if (lookup_on[i] && !output[i]) { + replies[i].valid = 0; + continue; + } + if (replies[i].xdata) { + dict_unref(replies[i].xdata); + replies[i].xdata = NULL; + if (greplies[i].xattr) + replies[i].xdata = dict_ref(greplies[i].xattr); } + } - source = ec_heal_metadata_find_direction (ec, replies, versions, - dirty, sources, healed_sinks); - if (source < 0) { - ret = -EIO; - goto out; - } - ret = source; + source = ec_heal_metadata_find_direction(ec, replies, versions, dirty, + sources, healed_sinks); + if (source < 0) { + ret = -EIO; + goto out; + } + ret = source; out: - cluster_replies_wipe (greplies, ec->nodes); - loc_wipe (&loc); - return ret; + cluster_replies_wipe(greplies, ec->nodes); + loc_wipe(&loc); + return ret; } /* Metadata heal */ int -__ec_removexattr_sinks (call_frame_t *frame, ec_t *ec, inode_t *inode, - int source, unsigned char *sources, - unsigned char *healed_sinks, - default_args_cbk_t *replies) -{ - int i = 0; - int ret = 0; - loc_t loc = {0}; - - loc.inode = inode_ref (inode); - gf_uuid_copy (loc.gfid, inode->gfid); - - for (i = 0; i < ec->nodes; i++) { - if (i == source) - continue; - if (!sources[i] && !healed_sinks[i]) - continue; - ret = dict_foreach (replies[i].xdata, ec_heal_xattr_clean, - replies[source].xdata); - if (ret < 0) { - sources[i] = 0; - healed_sinks[i] = 0; - continue; - } - - if (replies[i].xdata->count == 0) { - continue; - } else if (sources[i]) { - /* This can happen if setxattr/removexattr succeeds on - * the bricks but fails to update the version. This - * will make sure that the xattrs are made equal after - * heal*/ - sources[i] = 0; - healed_sinks[i] = 1; - } +__ec_removexattr_sinks(call_frame_t *frame, ec_t *ec, inode_t *inode, + int source, unsigned char *sources, + unsigned char *healed_sinks, default_args_cbk_t *replies) +{ + int i = 0; + int ret = 0; + loc_t loc = {0}; + + loc.inode = inode_ref(inode); + gf_uuid_copy(loc.gfid, inode->gfid); + + for (i = 0; i < ec->nodes; i++) { + if (i == source) + continue; + if (!sources[i] && !healed_sinks[i]) + continue; + ret = dict_foreach(replies[i].xdata, ec_heal_xattr_clean, + replies[source].xdata); + if (ret < 0) { + sources[i] = 0; + healed_sinks[i] = 0; + continue; + } - ret = syncop_removexattr (ec->xl_list[i], &loc, "", - replies[i].xdata, NULL); - if (ret < 0) - healed_sinks[i] = 0; + if (replies[i].xdata->count == 0) { + continue; + } else if (sources[i]) { + /* This can happen if setxattr/removexattr succeeds on + * the bricks but fails to update the version. This + * will make sure that the xattrs are made equal after + * heal*/ + sources[i] = 0; + healed_sinks[i] = 1; } - loc_wipe (&loc); - if (EC_COUNT (healed_sinks, ec->nodes) == 0) - return -ENOTCONN; - return 0; + ret = syncop_removexattr(ec->xl_list[i], &loc, "", replies[i].xdata, + NULL); + if (ret < 0) + healed_sinks[i] = 0; + } + + loc_wipe(&loc); + if (EC_COUNT(healed_sinks, ec->nodes) == 0) + return -ENOTCONN; + return 0; } int -__ec_heal_metadata (call_frame_t *frame, ec_t *ec, inode_t *inode, - unsigned char *locked_on, unsigned char *sources, - unsigned char *healed_sinks) -{ - loc_t loc = {0}; - int ret = 0; - int source = 0; - default_args_cbk_t *replies = NULL; - default_args_cbk_t *sreplies = NULL; - uint64_t *versions = NULL; - uint64_t *dirty = NULL; - unsigned char *output = NULL; - dict_t *source_dict = NULL; - struct iatt source_buf = {0}; - - EC_REPLIES_ALLOC (replies, ec->nodes); - EC_REPLIES_ALLOC (sreplies, ec->nodes); - - loc.inode = inode_ref (inode); - gf_uuid_copy (loc.gfid, inode->gfid); - output = alloca0 (ec->nodes); - versions = alloca0 (ec->nodes * sizeof (*versions)); - dirty = alloca0 (ec->nodes * sizeof (*dirty)); - source = __ec_heal_metadata_prepare (frame, ec, inode, locked_on, replies, - versions, dirty, sources, healed_sinks); - if (source < 0) { - ret = -EIO; - goto out; - } +__ec_heal_metadata(call_frame_t *frame, ec_t *ec, inode_t *inode, + unsigned char *locked_on, unsigned char *sources, + unsigned char *healed_sinks) +{ + loc_t loc = {0}; + int ret = 0; + int source = 0; + default_args_cbk_t *replies = NULL; + default_args_cbk_t *sreplies = NULL; + uint64_t *versions = NULL; + uint64_t *dirty = NULL; + unsigned char *output = NULL; + dict_t *source_dict = NULL; + struct iatt source_buf = {0}; + + EC_REPLIES_ALLOC(replies, ec->nodes); + EC_REPLIES_ALLOC(sreplies, ec->nodes); + + loc.inode = inode_ref(inode); + gf_uuid_copy(loc.gfid, inode->gfid); + output = alloca0(ec->nodes); + versions = alloca0(ec->nodes * sizeof(*versions)); + dirty = alloca0(ec->nodes * sizeof(*dirty)); + source = __ec_heal_metadata_prepare(frame, ec, inode, locked_on, replies, + versions, dirty, sources, healed_sinks); + if (source < 0) { + ret = -EIO; + goto out; + } - if ((EC_COUNT (sources, ec->nodes) == ec->nodes) || - (EC_COUNT (healed_sinks, ec->nodes) == 0)) { - ret = 0; - goto erase_dirty; - } + if ((EC_COUNT(sources, ec->nodes) == ec->nodes) || + (EC_COUNT(healed_sinks, ec->nodes) == 0)) { + ret = 0; + goto erase_dirty; + } - source_buf = replies[source].stat; - ret = cluster_setattr (ec->xl_list, healed_sinks, ec->nodes, sreplies, - output, frame, ec->xl, &loc, - &source_buf, GF_SET_ATTR_MODE | - GF_SET_ATTR_UID | GF_SET_ATTR_GID, NULL); - /*In case the operation fails on some of the subvols*/ - memcpy (healed_sinks, output, ec->nodes); - if (EC_COUNT (healed_sinks, ec->nodes) == 0) { - ret = -ENOTCONN; - goto out; - } + source_buf = replies[source].stat; + ret = cluster_setattr(ec->xl_list, healed_sinks, ec->nodes, sreplies, + output, frame, ec->xl, &loc, &source_buf, + GF_SET_ATTR_MODE | GF_SET_ATTR_UID | GF_SET_ATTR_GID, + NULL); + /*In case the operation fails on some of the subvols*/ + memcpy(healed_sinks, output, ec->nodes); + if (EC_COUNT(healed_sinks, ec->nodes) == 0) { + ret = -ENOTCONN; + goto out; + } - ret = __ec_removexattr_sinks (frame, ec, inode, source, sources, - healed_sinks, replies); - if (ret < 0) - goto out; + ret = __ec_removexattr_sinks(frame, ec, inode, source, sources, + healed_sinks, replies); + if (ret < 0) + goto out; - source_dict = dict_ref (replies[source].xdata); - if (dict_foreach_match (source_dict, ec_ignorable_key_match, NULL, - dict_remove_foreach_fn, NULL) == -1) { - ret = -ENOMEM; - goto out; - } + source_dict = dict_ref(replies[source].xdata); + if (dict_foreach_match(source_dict, ec_ignorable_key_match, NULL, + dict_remove_foreach_fn, NULL) == -1) { + ret = -ENOMEM; + goto out; + } - ret = cluster_setxattr (ec->xl_list, healed_sinks, ec->nodes, - replies, output, frame, ec->xl, &loc, - source_dict, 0, NULL); + ret = cluster_setxattr(ec->xl_list, healed_sinks, ec->nodes, replies, + output, frame, ec->xl, &loc, source_dict, 0, NULL); - EC_INTERSECT (healed_sinks, healed_sinks, output, ec->nodes); - if (EC_COUNT (healed_sinks, ec->nodes) == 0) { - ret = -ENOTCONN; - goto out; - } + EC_INTERSECT(healed_sinks, healed_sinks, output, ec->nodes); + if (EC_COUNT(healed_sinks, ec->nodes) == 0) { + ret = -ENOTCONN; + goto out; + } erase_dirty: - ret = ec_adjust_versions (frame, ec, EC_METADATA_TXN, inode, source, - sources, healed_sinks, versions, dirty); + ret = ec_adjust_versions(frame, ec, EC_METADATA_TXN, inode, source, sources, + healed_sinks, versions, dirty); out: - if (source_dict) - dict_unref (source_dict); + if (source_dict) + dict_unref(source_dict); - loc_wipe (&loc); - cluster_replies_wipe (replies, ec->nodes); - cluster_replies_wipe (sreplies, ec->nodes); - return ret; + loc_wipe(&loc); + cluster_replies_wipe(replies, ec->nodes); + cluster_replies_wipe(sreplies, ec->nodes); + return ret; } int -ec_heal_metadata (call_frame_t *frame, ec_t *ec, inode_t *inode, - unsigned char *sources, unsigned char *healed_sinks) -{ - unsigned char *locked_on = NULL; - unsigned char *up_subvols = NULL; - unsigned char *output = NULL; - int ret = 0; - default_args_cbk_t *replies = NULL; - - EC_REPLIES_ALLOC (replies, ec->nodes); - locked_on = alloca0(ec->nodes); - output = alloca0(ec->nodes); - up_subvols = alloca0(ec->nodes); - ec_mask_to_char_array (ec->xl_up, up_subvols, ec->nodes); - ret = cluster_inodelk (ec->xl_list, up_subvols, ec->nodes, replies, - locked_on, frame, ec->xl, ec->xl->name, inode, 0, - 0); - { - if (ret <= ec->fragments) { - gf_msg_debug (ec->xl->name, 0, "%s: Skipping heal " - "as only %d number of subvolumes could " - "be locked", uuid_utoa (inode->gfid), ret); - ret = -ENOTCONN; - goto unlock; - } - ret = __ec_heal_metadata (frame, ec, inode, locked_on, sources, - healed_sinks); - } +ec_heal_metadata(call_frame_t *frame, ec_t *ec, inode_t *inode, + unsigned char *sources, unsigned char *healed_sinks) +{ + unsigned char *locked_on = NULL; + unsigned char *up_subvols = NULL; + unsigned char *output = NULL; + int ret = 0; + default_args_cbk_t *replies = NULL; + + EC_REPLIES_ALLOC(replies, ec->nodes); + locked_on = alloca0(ec->nodes); + output = alloca0(ec->nodes); + up_subvols = alloca0(ec->nodes); + ec_mask_to_char_array(ec->xl_up, up_subvols, ec->nodes); + ret = cluster_inodelk(ec->xl_list, up_subvols, ec->nodes, replies, + locked_on, frame, ec->xl, ec->xl->name, inode, 0, 0); + { + if (ret <= ec->fragments) { + gf_msg_debug(ec->xl->name, 0, + "%s: Skipping heal " + "as only %d number of subvolumes could " + "be locked", + uuid_utoa(inode->gfid), ret); + ret = -ENOTCONN; + goto unlock; + } + ret = __ec_heal_metadata(frame, ec, inode, locked_on, sources, + healed_sinks); + } unlock: - cluster_uninodelk (ec->xl_list, locked_on, ec->nodes, replies, output, - frame, ec->xl, ec->xl->name, inode, 0, 0); - cluster_replies_wipe (replies, ec->nodes); - return ret; + cluster_uninodelk(ec->xl_list, locked_on, ec->nodes, replies, output, frame, + ec->xl, ec->xl->name, inode, 0, 0); + cluster_replies_wipe(replies, ec->nodes); + return ret; } /*entry heal*/ int -__ec_heal_entry_prepare (call_frame_t *frame, ec_t *ec, inode_t *inode, - unsigned char *locked_on, uint64_t *versions, - uint64_t *dirty, unsigned char *sources, - unsigned char *healed_sinks) -{ - loc_t loc = {0}; - int source = 0; - int ret = 0; - default_args_cbk_t *replies = NULL; - unsigned char *output = NULL; - dict_t *xdata = NULL; - - EC_REPLIES_ALLOC (replies, ec->nodes); - - loc.inode = inode_ref (inode); - gf_uuid_copy (loc.gfid, inode->gfid); - xdata = dict_new (); - if (!xdata) { - ret = -ENOMEM; - goto out; - } +__ec_heal_entry_prepare(call_frame_t *frame, ec_t *ec, inode_t *inode, + unsigned char *locked_on, uint64_t *versions, + uint64_t *dirty, unsigned char *sources, + unsigned char *healed_sinks) +{ + loc_t loc = {0}; + int source = 0; + int ret = 0; + default_args_cbk_t *replies = NULL; + unsigned char *output = NULL; + dict_t *xdata = NULL; + + EC_REPLIES_ALLOC(replies, ec->nodes); + + loc.inode = inode_ref(inode); + gf_uuid_copy(loc.gfid, inode->gfid); + xdata = dict_new(); + if (!xdata) { + ret = -ENOMEM; + goto out; + } - if (dict_set_uint64(xdata, EC_XATTR_VERSION, 0) || - dict_set_uint64(xdata, EC_XATTR_DIRTY, 0)) { - ret = -ENOMEM; - goto out; - } + if (dict_set_uint64(xdata, EC_XATTR_VERSION, 0) || + dict_set_uint64(xdata, EC_XATTR_DIRTY, 0)) { + ret = -ENOMEM; + goto out; + } - output = alloca0 (ec->nodes); - ret = cluster_lookup (ec->xl_list, locked_on, ec->nodes, replies, - output, frame, ec->xl, &loc, xdata); - if (ret <= ec->fragments) { - ret = -ENOTCONN; - goto out; - } + output = alloca0(ec->nodes); + ret = cluster_lookup(ec->xl_list, locked_on, ec->nodes, replies, output, + frame, ec->xl, &loc, xdata); + if (ret <= ec->fragments) { + ret = -ENOTCONN; + goto out; + } - source = ec_heal_entry_find_direction (ec, replies, versions, - dirty, sources, healed_sinks); - if (source < 0) { - ret = -EIO; - goto out; - } - ret = source; + source = ec_heal_entry_find_direction(ec, replies, versions, dirty, sources, + healed_sinks); + if (source < 0) { + ret = -EIO; + goto out; + } + ret = source; out: - if (xdata) - dict_unref (xdata); - loc_wipe (&loc); - cluster_replies_wipe (replies, ec->nodes); - return ret; + if (xdata) + dict_unref(xdata); + loc_wipe(&loc); + cluster_replies_wipe(replies, ec->nodes); + return ret; } int32_t -ec_set_new_entry_dirty (ec_t *ec, loc_t *loc, struct iatt *ia, - call_frame_t *frame, xlator_t *this, unsigned char *on) -{ - dict_t *xattr = NULL; - int32_t ret = -1; - default_args_cbk_t *replies = NULL; - unsigned char *output = NULL; - uint64_t dirty[EC_VERSION_SIZE] = {1, 1}; - loc_t newloc = {0}; - - /*Symlinks don't have any data to be healed*/ - if (ia->ia_type == IA_IFLNK) - dirty[EC_DATA_TXN] = 0; - - newloc.inode = inode_ref (loc->inode); - gf_uuid_copy (newloc.gfid, ia->ia_gfid); - EC_REPLIES_ALLOC (replies, ec->nodes); - output = alloca0 (ec->nodes); - xattr = dict_new(); - if (!xattr) { - ret = -ENOMEM; - goto out; - } +ec_set_new_entry_dirty(ec_t *ec, loc_t *loc, struct iatt *ia, + call_frame_t *frame, xlator_t *this, unsigned char *on) +{ + dict_t *xattr = NULL; + int32_t ret = -1; + default_args_cbk_t *replies = NULL; + unsigned char *output = NULL; + uint64_t dirty[EC_VERSION_SIZE] = {1, 1}; + loc_t newloc = {0}; + + /*Symlinks don't have any data to be healed*/ + if (ia->ia_type == IA_IFLNK) + dirty[EC_DATA_TXN] = 0; + + newloc.inode = inode_ref(loc->inode); + gf_uuid_copy(newloc.gfid, ia->ia_gfid); + EC_REPLIES_ALLOC(replies, ec->nodes); + output = alloca0(ec->nodes); + xattr = dict_new(); + if (!xattr) { + ret = -ENOMEM; + goto out; + } - ret = ec_dict_set_array (xattr, EC_XATTR_DIRTY, dirty, - EC_VERSION_SIZE); - if (ret) - goto out; + ret = ec_dict_set_array(xattr, EC_XATTR_DIRTY, dirty, EC_VERSION_SIZE); + if (ret) + goto out; - ret = cluster_xattrop (ec->xl_list, on, ec->nodes, replies, output, - frame, ec->xl, &newloc, - GF_XATTROP_ADD_ARRAY64, xattr, NULL); + ret = cluster_xattrop(ec->xl_list, on, ec->nodes, replies, output, frame, + ec->xl, &newloc, GF_XATTROP_ADD_ARRAY64, xattr, NULL); - if (ret < ec->fragments) { - ret = -ENOTCONN; - goto out; - } + if (ret < ec->fragments) { + ret = -ENOTCONN; + goto out; + } out: - if (xattr) - dict_unref (xattr); - cluster_replies_wipe (replies, ec->nodes); - loc_wipe (&newloc); - return ret; + if (xattr) + dict_unref(xattr); + cluster_replies_wipe(replies, ec->nodes); + loc_wipe(&newloc); + return ret; } /*Name heal*/ int -ec_delete_stale_name (dict_t *gfid_db, char *key, data_t *d, void *data) -{ - struct ec_name_data *name_data = data; - struct iatt *ia = NULL; - ec_t *ec = NULL; - loc_t loc = {0}; - unsigned char *same = data_to_bin (d); - default_args_cbk_t *replies = NULL; - unsigned char *output = NULL; - int ret = 0; - int estale_count = 0; - int i = 0; - call_frame_t *frame = name_data->frame; - - ec = name_data->frame->this->private; - EC_REPLIES_ALLOC (replies, ec->nodes); - if (EC_COUNT (same, ec->nodes) >= ec->fragments) { - ret = 0; - goto out; - } +ec_delete_stale_name(dict_t *gfid_db, char *key, data_t *d, void *data) +{ + struct ec_name_data *name_data = data; + struct iatt *ia = NULL; + ec_t *ec = NULL; + loc_t loc = {0}; + unsigned char *same = data_to_bin(d); + default_args_cbk_t *replies = NULL; + unsigned char *output = NULL; + int ret = 0; + int estale_count = 0; + int i = 0; + call_frame_t *frame = name_data->frame; + + ec = name_data->frame->this->private; + EC_REPLIES_ALLOC(replies, ec->nodes); + if (EC_COUNT(same, ec->nodes) >= ec->fragments) { + ret = 0; + goto out; + } - loc.inode = inode_new (name_data->parent->table); - if (!loc.inode) { - ret = -ENOMEM; - goto out; + loc.inode = inode_new(name_data->parent->table); + if (!loc.inode) { + ret = -ENOMEM; + goto out; + } + gf_uuid_parse(key, loc.gfid); + output = alloca0(ec->nodes); + ret = cluster_lookup(ec->xl_list, name_data->participants, ec->nodes, + replies, output, name_data->frame, ec->xl, &loc, NULL); + + for (i = 0; i < ec->nodes; i++) { + if (!replies[i].valid) + continue; + if (replies[i].op_ret == -1) { + if (replies[i].op_errno == ESTALE || replies[i].op_errno == ENOENT) + estale_count++; + else + name_data->participants[i] = 0; } - gf_uuid_parse (key, loc.gfid); - output = alloca0(ec->nodes); - ret = cluster_lookup (ec->xl_list, name_data->participants, ec->nodes, - replies, output, name_data->frame, ec->xl, &loc, - NULL); + } - for (i = 0; i < ec->nodes; i++) { - if (!replies[i].valid) - continue; - if (replies[i].op_ret == -1) { - if (replies[i].op_errno == ESTALE || - replies[i].op_errno == ENOENT) - estale_count++; - else - name_data->participants[i] = 0; - } - } + if (estale_count <= ec->redundancy) { + /* We have at least ec->fragments number of fragments, so the + * file is recoverable, so don't delete it*/ - if (estale_count <= ec->redundancy) { - /* We have at least ec->fragments number of fragments, so the - * file is recoverable, so don't delete it*/ + /* Please note that the lookup call above could fail with + * ENOTCONN on all subvoumes and still this branch will be + * true, but in those cases conservatively we decide to not + * delete the file until we are sure*/ + ret = 0; + goto out; + } - /* Please note that the lookup call above could fail with - * ENOTCONN on all subvoumes and still this branch will be - * true, but in those cases conservatively we decide to not - * delete the file until we are sure*/ - ret = 0; - goto out; + /*Noway to recover, delete the name*/ + loc_wipe(&loc); + loc.parent = inode_ref(name_data->parent); + gf_uuid_copy(loc.pargfid, loc.parent->gfid); + loc.name = name_data->name; + for (i = 0; i < ec->nodes; i++) { + if (same[i] && replies[i].valid && (replies[i].op_ret == 0)) { + ia = &replies[i].stat; + break; } + } - /*Noway to recover, delete the name*/ - loc_wipe (&loc); - loc.parent = inode_ref (name_data->parent); - gf_uuid_copy (loc.pargfid, loc.parent->gfid); - loc.name = name_data->name; - for (i = 0; i < ec->nodes; i++) { - if (same[i] && replies[i].valid && (replies[i].op_ret == 0)) { - ia = &replies[i].stat; - break; - } - } + if (!ia) { + ret = -ENOTCONN; + goto out; + } - if (!ia) { - ret = -ENOTCONN; - goto out; - } + if (IA_ISDIR(ia->ia_type)) { + ret = cluster_rmdir(ec->xl_list, same, ec->nodes, replies, output, + frame, ec->xl, &loc, 1, NULL); + gf_msg_debug(ec->xl->name, 0, + "cluster rmdir succeeded on %d " + "nodes", + ret); + } else { + ret = cluster_unlink(ec->xl_list, same, ec->nodes, replies, output, + frame, ec->xl, &loc, 0, NULL); + gf_msg_debug(ec->xl->name, 0, + "cluster unlink succeeded on %d " + "nodes", + ret); + } - if (IA_ISDIR (ia->ia_type)) { - ret = cluster_rmdir (ec->xl_list, same, ec->nodes, replies, - output, frame, ec->xl, &loc, 1, NULL); - gf_msg_debug (ec->xl->name, 0, "cluster rmdir succeeded on %d " - "nodes", ret); + for (i = 0; i < ec->nodes; i++) { + if (output[i]) { + same[i] = 0; + name_data->enoent[i] = 1; } else { - ret = cluster_unlink (ec->xl_list, same, ec->nodes, replies, - output, frame, ec->xl, &loc, 0, NULL); - gf_msg_debug (ec->xl->name, 0, "cluster unlink succeeded on %d " - "nodes", ret); - } - - for (i = 0; i < ec->nodes; i++) { - if (output[i]) { - same[i] = 0; - name_data->enoent[i] = 1; - } else { - /*op failed*/ - if (same[i]) - name_data->participants[i] = 0; - } + /*op failed*/ + if (same[i]) + name_data->participants[i] = 0; } - ret = 0; - /*This will help in making decisions about creating names*/ - dict_del (gfid_db, key); + } + ret = 0; + /*This will help in making decisions about creating names*/ + dict_del(gfid_db, key); out: - if (ret < 0) { - gf_msg_debug (ec->xl->name, 0, "%s/%s: heal failed %s", - uuid_utoa (name_data->parent->gfid), name_data->name, - strerror (-ret)); - } - cluster_replies_wipe (replies, ec->nodes); - loc_wipe (&loc); - return ret; + if (ret < 0) { + gf_msg_debug(ec->xl->name, 0, "%s/%s: heal failed %s", + uuid_utoa(name_data->parent->gfid), name_data->name, + strerror(-ret)); + } + cluster_replies_wipe(replies, ec->nodes); + loc_wipe(&loc); + return ret; } int -ec_delete_stale_names (call_frame_t *frame, ec_t *ec, inode_t *parent, - char *name, default_args_cbk_t *replies, dict_t *gfid_db, - unsigned char *enoent, unsigned char *gfidless, - unsigned char *participants) +ec_delete_stale_names(call_frame_t *frame, ec_t *ec, inode_t *parent, + char *name, default_args_cbk_t *replies, dict_t *gfid_db, + unsigned char *enoent, unsigned char *gfidless, + unsigned char *participants) { - struct ec_name_data name_data = {0}; + struct ec_name_data name_data = {0}; - name_data.enoent = enoent; - name_data.gfidless = gfidless; - name_data.participants = participants; - name_data.name = name; - name_data.parent = parent; - name_data.frame = frame; - name_data.replies = replies; - return dict_foreach (gfid_db, ec_delete_stale_name, &name_data); + name_data.enoent = enoent; + name_data.gfidless = gfidless; + name_data.participants = participants; + name_data.name = name; + name_data.parent = parent; + name_data.frame = frame; + name_data.replies = replies; + return dict_foreach(gfid_db, ec_delete_stale_name, &name_data); } int -_assign_same (dict_t *dict, char *key, data_t *value, void *data) +_assign_same(dict_t *dict, char *key, data_t *value, void *data) { - struct ec_name_data *name_data = data; + struct ec_name_data *name_data = data; - name_data->same = data_to_bin (value); - return 0; + name_data->same = data_to_bin(value); + return 0; } int -ec_create_name (call_frame_t *frame, ec_t *ec, inode_t *parent, char *name, - default_args_cbk_t *lookup_replies, dict_t *gfid_db, - unsigned char *enoent, unsigned char *participants) -{ - int ret = 0; - int i = 0; - struct ec_name_data name_data = {0}; - struct iatt *ia = NULL; - unsigned char *output = 0; - unsigned char *output1 = 0; - unsigned char *on = NULL; - default_args_cbk_t *replies = NULL; - loc_t loc = {0}; - loc_t srcloc = {0}; - unsigned char *link = NULL; - unsigned char *create = NULL; - dict_t *xdata = NULL; - char *linkname = NULL; - ec_config_t config; - /* There should be just one gfid key */ - EC_REPLIES_ALLOC (replies, ec->nodes); - if (gfid_db->count != 1) { - ret = -EINVAL; - goto out; - } - - ret = dict_foreach (gfid_db, _assign_same, &name_data); - if (ret < 0) - goto out; - /*There should at least be one valid success reply with gfid*/ - for (i = 0; i < ec->nodes; i++) - if (name_data.same[i]) - break; +ec_create_name(call_frame_t *frame, ec_t *ec, inode_t *parent, char *name, + default_args_cbk_t *lookup_replies, dict_t *gfid_db, + unsigned char *enoent, unsigned char *participants) +{ + int ret = 0; + int i = 0; + struct ec_name_data name_data = {0}; + struct iatt *ia = NULL; + unsigned char *output = 0; + unsigned char *output1 = 0; + unsigned char *on = NULL; + default_args_cbk_t *replies = NULL; + loc_t loc = {0}; + loc_t srcloc = {0}; + unsigned char *link = NULL; + unsigned char *create = NULL; + dict_t *xdata = NULL; + char *linkname = NULL; + ec_config_t config; + /* There should be just one gfid key */ + EC_REPLIES_ALLOC(replies, ec->nodes); + if (gfid_db->count != 1) { + ret = -EINVAL; + goto out; + } - if (i == ec->nodes) { - ret = -EINVAL; - goto out; - } + ret = dict_foreach(gfid_db, _assign_same, &name_data); + if (ret < 0) + goto out; + /*There should at least be one valid success reply with gfid*/ + for (i = 0; i < ec->nodes; i++) + if (name_data.same[i]) + break; - ia = &lookup_replies[i].stat; - xdata = dict_new (); - loc.parent = inode_ref (parent); - gf_uuid_copy (loc.pargfid, parent->gfid); - loc.inode = inode_new (parent->table); - if (loc.inode) - srcloc.inode = inode_ref (loc.inode); - gf_uuid_copy (srcloc.gfid, ia->ia_gfid); - if (!loc.inode || !xdata || dict_set_static_bin (xdata, "gfid-req", - ia->ia_gfid, - sizeof (ia->ia_gfid))) { - ret = -ENOMEM; - goto out; - } - loc.name = name; - link = alloca0 (ec->nodes); - create = alloca0 (ec->nodes); - on = alloca0 (ec->nodes); - output = alloca0 (ec->nodes); - output1 = alloca0 (ec->nodes); + if (i == ec->nodes) { + ret = -EINVAL; + goto out; + } - for (i = 0; i < ec->nodes; i++) { - if (!lookup_replies[i].valid) - continue; - if (lookup_replies[i].op_ret) - continue; - on[i] = 1; - } - switch (ia->ia_type) { + ia = &lookup_replies[i].stat; + xdata = dict_new(); + loc.parent = inode_ref(parent); + gf_uuid_copy(loc.pargfid, parent->gfid); + loc.inode = inode_new(parent->table); + if (loc.inode) + srcloc.inode = inode_ref(loc.inode); + gf_uuid_copy(srcloc.gfid, ia->ia_gfid); + if (!loc.inode || !xdata || + dict_set_static_bin(xdata, "gfid-req", ia->ia_gfid, + sizeof(ia->ia_gfid))) { + ret = -ENOMEM; + goto out; + } + loc.name = name; + link = alloca0(ec->nodes); + create = alloca0(ec->nodes); + on = alloca0(ec->nodes); + output = alloca0(ec->nodes); + output1 = alloca0(ec->nodes); + + for (i = 0; i < ec->nodes; i++) { + if (!lookup_replies[i].valid) + continue; + if (lookup_replies[i].op_ret) + continue; + on[i] = 1; + } + switch (ia->ia_type) { case IA_IFDIR: - ec_set_new_entry_dirty (ec, &loc, ia, frame, ec->xl, on); - (void) cluster_mkdir (ec->xl_list, enoent, ec->nodes, - replies, output, frame, ec->xl, &loc, - st_mode_from_ia (ia->ia_prot, - ia->ia_type), 0, xdata); - break; + ec_set_new_entry_dirty(ec, &loc, ia, frame, ec->xl, on); + (void)cluster_mkdir( + ec->xl_list, enoent, ec->nodes, replies, output, frame, ec->xl, + &loc, st_mode_from_ia(ia->ia_prot, ia->ia_type), 0, xdata); + break; case IA_IFLNK: - /*Check for hard links and create/link*/ - ret = cluster_lookup (ec->xl_list, enoent, ec->nodes, - replies, output, frame, ec->xl, - &srcloc, NULL); - for (i = 0; i < ec->nodes; i++) { - if (output[i]) { - link[i] = 1; - } else { - if (replies[i].op_errno == ENOENT || - replies[i].op_errno == ESTALE) { - create[i] = 1; - } - } + /*Check for hard links and create/link*/ + ret = cluster_lookup(ec->xl_list, enoent, ec->nodes, replies, + output, frame, ec->xl, &srcloc, NULL); + for (i = 0; i < ec->nodes; i++) { + if (output[i]) { + link[i] = 1; + } else { + if (replies[i].op_errno == ENOENT || + replies[i].op_errno == ESTALE) { + create[i] = 1; + } } - - if (EC_COUNT (link, ec->nodes)) { - cluster_link (ec->xl_list, link, ec->nodes, - replies, output1, frame, ec->xl, - &srcloc, &loc, NULL); + } + + if (EC_COUNT(link, ec->nodes)) { + cluster_link(ec->xl_list, link, ec->nodes, replies, output1, + frame, ec->xl, &srcloc, &loc, NULL); + } + + if (EC_COUNT(create, ec->nodes)) { + cluster_readlink(ec->xl_list, name_data.same, ec->nodes, + replies, output, frame, ec->xl, &srcloc, 4096, + NULL); + if (EC_COUNT(output, ec->nodes) == 0) { + ret = -ENOTCONN; + goto out; } - if (EC_COUNT (create, ec->nodes)) { - cluster_readlink (ec->xl_list, name_data.same, - ec->nodes, replies, output, - frame, ec->xl, &srcloc, 4096, - NULL); - if (EC_COUNT (output, ec->nodes) == 0) { - ret = -ENOTCONN; - goto out; - } - - for (i = 0; i < ec->nodes; i++) { - if (output[i]) - break; - } - linkname = alloca0 (strlen(replies[i].buf) + 1); - strcpy (linkname, replies[i].buf); - ec_set_new_entry_dirty (ec, &loc, ia, frame, - ec->xl, on); - cluster_symlink (ec->xl_list, create, ec->nodes, - replies, output, frame, ec->xl, - linkname, &loc, 0, xdata); + for (i = 0; i < ec->nodes; i++) { + if (output[i]) + break; } - for (i = 0; i < ec->nodes; i++) - if (output1[i]) - output[i] = 1; - break; + linkname = alloca0(strlen(replies[i].buf) + 1); + strcpy(linkname, replies[i].buf); + ec_set_new_entry_dirty(ec, &loc, ia, frame, ec->xl, on); + cluster_symlink(ec->xl_list, create, ec->nodes, replies, output, + frame, ec->xl, linkname, &loc, 0, xdata); + } + for (i = 0; i < ec->nodes; i++) + if (output1[i]) + output[i] = 1; + break; case IA_IFREG: - ec_set_new_entry_dirty (ec, &loc, ia, - frame, ec->xl, on); - config.version = EC_CONFIG_VERSION; - config.algorithm = EC_CONFIG_ALGORITHM; - config.gf_word_size = EC_GF_BITS; - config.bricks = ec->nodes; - config.redundancy = ec->redundancy; - config.chunk_size = EC_METHOD_CHUNK_SIZE; - - ret = ec_dict_set_config(xdata, EC_XATTR_CONFIG, &config); - if (ret != 0) { - goto out; - } + ec_set_new_entry_dirty(ec, &loc, ia, frame, ec->xl, on); + config.version = EC_CONFIG_VERSION; + config.algorithm = EC_CONFIG_ALGORITHM; + config.gf_word_size = EC_GF_BITS; + config.bricks = ec->nodes; + config.redundancy = ec->redundancy; + config.chunk_size = EC_METHOD_CHUNK_SIZE; + + ret = ec_dict_set_config(xdata, EC_XATTR_CONFIG, &config); + if (ret != 0) { + goto out; + } - /* Fall through */ + /* Fall through */ default: - ret = dict_set_int32 (xdata, GLUSTERFS_INTERNAL_FOP_KEY, - 1); - if (ret) - goto out; - ret = cluster_mknod (ec->xl_list, enoent, ec->nodes, - replies, output, frame, ec->xl, - &loc, st_mode_from_ia (ia->ia_prot, - ia->ia_type), - makedev(ia_major(ia->ia_rdev), ia_minor(ia->ia_rdev)), - 0, xdata); - break; - } + ret = dict_set_int32(xdata, GLUSTERFS_INTERNAL_FOP_KEY, 1); + if (ret) + goto out; + ret = cluster_mknod( + ec->xl_list, enoent, ec->nodes, replies, output, frame, ec->xl, + &loc, st_mode_from_ia(ia->ia_prot, ia->ia_type), + makedev(ia_major(ia->ia_rdev), ia_minor(ia->ia_rdev)), 0, + xdata); + break; + } - for (i = 0; i < ec->nodes; i++) { - if (enoent[i] && !output[i]) - participants[i] = 0; - } + for (i = 0; i < ec->nodes; i++) { + if (enoent[i] && !output[i]) + participants[i] = 0; + } - ret = 0; + ret = 0; out: - if (ret < 0) - gf_msg_debug (ec->xl->name, 0, "%s/%s: heal failed %s", - uuid_utoa (parent->gfid), name, strerror (-ret)); - cluster_replies_wipe (replies, ec->nodes); - loc_wipe (&loc); - loc_wipe (&srcloc); - if (xdata) - dict_unref (xdata); - return ret; + if (ret < 0) + gf_msg_debug(ec->xl->name, 0, "%s/%s: heal failed %s", + uuid_utoa(parent->gfid), name, strerror(-ret)); + cluster_replies_wipe(replies, ec->nodes); + loc_wipe(&loc); + loc_wipe(&srcloc); + if (xdata) + dict_unref(xdata); + return ret; } int -__ec_heal_name (call_frame_t *frame, ec_t *ec, inode_t *parent, char *name, - unsigned char *participants) -{ - unsigned char *output = NULL; - unsigned char *enoent = NULL; - default_args_cbk_t *replies = NULL; - dict_t *xdata = NULL; - dict_t *gfid_db = NULL; - int ret = 0; - loc_t loc = {0}; - int i = 0; - struct iatt *ia = NULL; - char gfid[64] = {0}; - unsigned char *same = NULL; - unsigned char *gfidless = NULL; - - EC_REPLIES_ALLOC (replies, ec->nodes); - loc.parent = inode_ref (parent); - loc.inode = inode_new (parent->table); - gf_uuid_copy (loc.pargfid, parent->gfid); - loc.name = name; - xdata = dict_new (); - gfid_db = dict_new (); - if (!xdata || !gfid_db || !loc.inode) { - ret = -ENOMEM; - goto out; - } +__ec_heal_name(call_frame_t *frame, ec_t *ec, inode_t *parent, char *name, + unsigned char *participants) +{ + unsigned char *output = NULL; + unsigned char *enoent = NULL; + default_args_cbk_t *replies = NULL; + dict_t *xdata = NULL; + dict_t *gfid_db = NULL; + int ret = 0; + loc_t loc = {0}; + int i = 0; + struct iatt *ia = NULL; + char gfid[64] = {0}; + unsigned char *same = NULL; + unsigned char *gfidless = NULL; + + EC_REPLIES_ALLOC(replies, ec->nodes); + loc.parent = inode_ref(parent); + loc.inode = inode_new(parent->table); + gf_uuid_copy(loc.pargfid, parent->gfid); + loc.name = name; + xdata = dict_new(); + gfid_db = dict_new(); + if (!xdata || !gfid_db || !loc.inode) { + ret = -ENOMEM; + goto out; + } - ret = dict_set_int32 (xdata, GF_GFIDLESS_LOOKUP, 1); - if (ret) { - ret = -ENOMEM; - goto out; - } + ret = dict_set_int32(xdata, GF_GFIDLESS_LOOKUP, 1); + if (ret) { + ret = -ENOMEM; + goto out; + } - output = alloca0 (ec->nodes); - gfidless = alloca0 (ec->nodes); - enoent = alloca0 (ec->nodes); - ret = cluster_lookup (ec->xl_list, participants, ec->nodes, replies, - output, frame, ec->xl, &loc, NULL); - for (i = 0; i < ec->nodes; i++) { - if (!replies[i].valid) - continue; - - if (replies[i].op_ret == -1) { - /*If ESTALE comes here, that means parent dir is not - * present, nothing to do there, so reset participants - * for that brick*/ - if (replies[i].op_errno == ENOENT) - enoent[i] = 1; - else - participants[i] = 0; - continue; - } - ia = &replies[i].stat; - if (gf_uuid_is_null (ia->ia_gfid)) { - if (IA_ISDIR (ia->ia_type) || ia->ia_size == 0) - gfidless[i] = 1; - else - participants[i] = 0; - } else { - uuid_utoa_r (ia->ia_gfid, gfid); - ret = dict_get_bin (gfid_db, gfid, (void **)&same); - if (ret < 0) { - same = alloca0(ec->nodes); - } - same[i] = 1; - if (ret < 0) { - ret = dict_set_static_bin (gfid_db, gfid, same, - ec->nodes); - } - if (ret < 0) - goto out; - } + output = alloca0(ec->nodes); + gfidless = alloca0(ec->nodes); + enoent = alloca0(ec->nodes); + ret = cluster_lookup(ec->xl_list, participants, ec->nodes, replies, output, + frame, ec->xl, &loc, NULL); + for (i = 0; i < ec->nodes; i++) { + if (!replies[i].valid) + continue; + + if (replies[i].op_ret == -1) { + /*If ESTALE comes here, that means parent dir is not + * present, nothing to do there, so reset participants + * for that brick*/ + if (replies[i].op_errno == ENOENT) + enoent[i] = 1; + else + participants[i] = 0; + continue; + } + ia = &replies[i].stat; + if (gf_uuid_is_null(ia->ia_gfid)) { + if (IA_ISDIR(ia->ia_type) || ia->ia_size == 0) + gfidless[i] = 1; + else + participants[i] = 0; + } else { + uuid_utoa_r(ia->ia_gfid, gfid); + ret = dict_get_bin(gfid_db, gfid, (void **)&same); + if (ret < 0) { + same = alloca0(ec->nodes); + } + same[i] = 1; + if (ret < 0) { + ret = dict_set_static_bin(gfid_db, gfid, same, ec->nodes); + } + if (ret < 0) + goto out; } + } - ret = ec_delete_stale_names (frame, ec, parent, name, replies, gfid_db, - enoent, gfidless, participants); + ret = ec_delete_stale_names(frame, ec, parent, name, replies, gfid_db, + enoent, gfidless, participants); - if (gfid_db->count == 0) { - /* All entries seem to be stale entries and deleted, - * nothing more to do.*/ - goto out; - } + if (gfid_db->count == 0) { + /* All entries seem to be stale entries and deleted, + * nothing more to do.*/ + goto out; + } - if (gfid_db->count > 1) { - gf_msg (ec->xl->name, GF_LOG_INFO, 0, - EC_MSG_HEAL_FAIL, "%s/%s: Not able to heal", - uuid_utoa (parent->gfid), name); - memset (participants, 0, ec->nodes); - goto out; - } + if (gfid_db->count > 1) { + gf_msg(ec->xl->name, GF_LOG_INFO, 0, EC_MSG_HEAL_FAIL, + "%s/%s: Not able to heal", uuid_utoa(parent->gfid), name); + memset(participants, 0, ec->nodes); + goto out; + } - EC_INTERSECT (enoent, enoent, participants, ec->nodes); - if (EC_COUNT (enoent, ec->nodes) == 0) { - ret = 0; - goto out; - } + EC_INTERSECT(enoent, enoent, participants, ec->nodes); + if (EC_COUNT(enoent, ec->nodes) == 0) { + ret = 0; + goto out; + } - ret = ec_create_name (frame, ec, parent, name, replies, gfid_db, enoent, - participants); + ret = ec_create_name(frame, ec, parent, name, replies, gfid_db, enoent, + participants); out: - cluster_replies_wipe (replies, ec->nodes); - loc_wipe (&loc); - if (xdata) - dict_unref (xdata); - if (gfid_db) - dict_unref (gfid_db); - return ret; + cluster_replies_wipe(replies, ec->nodes); + loc_wipe(&loc); + if (xdata) + dict_unref(xdata); + if (gfid_db) + dict_unref(gfid_db); + return ret; } int -ec_heal_name (call_frame_t *frame, ec_t *ec, inode_t *parent, char *name, - unsigned char *participants) -{ - int ret = 0; - default_args_cbk_t *replies = NULL; - unsigned char *output = NULL; - unsigned char *locked_on = NULL; - loc_t loc = {0}; - - loc.parent = inode_ref (parent); - loc.name = name; - loc.inode = inode_new (parent->table); - if (!loc.inode) { - ret = -ENOMEM; - goto out; - } +ec_heal_name(call_frame_t *frame, ec_t *ec, inode_t *parent, char *name, + unsigned char *participants) +{ + int ret = 0; + default_args_cbk_t *replies = NULL; + unsigned char *output = NULL; + unsigned char *locked_on = NULL; + loc_t loc = {0}; + + loc.parent = inode_ref(parent); + loc.name = name; + loc.inode = inode_new(parent->table); + if (!loc.inode) { + ret = -ENOMEM; + goto out; + } - EC_REPLIES_ALLOC (replies, ec->nodes); - output = alloca0 (ec->nodes); - locked_on = alloca0 (ec->nodes); - ret = cluster_inodelk (ec->xl_list, participants, ec->nodes, replies, - locked_on, frame, ec->xl, ec->xl->name, parent, - 0, 0); - { - if (ret <= ec->fragments) { - gf_msg_debug (ec->xl->name, 0, "%s/%s: Skipping " - "heal as only %d number of subvolumes could " - "be locked", uuid_utoa (parent->gfid), name, - ret); - ret = -ENOTCONN; - goto unlock; - } - EC_INTERSECT (participants, participants, locked_on, ec->nodes); - ret = __ec_heal_name (frame, ec, parent, name, participants); - } + EC_REPLIES_ALLOC(replies, ec->nodes); + output = alloca0(ec->nodes); + locked_on = alloca0(ec->nodes); + ret = cluster_inodelk(ec->xl_list, participants, ec->nodes, replies, + locked_on, frame, ec->xl, ec->xl->name, parent, 0, 0); + { + if (ret <= ec->fragments) { + gf_msg_debug(ec->xl->name, 0, + "%s/%s: Skipping " + "heal as only %d number of subvolumes could " + "be locked", + uuid_utoa(parent->gfid), name, ret); + ret = -ENOTCONN; + goto unlock; + } + EC_INTERSECT(participants, participants, locked_on, ec->nodes); + ret = __ec_heal_name(frame, ec, parent, name, participants); + } unlock: - cluster_uninodelk (ec->xl_list, locked_on, ec->nodes, replies, output, - frame, ec->xl, ec->xl->name, parent, 0, 0); + cluster_uninodelk(ec->xl_list, locked_on, ec->nodes, replies, output, frame, + ec->xl, ec->xl->name, parent, 0, 0); out: - cluster_replies_wipe (replies, ec->nodes); - loc_wipe (&loc); - return ret; + cluster_replies_wipe(replies, ec->nodes); + loc_wipe(&loc); + return ret; } int -ec_name_heal_handler (xlator_t *subvol, gf_dirent_t *entry, loc_t *parent, - void *data) -{ - struct ec_name_data *name_data = data; - xlator_t *this = THIS; - ec_t *ec = this->private; - unsigned char *name_on = alloca0 (ec->nodes); - int i = 0; - int ret = 0; - - if (ec->shutdown) { - gf_msg_debug(this->name, 0, "Cancelling directory heal " - "because EC is stopping."); - return -ENOTCONN; - } +ec_name_heal_handler(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent, + void *data) +{ + struct ec_name_data *name_data = data; + xlator_t *this = THIS; + ec_t *ec = this->private; + unsigned char *name_on = alloca0(ec->nodes); + int i = 0; + int ret = 0; + + if (ec->shutdown) { + gf_msg_debug(this->name, 0, + "Cancelling directory heal " + "because EC is stopping."); + return -ENOTCONN; + } - memcpy (name_on, name_data->participants, ec->nodes); - ret = ec_heal_name (name_data->frame, ec, parent->inode, - entry->d_name, name_on); + memcpy(name_on, name_data->participants, ec->nodes); + ret = ec_heal_name(name_data->frame, ec, parent->inode, entry->d_name, + name_on); - if (ret < 0) - memset (name_on, 0, ec->nodes); + if (ret < 0) + memset(name_on, 0, ec->nodes); - for (i = 0; i < ec->nodes; i++) - if (name_data->participants[i] && !name_on[i]) - name_data->failed_on[i] = 1; - return 0; + for (i = 0; i < ec->nodes; i++) + if (name_data->participants[i] && !name_on[i]) + name_data->failed_on[i] = 1; + return 0; } int -ec_heal_names (call_frame_t *frame, ec_t *ec, inode_t *inode, - unsigned char *participants) +ec_heal_names(call_frame_t *frame, ec_t *ec, inode_t *inode, + unsigned char *participants) { - int i = 0; - int j = 0; - loc_t loc = {0}; - struct ec_name_data name_data = {0}; - int ret = 0; - - loc.inode = inode_ref (inode); - gf_uuid_copy (loc.gfid, inode->gfid); - name_data.frame = frame; - name_data.participants = participants; - name_data.failed_on = alloca0(ec->nodes);; - - for (i = 0; i < ec->nodes; i++) { - if (!participants[i]) - continue; - ret = syncop_dir_scan (ec->xl_list[i], &loc, - GF_CLIENT_PID_SELF_HEALD, &name_data, - ec_name_heal_handler); - if (ret < 0) { - break; - } - for (j = 0; j < ec->nodes; j++) - if (name_data.failed_on[j]) - participants[j] = 0; + int i = 0; + int j = 0; + loc_t loc = {0}; + struct ec_name_data name_data = {0}; + int ret = 0; + + loc.inode = inode_ref(inode); + gf_uuid_copy(loc.gfid, inode->gfid); + name_data.frame = frame; + name_data.participants = participants; + name_data.failed_on = alloca0(ec->nodes); + ; + + for (i = 0; i < ec->nodes; i++) { + if (!participants[i]) + continue; + ret = syncop_dir_scan(ec->xl_list[i], &loc, GF_CLIENT_PID_SELF_HEALD, + &name_data, ec_name_heal_handler); + if (ret < 0) { + break; + } + for (j = 0; j < ec->nodes; j++) + if (name_data.failed_on[j]) + participants[j] = 0; - if (EC_COUNT (participants, ec->nodes) <= ec->fragments) { - ret = -ENOTCONN; - break; - } + if (EC_COUNT(participants, ec->nodes) <= ec->fragments) { + ret = -ENOTCONN; + break; } - loc_wipe (&loc); - return ret; + } + loc_wipe(&loc); + return ret; } int -__ec_heal_entry (call_frame_t *frame, ec_t *ec, inode_t *inode, - unsigned char *heal_on, unsigned char *sources, - unsigned char *healed_sinks) -{ - unsigned char *locked_on = NULL; - unsigned char *output = NULL; - uint64_t *versions = NULL; - uint64_t *dirty = NULL; - unsigned char *participants = NULL; - default_args_cbk_t *replies = NULL; - int ret = 0; - int source = 0; - int i = 0; - - locked_on = alloca0(ec->nodes); - output = alloca0(ec->nodes); - versions = alloca0 (ec->nodes * sizeof (*versions)); - dirty = alloca0 (ec->nodes * sizeof (*dirty)); - - EC_REPLIES_ALLOC (replies, ec->nodes); - ret = cluster_inodelk (ec->xl_list, heal_on, ec->nodes, replies, - locked_on, frame, ec->xl, ec->xl->name, inode, - 0, 0); - { - if (ret <= ec->fragments) { - gf_msg_debug (ec->xl->name, 0, "%s: Skipping heal " - "as only %d number of subvolumes could " - "be locked", uuid_utoa (inode->gfid), ret); - ret = -ENOTCONN; - goto unlock; - } - ret = __ec_heal_entry_prepare (frame, ec, inode, locked_on, - versions, dirty, sources, - healed_sinks); - source = ret; - } +__ec_heal_entry(call_frame_t *frame, ec_t *ec, inode_t *inode, + unsigned char *heal_on, unsigned char *sources, + unsigned char *healed_sinks) +{ + unsigned char *locked_on = NULL; + unsigned char *output = NULL; + uint64_t *versions = NULL; + uint64_t *dirty = NULL; + unsigned char *participants = NULL; + default_args_cbk_t *replies = NULL; + int ret = 0; + int source = 0; + int i = 0; + + locked_on = alloca0(ec->nodes); + output = alloca0(ec->nodes); + versions = alloca0(ec->nodes * sizeof(*versions)); + dirty = alloca0(ec->nodes * sizeof(*dirty)); + + EC_REPLIES_ALLOC(replies, ec->nodes); + ret = cluster_inodelk(ec->xl_list, heal_on, ec->nodes, replies, locked_on, + frame, ec->xl, ec->xl->name, inode, 0, 0); + { + if (ret <= ec->fragments) { + gf_msg_debug(ec->xl->name, 0, + "%s: Skipping heal " + "as only %d number of subvolumes could " + "be locked", + uuid_utoa(inode->gfid), ret); + ret = -ENOTCONN; + goto unlock; + } + ret = __ec_heal_entry_prepare(frame, ec, inode, locked_on, versions, + dirty, sources, healed_sinks); + source = ret; + } unlock: - cluster_uninodelk (ec->xl_list, locked_on, ec->nodes, replies, output, - frame, ec->xl, ec->xl->name, inode, 0, 0); - if (ret < 0) - goto out; + cluster_uninodelk(ec->xl_list, locked_on, ec->nodes, replies, output, frame, + ec->xl, ec->xl->name, inode, 0, 0); + if (ret < 0) + goto out; - participants = alloca0 (ec->nodes); - for (i = 0; i < ec->nodes; i++) { - if (sources[i] || healed_sinks[i]) - participants[i] = 1; - } - ret = ec_heal_names (frame, ec, inode, participants); + participants = alloca0(ec->nodes); + for (i = 0; i < ec->nodes; i++) { + if (sources[i] || healed_sinks[i]) + participants[i] = 1; + } + ret = ec_heal_names(frame, ec, inode, participants); - if (EC_COUNT (participants, ec->nodes) <= ec->fragments) - goto out; + if (EC_COUNT(participants, ec->nodes) <= ec->fragments) + goto out; - for (i = 0; i < ec->nodes; i++) { - if (!participants[i]) { - sources[i] = 0; - healed_sinks[i] = 0; - } + for (i = 0; i < ec->nodes; i++) { + if (!participants[i]) { + sources[i] = 0; + healed_sinks[i] = 0; } + } - ec_adjust_versions (frame, ec, EC_DATA_TXN, inode, source, - sources, healed_sinks, versions, dirty); + ec_adjust_versions(frame, ec, EC_DATA_TXN, inode, source, sources, + healed_sinks, versions, dirty); out: - cluster_replies_wipe (replies, ec->nodes); - return ret; + cluster_replies_wipe(replies, ec->nodes); + return ret; } int -ec_heal_entry (call_frame_t *frame, ec_t *ec, inode_t *inode, - unsigned char *sources, unsigned char *healed_sinks) +ec_heal_entry(call_frame_t *frame, ec_t *ec, inode_t *inode, + unsigned char *sources, unsigned char *healed_sinks) { - unsigned char *locked_on = NULL; - unsigned char *up_subvols = NULL; - unsigned char *output = NULL; - char selfheal_domain[1024] = {0}; - int ret = 0; - default_args_cbk_t *replies = NULL; - - EC_REPLIES_ALLOC (replies, ec->nodes); - locked_on = alloca0(ec->nodes); - output = alloca0(ec->nodes); - up_subvols = alloca0(ec->nodes); - - sprintf (selfheal_domain, "%s:self-heal", ec->xl->name); - ec_mask_to_char_array (ec->xl_up, up_subvols, ec->nodes); - /*If other processes are already doing the heal, don't block*/ - ret = cluster_tiebreaker_inodelk (ec->xl_list, up_subvols, ec->nodes, - replies, locked_on, frame, ec->xl, - selfheal_domain, inode, 0, 0); - { - if (ret <= ec->fragments) { - gf_msg_debug (ec->xl->name, 0, "%s: Skipping heal " - "as only %d number of subvolumes could " - "be locked", uuid_utoa (inode->gfid), ret); - ret = -ENOTCONN; - goto unlock; - } - ret = __ec_heal_entry (frame, ec, inode, locked_on, - sources, healed_sinks); - } + unsigned char *locked_on = NULL; + unsigned char *up_subvols = NULL; + unsigned char *output = NULL; + char selfheal_domain[1024] = {0}; + int ret = 0; + default_args_cbk_t *replies = NULL; + + EC_REPLIES_ALLOC(replies, ec->nodes); + locked_on = alloca0(ec->nodes); + output = alloca0(ec->nodes); + up_subvols = alloca0(ec->nodes); + + sprintf(selfheal_domain, "%s:self-heal", ec->xl->name); + ec_mask_to_char_array(ec->xl_up, up_subvols, ec->nodes); + /*If other processes are already doing the heal, don't block*/ + ret = cluster_tiebreaker_inodelk(ec->xl_list, up_subvols, ec->nodes, + replies, locked_on, frame, ec->xl, + selfheal_domain, inode, 0, 0); + { + if (ret <= ec->fragments) { + gf_msg_debug(ec->xl->name, 0, + "%s: Skipping heal " + "as only %d number of subvolumes could " + "be locked", + uuid_utoa(inode->gfid), ret); + ret = -ENOTCONN; + goto unlock; + } + ret = __ec_heal_entry(frame, ec, inode, locked_on, sources, + healed_sinks); + } unlock: - cluster_uninodelk (ec->xl_list, locked_on, ec->nodes, replies, output, - frame, ec->xl, selfheal_domain, inode, 0, 0); - cluster_replies_wipe (replies, ec->nodes); - return ret; + cluster_uninodelk(ec->xl_list, locked_on, ec->nodes, replies, output, frame, + ec->xl, selfheal_domain, inode, 0, 0); + cluster_replies_wipe(replies, ec->nodes); + return ret; } /*Find direction for data heal and heal info*/ int -ec_heal_data_find_direction (ec_t *ec, default_args_cbk_t *replies, - uint64_t *data_versions, - uint64_t *dirty, uint64_t *size, unsigned char *sources, - unsigned char *healed_sinks, - gf_boolean_t check_ondisksize, int which) -{ - uint64_t xattr[EC_VERSION_SIZE] = {0}; - char version_size[128] = {0}; - dict_t *version_size_db = NULL; - unsigned char *same = NULL; - int max_same_count = 0; - int source = 0; - int i = 0; - int ret = 0; - dict_t *dict = NULL; - uint64_t source_size = 0; - - version_size_db = dict_new (); - if (!version_size_db) { - ret = -ENOMEM; - goto out; +ec_heal_data_find_direction(ec_t *ec, default_args_cbk_t *replies, + uint64_t *data_versions, uint64_t *dirty, + uint64_t *size, unsigned char *sources, + unsigned char *healed_sinks, + gf_boolean_t check_ondisksize, int which) +{ + uint64_t xattr[EC_VERSION_SIZE] = {0}; + char version_size[128] = {0}; + dict_t *version_size_db = NULL; + unsigned char *same = NULL; + int max_same_count = 0; + int source = 0; + int i = 0; + int ret = 0; + dict_t *dict = NULL; + uint64_t source_size = 0; + + version_size_db = dict_new(); + if (!version_size_db) { + ret = -ENOMEM; + goto out; + } + + for (i = 0; i < ec->nodes; i++) { + if (!replies[i].valid) + continue; + if (replies[i].op_ret < 0) + continue; + dict = (which == EC_COMBINE_XDATA) ? replies[i].xdata + : replies[i].xattr; + + ret = ec_dict_get_array(dict, EC_XATTR_VERSION, xattr, EC_VERSION_SIZE); + if (ret == 0) { + data_versions[i] = xattr[EC_DATA_TXN]; } - for (i = 0; i < ec->nodes; i++) { - if (!replies[i].valid) - continue; - if (replies[i].op_ret < 0) - continue; - dict = (which == EC_COMBINE_XDATA) ? replies[i].xdata : - replies[i].xattr; - - ret = ec_dict_get_array (dict, EC_XATTR_VERSION, - xattr, EC_VERSION_SIZE); - if (ret == 0) { - data_versions[i] = xattr[EC_DATA_TXN]; - } + memset(xattr, 0, sizeof(xattr)); + ret = ec_dict_get_array(dict, EC_XATTR_DIRTY, xattr, EC_VERSION_SIZE); + if (ret == 0) { + dirty[i] = xattr[EC_DATA_TXN]; + } + ret = ec_dict_del_number(dict, EC_XATTR_SIZE, &size[i]); + /*Build a db of same metadata and data version and size*/ + snprintf(version_size, sizeof(version_size), "%" PRIu64 "-%" PRIu64, + data_versions[i], size[i]); - memset (xattr, 0, sizeof (xattr)); - ret = ec_dict_get_array (dict, EC_XATTR_DIRTY, - xattr, EC_VERSION_SIZE); - if (ret == 0) { - dirty[i] = xattr[EC_DATA_TXN]; - } - ret = ec_dict_del_number (dict, EC_XATTR_SIZE, - &size[i]); - /*Build a db of same metadata and data version and size*/ - snprintf (version_size, sizeof (version_size), - "%"PRIu64"-%"PRIu64, data_versions[i], size[i]); - - ret = dict_get_bin (version_size_db, version_size, - (void **)&same); - if (ret < 0) { - same = alloca0 (ec->nodes); - } + ret = dict_get_bin(version_size_db, version_size, (void **)&same); + if (ret < 0) { + same = alloca0(ec->nodes); + } - same[i] = 1; - if (max_same_count < EC_COUNT (same, ec->nodes)) { - max_same_count = EC_COUNT (same, ec->nodes); - source = i; - } + same[i] = 1; + if (max_same_count < EC_COUNT(same, ec->nodes)) { + max_same_count = EC_COUNT(same, ec->nodes); + source = i; + } - if (ret < 0) { - ret = dict_set_static_bin (version_size_db, - version_size, same, ec->nodes); - } + if (ret < 0) { + ret = dict_set_static_bin(version_size_db, version_size, same, + ec->nodes); + } - if (ret < 0) { - ret = -ENOMEM; - goto out; - } + if (ret < 0) { + ret = -ENOMEM; + goto out; } - /* If we don't have ec->fragments number of same version,size it is not - * recoverable*/ - if (max_same_count < ec->fragments) { - ret = -EIO; - goto out; - } else { - snprintf (version_size, sizeof (version_size), - "%"PRIu64"-%"PRIu64, data_versions[source], - size[source]); - - ret = dict_get_bin (version_size_db, version_size, - (void **)&same); - if (ret < 0) - goto out; - memcpy (sources, same, ec->nodes); - for (i = 0; i < ec->nodes; i++) { - if (replies[i].valid && (replies[i].op_ret == 0) && - !sources[i]) - healed_sinks[i] = 1; - } + } + /* If we don't have ec->fragments number of same version,size it is not + * recoverable*/ + if (max_same_count < ec->fragments) { + ret = -EIO; + goto out; + } else { + snprintf(version_size, sizeof(version_size), "%" PRIu64 "-%" PRIu64, + data_versions[source], size[source]); + + ret = dict_get_bin(version_size_db, version_size, (void **)&same); + if (ret < 0) + goto out; + memcpy(sources, same, ec->nodes); + for (i = 0; i < ec->nodes; i++) { + if (replies[i].valid && (replies[i].op_ret == 0) && !sources[i]) + healed_sinks[i] = 1; } + } - /* There could be files with versions, size same but on disk ia_size - * could be different because of disk crashes, mark them as sinks as - * well*/ + /* There could be files with versions, size same but on disk ia_size + * could be different because of disk crashes, mark them as sinks as + * well*/ - if (check_ondisksize) { - source_size = size[source]; - ec_adjust_size_up (ec, &source_size, _gf_true); + if (check_ondisksize) { + source_size = size[source]; + ec_adjust_size_up(ec, &source_size, _gf_true); - for (i = 0; i < ec->nodes; i++) { - if (sources[i]) { - if (replies[i].stat.ia_size != source_size) { - sources[i] = 0; - healed_sinks[i] = 1; - max_same_count--; - } else { - source = i; - } - } - } - if (max_same_count < ec->fragments) { - ret = -EIO; - goto out; + for (i = 0; i < ec->nodes; i++) { + if (sources[i]) { + if (replies[i].stat.ia_size != source_size) { + sources[i] = 0; + healed_sinks[i] = 1; + max_same_count--; + } else { + source = i; } + } } + if (max_same_count < ec->fragments) { + ret = -EIO; + goto out; + } + } - ret = source; + ret = source; out: - if (version_size_db) - dict_unref (version_size_db); - return ret; + if (version_size_db) + dict_unref(version_size_db); + return ret; } int -__ec_heal_data_prepare (call_frame_t *frame, ec_t *ec, fd_t *fd, - unsigned char *locked_on, uint64_t *versions, - uint64_t *dirty, uint64_t *size, unsigned char *sources, - unsigned char *healed_sinks, unsigned char *trim, - struct iatt *stbuf) -{ - default_args_cbk_t *replies = NULL; - default_args_cbk_t *fstat_replies = NULL; - unsigned char *output = NULL; - unsigned char *fstat_output = NULL; - dict_t *xattrs = NULL; - uint64_t zero_array[2] = {0}; - int source = 0; - int ret = 0; - uint64_t zero_value = 0; - int i = 0; - - EC_REPLIES_ALLOC (replies, ec->nodes); - EC_REPLIES_ALLOC (fstat_replies, ec->nodes); - output = alloca0(ec->nodes); - fstat_output = alloca0(ec->nodes); - xattrs = dict_new (); - if (!xattrs || - dict_set_static_bin (xattrs, EC_XATTR_VERSION, zero_array, - sizeof (zero_array)) || - dict_set_static_bin (xattrs, EC_XATTR_DIRTY, zero_array, - sizeof (zero_array)) || - dict_set_static_bin (xattrs, EC_XATTR_SIZE, &zero_value, - sizeof (zero_value))) { - ret = -ENOMEM; - goto out; - } +__ec_heal_data_prepare(call_frame_t *frame, ec_t *ec, fd_t *fd, + unsigned char *locked_on, uint64_t *versions, + uint64_t *dirty, uint64_t *size, unsigned char *sources, + unsigned char *healed_sinks, unsigned char *trim, + struct iatt *stbuf) +{ + default_args_cbk_t *replies = NULL; + default_args_cbk_t *fstat_replies = NULL; + unsigned char *output = NULL; + unsigned char *fstat_output = NULL; + dict_t *xattrs = NULL; + uint64_t zero_array[2] = {0}; + int source = 0; + int ret = 0; + uint64_t zero_value = 0; + int i = 0; + + EC_REPLIES_ALLOC(replies, ec->nodes); + EC_REPLIES_ALLOC(fstat_replies, ec->nodes); + output = alloca0(ec->nodes); + fstat_output = alloca0(ec->nodes); + xattrs = dict_new(); + if (!xattrs || + dict_set_static_bin(xattrs, EC_XATTR_VERSION, zero_array, + sizeof(zero_array)) || + dict_set_static_bin(xattrs, EC_XATTR_DIRTY, zero_array, + sizeof(zero_array)) || + dict_set_static_bin(xattrs, EC_XATTR_SIZE, &zero_value, + sizeof(zero_value))) { + ret = -ENOMEM; + goto out; + } - ret = cluster_fxattrop (ec->xl_list, locked_on, ec->nodes, - replies, output, frame, ec->xl, fd, - GF_XATTROP_ADD_ARRAY64, xattrs, NULL); + ret = cluster_fxattrop(ec->xl_list, locked_on, ec->nodes, replies, output, + frame, ec->xl, fd, GF_XATTROP_ADD_ARRAY64, xattrs, + NULL); - ret = cluster_fstat (ec->xl_list, locked_on, ec->nodes, fstat_replies, - fstat_output, frame, ec->xl, fd, NULL); + ret = cluster_fstat(ec->xl_list, locked_on, ec->nodes, fstat_replies, + fstat_output, frame, ec->xl, fd, NULL); - for (i = 0; i < ec->nodes; i++) { - output[i] = output[i] && fstat_output[i]; - replies[i].valid = output[i]; - if (output[i]) - replies[i].stat = fstat_replies[i].stat; - } + for (i = 0; i < ec->nodes; i++) { + output[i] = output[i] && fstat_output[i]; + replies[i].valid = output[i]; + if (output[i]) + replies[i].stat = fstat_replies[i].stat; + } - if (EC_COUNT (output, ec->nodes) <= ec->fragments) { - ret = -ENOTCONN; - goto out; - } + if (EC_COUNT(output, ec->nodes) <= ec->fragments) { + ret = -ENOTCONN; + goto out; + } - source = ec_heal_data_find_direction (ec, replies, versions, - dirty, size, sources, - healed_sinks, _gf_true, - EC_COMBINE_DICT); - ret = source; - if (ret < 0) - goto out; + source = ec_heal_data_find_direction(ec, replies, versions, dirty, size, + sources, healed_sinks, _gf_true, + EC_COMBINE_DICT); + ret = source; + if (ret < 0) + goto out; - if (stbuf) - *stbuf = replies[source].stat; + if (stbuf) + *stbuf = replies[source].stat; - for (i = 0; i < ec->nodes; i++) { - if (healed_sinks[i]) { - if (replies[i].stat.ia_size) - trim[i] = 1; - } + for (i = 0; i < ec->nodes; i++) { + if (healed_sinks[i]) { + if (replies[i].stat.ia_size) + trim[i] = 1; } + } - if (EC_COUNT(sources, ec->nodes) < ec->fragments) { - ret = -ENOTCONN; - goto out; - } + if (EC_COUNT(sources, ec->nodes) < ec->fragments) { + ret = -ENOTCONN; + goto out; + } - ret = source; + ret = source; out: - if (xattrs) - dict_unref (xattrs); - cluster_replies_wipe (replies, ec->nodes); - cluster_replies_wipe (fstat_replies, ec->nodes); - if (ret < 0) { - gf_msg_debug (ec->xl->name, 0, "%s: heal failed %s", - uuid_utoa (fd->inode->gfid), strerror (-ret)); - } else { - gf_msg_debug (ec->xl->name, 0, "%s: sources: %d, sinks: " - "%d", uuid_utoa (fd->inode->gfid), - EC_COUNT (sources, ec->nodes), - EC_COUNT (healed_sinks, ec->nodes)); - } - return ret; + if (xattrs) + dict_unref(xattrs); + cluster_replies_wipe(replies, ec->nodes); + cluster_replies_wipe(fstat_replies, ec->nodes); + if (ret < 0) { + gf_msg_debug(ec->xl->name, 0, "%s: heal failed %s", + uuid_utoa(fd->inode->gfid), strerror(-ret)); + } else { + gf_msg_debug(ec->xl->name, 0, + "%s: sources: %d, sinks: " + "%d", + uuid_utoa(fd->inode->gfid), EC_COUNT(sources, ec->nodes), + EC_COUNT(healed_sinks, ec->nodes)); + } + return ret; } int -__ec_heal_mark_sinks (call_frame_t *frame, ec_t *ec, fd_t *fd, - uint64_t *versions, unsigned char *healed_sinks) -{ - int i = 0; - int ret = 0; - unsigned char *mark = NULL; - dict_t *xattrs = NULL; - default_args_cbk_t *replies = NULL; - unsigned char *output = NULL; - uint64_t versions_xattr[2] = {0}; - - EC_REPLIES_ALLOC (replies, ec->nodes); - xattrs = dict_new (); - if (!xattrs) { - ret = -ENOMEM; - goto out; - } +__ec_heal_mark_sinks(call_frame_t *frame, ec_t *ec, fd_t *fd, + uint64_t *versions, unsigned char *healed_sinks) +{ + int i = 0; + int ret = 0; + unsigned char *mark = NULL; + dict_t *xattrs = NULL; + default_args_cbk_t *replies = NULL; + unsigned char *output = NULL; + uint64_t versions_xattr[2] = {0}; + + EC_REPLIES_ALLOC(replies, ec->nodes); + xattrs = dict_new(); + if (!xattrs) { + ret = -ENOMEM; + goto out; + } - mark = alloca0 (ec->nodes); - for (i = 0; i < ec->nodes; i++) { - if (!healed_sinks[i]) - continue; - if ((versions[i] >> EC_SELFHEAL_BIT) & 1) - continue; - mark[i] = 1; - } + mark = alloca0(ec->nodes); + for (i = 0; i < ec->nodes; i++) { + if (!healed_sinks[i]) + continue; + if ((versions[i] >> EC_SELFHEAL_BIT) & 1) + continue; + mark[i] = 1; + } - if (EC_COUNT (mark, ec->nodes) == 0) - return 0; + if (EC_COUNT(mark, ec->nodes) == 0) + return 0; - versions_xattr[EC_DATA_TXN] = hton64(1ULL<<EC_SELFHEAL_BIT); - if (dict_set_static_bin (xattrs, EC_XATTR_VERSION, versions_xattr, - sizeof (versions_xattr))) { - ret = -ENOMEM; - goto out; - } + versions_xattr[EC_DATA_TXN] = hton64(1ULL << EC_SELFHEAL_BIT); + if (dict_set_static_bin(xattrs, EC_XATTR_VERSION, versions_xattr, + sizeof(versions_xattr))) { + ret = -ENOMEM; + goto out; + } - output = alloca0 (ec->nodes); - ret = cluster_fxattrop (ec->xl_list, mark, ec->nodes, - replies, output, frame, ec->xl, fd, - GF_XATTROP_ADD_ARRAY64, xattrs, NULL); - for (i = 0; i < ec->nodes; i++) { - if (!output[i]) { - if (mark[i]) - healed_sinks[i] = 0; - continue; - } - versions[i] |= (1ULL<<EC_SELFHEAL_BIT); + output = alloca0(ec->nodes); + ret = cluster_fxattrop(ec->xl_list, mark, ec->nodes, replies, output, frame, + ec->xl, fd, GF_XATTROP_ADD_ARRAY64, xattrs, NULL); + for (i = 0; i < ec->nodes; i++) { + if (!output[i]) { + if (mark[i]) + healed_sinks[i] = 0; + continue; } + versions[i] |= (1ULL << EC_SELFHEAL_BIT); + } - if (EC_COUNT (healed_sinks, ec->nodes) == 0) { - ret = -ENOTCONN; - goto out; - } - ret = 0; + if (EC_COUNT(healed_sinks, ec->nodes) == 0) { + ret = -ENOTCONN; + goto out; + } + ret = 0; out: - cluster_replies_wipe (replies, ec->nodes); - if (xattrs) - dict_unref (xattrs); - if (ret < 0) - gf_msg_debug (ec->xl->name, 0, "%s: heal failed %s", - uuid_utoa (fd->inode->gfid), strerror (-ret)); - return ret; + cluster_replies_wipe(replies, ec->nodes); + if (xattrs) + dict_unref(xattrs); + if (ret < 0) + gf_msg_debug(ec->xl->name, 0, "%s: heal failed %s", + uuid_utoa(fd->inode->gfid), strerror(-ret)); + return ret; } int32_t -ec_manager_heal_block (ec_fop_data_t *fop, int32_t state) +ec_manager_heal_block(ec_fop_data_t *fop, int32_t state) { ec_heal_t *heal = fop->data; heal->fop = fop; switch (state) { - case EC_STATE_INIT: - ec_owner_set(fop->frame, fop->frame->root); + case EC_STATE_INIT: + ec_owner_set(fop->frame, fop->frame->root); - ec_heal_inodelk(heal, F_WRLCK, 1, 0, 0); + ec_heal_inodelk(heal, F_WRLCK, 1, 0, 0); - return EC_STATE_HEAL_DATA_COPY; + return EC_STATE_HEAL_DATA_COPY; - case EC_STATE_HEAL_DATA_COPY: - gf_msg_debug (fop->xl->name, 0, "%s: read/write starting", - uuid_utoa (heal->fd->inode->gfid)); - ec_heal_data_block (heal); + case EC_STATE_HEAL_DATA_COPY: + gf_msg_debug(fop->xl->name, 0, "%s: read/write starting", + uuid_utoa(heal->fd->inode->gfid)); + ec_heal_data_block(heal); - return EC_STATE_HEAL_DATA_UNLOCK; + return EC_STATE_HEAL_DATA_UNLOCK; - case -EC_STATE_HEAL_DATA_COPY: - case -EC_STATE_HEAL_DATA_UNLOCK: - case EC_STATE_HEAL_DATA_UNLOCK: - ec_heal_inodelk(heal, F_UNLCK, 1, 0, 0); + case -EC_STATE_HEAL_DATA_COPY: + case -EC_STATE_HEAL_DATA_UNLOCK: + case EC_STATE_HEAL_DATA_UNLOCK: + ec_heal_inodelk(heal, F_UNLCK, 1, 0, 0); - return EC_STATE_REPORT; + return EC_STATE_REPORT; - case EC_STATE_REPORT: - if (fop->cbks.heal) { - fop->cbks.heal (fop->req_frame, fop, fop->xl, 0, - 0, (heal->good | heal->bad), - heal->good, heal->bad, NULL); - } + case EC_STATE_REPORT: + if (fop->cbks.heal) { + fop->cbks.heal(fop->req_frame, fop, fop->xl, 0, 0, + (heal->good | heal->bad), heal->good, heal->bad, + NULL); + } - return EC_STATE_END; - case -EC_STATE_REPORT: - if (fop->cbks.heal) { - fop->cbks.heal (fop->req_frame, fop, fop->xl, -1, - fop->error, 0, 0, 0, NULL); - } + return EC_STATE_END; + case -EC_STATE_REPORT: + if (fop->cbks.heal) { + fop->cbks.heal(fop->req_frame, fop, fop->xl, -1, fop->error, 0, + 0, 0, NULL); + } - return EC_STATE_END; - default: - gf_msg (fop->xl->name, GF_LOG_ERROR, 0, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + return EC_STATE_END; + default: + gf_msg(fop->xl->name, GF_LOG_ERROR, 0, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); - return EC_STATE_END; + return EC_STATE_END; } } /*Takes lock */ void -ec_heal_block (call_frame_t *frame, xlator_t *this, uintptr_t target, +ec_heal_block(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, fop_heal_cbk_t func, ec_heal_t *heal) { - ec_cbk_t callback = { .heal = func }; + ec_cbk_t callback = {.heal = func}; ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; @@ -1950,9 +1944,8 @@ ec_heal_block (call_frame_t *frame, xlator_t *this, uintptr_t target, VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate (frame, this, EC_FOP_HEAL, 0, target, minimum, - NULL, ec_manager_heal_block, callback, - heal); + fop = ec_fop_data_allocate(frame, this, EC_FOP_HEAL, 0, target, minimum, + NULL, ec_manager_heal_block, callback, heal); if (fop == NULL) goto out; @@ -1967,761 +1960,751 @@ out: } int32_t -ec_heal_block_done (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, uintptr_t mask, - uintptr_t good, uintptr_t bad, dict_t *xdata) +ec_heal_block_done(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, uintptr_t mask, + uintptr_t good, uintptr_t bad, dict_t *xdata) { - ec_fop_data_t *fop = cookie; - ec_heal_t *heal = fop->data; + ec_fop_data_t *fop = cookie; + ec_heal_t *heal = fop->data; - fop->heal = NULL; - heal->fop = NULL; - heal->error = op_ret < 0 ? op_errno : 0; - syncbarrier_wake (heal->data); - return 0; + fop->heal = NULL; + heal->fop = NULL; + heal->error = op_ret < 0 ? op_errno : 0; + syncbarrier_wake(heal->data); + return 0; } int -ec_sync_heal_block (call_frame_t *frame, xlator_t *this, ec_heal_t *heal) +ec_sync_heal_block(call_frame_t *frame, xlator_t *this, ec_heal_t *heal) { - ec_heal_block (frame, this, heal->bad|heal->good, EC_MINIMUM_ONE, - ec_heal_block_done, heal); - syncbarrier_wait (heal->data, 1); - if (heal->error != 0) { - return -heal->error; - } - if (heal->bad == 0) - return -ENOTCONN; - return 0; + ec_heal_block(frame, this, heal->bad | heal->good, EC_MINIMUM_ONE, + ec_heal_block_done, heal); + syncbarrier_wait(heal->data, 1); + if (heal->error != 0) { + return -heal->error; + } + if (heal->bad == 0) + return -ENOTCONN; + return 0; } int -ec_rebuild_data (call_frame_t *frame, ec_t *ec, fd_t *fd, uint64_t size, - unsigned char *sources, unsigned char *healed_sinks) +ec_rebuild_data(call_frame_t *frame, ec_t *ec, fd_t *fd, uint64_t size, + unsigned char *sources, unsigned char *healed_sinks) { - ec_heal_t *heal = NULL; - int ret = 0; - syncbarrier_t barrier; - - if (syncbarrier_init (&barrier)) - return -ENOMEM; - - heal = alloca0(sizeof (*heal)); - heal->fd = fd_ref (fd); - heal->xl = ec->xl; - heal->data = &barrier; - ec_adjust_size_up (ec, &size, _gf_false); - heal->total_size = size; - heal->size = (128 * GF_UNIT_KB * (ec->self_heal_window_size)); - /* We need to adjust the size to a multiple of the stripe size of the - * volume. Otherwise writes would need to fill gaps (head and/or tail) - * with existent data from the bad bricks. This could be garbage on a - * damaged file or it could fail if there aren't enough bricks. */ - heal->size -= heal->size % ec->stripe_size; - heal->bad = ec_char_array_to_mask (healed_sinks, ec->nodes); - heal->good = ec_char_array_to_mask (sources, ec->nodes); - heal->iatt.ia_type = IA_IFREG; - LOCK_INIT(&heal->lock); - - for (heal->offset = 0; (heal->offset < size) && !heal->done; - heal->offset += heal->size) { - /* We immediately abort any heal if a shutdown request has been - * received to avoid delays. The healing of this file will be - * restarted by another SHD or other client that accesses the - * file. */ - if (ec->shutdown) { - gf_msg_debug(ec->xl->name, 0, "Cancelling heal because " - "EC is stopping."); - ret = -ENOTCONN; - break; - } - - gf_msg_debug (ec->xl->name, 0, "%s: sources: %d, sinks: " - "%d, offset: %"PRIu64" bsize: %"PRIu64, - uuid_utoa (fd->inode->gfid), - EC_COUNT (sources, ec->nodes), - EC_COUNT (healed_sinks, ec->nodes), heal->offset, - heal->size); - ret = ec_sync_heal_block (frame, ec->xl, heal); - if (ret < 0) - break; - - } - memset (healed_sinks, 0, ec->nodes); - ec_mask_to_char_array (heal->bad, healed_sinks, ec->nodes); - fd_unref (heal->fd); - LOCK_DESTROY (&heal->lock); - syncbarrier_destroy (heal->data); + ec_heal_t *heal = NULL; + int ret = 0; + syncbarrier_t barrier; + + if (syncbarrier_init(&barrier)) + return -ENOMEM; + + heal = alloca0(sizeof(*heal)); + heal->fd = fd_ref(fd); + heal->xl = ec->xl; + heal->data = &barrier; + ec_adjust_size_up(ec, &size, _gf_false); + heal->total_size = size; + heal->size = (128 * GF_UNIT_KB * (ec->self_heal_window_size)); + /* We need to adjust the size to a multiple of the stripe size of the + * volume. Otherwise writes would need to fill gaps (head and/or tail) + * with existent data from the bad bricks. This could be garbage on a + * damaged file or it could fail if there aren't enough bricks. */ + heal->size -= heal->size % ec->stripe_size; + heal->bad = ec_char_array_to_mask(healed_sinks, ec->nodes); + heal->good = ec_char_array_to_mask(sources, ec->nodes); + heal->iatt.ia_type = IA_IFREG; + LOCK_INIT(&heal->lock); + + for (heal->offset = 0; (heal->offset < size) && !heal->done; + heal->offset += heal->size) { + /* We immediately abort any heal if a shutdown request has been + * received to avoid delays. The healing of this file will be + * restarted by another SHD or other client that accesses the + * file. */ + if (ec->shutdown) { + gf_msg_debug(ec->xl->name, 0, + "Cancelling heal because " + "EC is stopping."); + ret = -ENOTCONN; + break; + } + + gf_msg_debug(ec->xl->name, 0, + "%s: sources: %d, sinks: " + "%d, offset: %" PRIu64 " bsize: %" PRIu64, + uuid_utoa(fd->inode->gfid), EC_COUNT(sources, ec->nodes), + EC_COUNT(healed_sinks, ec->nodes), heal->offset, + heal->size); + ret = ec_sync_heal_block(frame, ec->xl, heal); if (ret < 0) - gf_msg_debug (ec->xl->name, 0, "%s: heal failed %s", - uuid_utoa (fd->inode->gfid), strerror (-ret)); - return ret; + break; + } + memset(healed_sinks, 0, ec->nodes); + ec_mask_to_char_array(heal->bad, healed_sinks, ec->nodes); + fd_unref(heal->fd); + LOCK_DESTROY(&heal->lock); + syncbarrier_destroy(heal->data); + if (ret < 0) + gf_msg_debug(ec->xl->name, 0, "%s: heal failed %s", + uuid_utoa(fd->inode->gfid), strerror(-ret)); + return ret; } int -__ec_heal_trim_sinks (call_frame_t *frame, ec_t *ec, - fd_t *fd, unsigned char *healed_sinks, - unsigned char *trim, uint64_t size) +__ec_heal_trim_sinks(call_frame_t *frame, ec_t *ec, fd_t *fd, + unsigned char *healed_sinks, unsigned char *trim, + uint64_t size) { - default_args_cbk_t *replies = NULL; - unsigned char *output = NULL; - int ret = 0; - int i = 0; - off_t trim_offset = 0; + default_args_cbk_t *replies = NULL; + unsigned char *output = NULL; + int ret = 0; + int i = 0; + off_t trim_offset = 0; - EC_REPLIES_ALLOC (replies, ec->nodes); - output = alloca0 (ec->nodes); + EC_REPLIES_ALLOC(replies, ec->nodes); + output = alloca0(ec->nodes); - if (EC_COUNT (trim, ec->nodes) == 0) { - ret = 0; - goto out; - } - trim_offset = size; - ec_adjust_offset_up (ec, &trim_offset, _gf_true); - ret = cluster_ftruncate (ec->xl_list, trim, ec->nodes, replies, output, - frame, ec->xl, fd, trim_offset, NULL); - for (i = 0; i < ec->nodes; i++) { - if (!output[i] && trim[i]) - healed_sinks[i] = 0; - } + if (EC_COUNT(trim, ec->nodes) == 0) { + ret = 0; + goto out; + } + trim_offset = size; + ec_adjust_offset_up(ec, &trim_offset, _gf_true); + ret = cluster_ftruncate(ec->xl_list, trim, ec->nodes, replies, output, + frame, ec->xl, fd, trim_offset, NULL); + for (i = 0; i < ec->nodes; i++) { + if (!output[i] && trim[i]) + healed_sinks[i] = 0; + } - if (EC_COUNT (healed_sinks, ec->nodes) == 0) { - ret = -ENOTCONN; - goto out; - } + if (EC_COUNT(healed_sinks, ec->nodes) == 0) { + ret = -ENOTCONN; + goto out; + } out: - cluster_replies_wipe (replies, ec->nodes); - if (ret < 0) - gf_msg_debug (ec->xl->name, 0, "%s: heal failed %s", - uuid_utoa (fd->inode->gfid), strerror (-ret)); - return ret; + cluster_replies_wipe(replies, ec->nodes); + if (ret < 0) + gf_msg_debug(ec->xl->name, 0, "%s: heal failed %s", + uuid_utoa(fd->inode->gfid), strerror(-ret)); + return ret; } int -ec_data_undo_pending (call_frame_t *frame, ec_t *ec, fd_t *fd, dict_t *xattr, - uint64_t *versions, uint64_t *dirty, uint64_t *size, - int source, gf_boolean_t erase_dirty, int idx) -{ - uint64_t versions_xattr[2] = {0}; - uint64_t dirty_xattr[2] = {0}; - uint64_t allzero[2] = {0}; - uint64_t size_xattr = 0; - int ret = 0; - - versions_xattr[EC_DATA_TXN] = hton64(versions[source] - versions[idx]); - ret = dict_set_static_bin (xattr, EC_XATTR_VERSION, - versions_xattr, - sizeof (versions_xattr)); - if (ret < 0) - goto out; +ec_data_undo_pending(call_frame_t *frame, ec_t *ec, fd_t *fd, dict_t *xattr, + uint64_t *versions, uint64_t *dirty, uint64_t *size, + int source, gf_boolean_t erase_dirty, int idx) +{ + uint64_t versions_xattr[2] = {0}; + uint64_t dirty_xattr[2] = {0}; + uint64_t allzero[2] = {0}; + uint64_t size_xattr = 0; + int ret = 0; + + versions_xattr[EC_DATA_TXN] = hton64(versions[source] - versions[idx]); + ret = dict_set_static_bin(xattr, EC_XATTR_VERSION, versions_xattr, + sizeof(versions_xattr)); + if (ret < 0) + goto out; - size_xattr = hton64(size[source] - size[idx]); - ret = dict_set_static_bin (xattr, EC_XATTR_SIZE, - &size_xattr, sizeof (size_xattr)); - if (ret < 0) - goto out; + size_xattr = hton64(size[source] - size[idx]); + ret = dict_set_static_bin(xattr, EC_XATTR_SIZE, &size_xattr, + sizeof(size_xattr)); + if (ret < 0) + goto out; - if (erase_dirty) { - dirty_xattr[EC_DATA_TXN] = hton64(-dirty[idx]); - ret = dict_set_static_bin (xattr, EC_XATTR_DIRTY, - dirty_xattr, - sizeof (dirty_xattr)); - if (ret < 0) - goto out; - } + if (erase_dirty) { + dirty_xattr[EC_DATA_TXN] = hton64(-dirty[idx]); + ret = dict_set_static_bin(xattr, EC_XATTR_DIRTY, dirty_xattr, + sizeof(dirty_xattr)); + if (ret < 0) + goto out; + } - if ((memcmp (versions_xattr, allzero, sizeof (allzero)) == 0) && - (memcmp (dirty_xattr, allzero, sizeof (allzero)) == 0) && - (size_xattr == 0)) { - ret = 0; - goto out; - } + if ((memcmp(versions_xattr, allzero, sizeof(allzero)) == 0) && + (memcmp(dirty_xattr, allzero, sizeof(allzero)) == 0) && + (size_xattr == 0)) { + ret = 0; + goto out; + } - ret = syncop_fxattrop (ec->xl_list[idx], fd, - GF_XATTROP_ADD_ARRAY64, xattr, NULL, NULL, NULL); + ret = syncop_fxattrop(ec->xl_list[idx], fd, GF_XATTROP_ADD_ARRAY64, xattr, + NULL, NULL, NULL); out: - return ret; + return ret; } int -__ec_fd_data_adjust_versions (call_frame_t *frame, ec_t *ec, fd_t *fd, - unsigned char *sources, unsigned char *healed_sinks, - uint64_t *versions, uint64_t *dirty, uint64_t *size) -{ - dict_t *xattr = NULL; - int i = 0; - int ret = 0; - int op_ret = 0; - int source = -1; - gf_boolean_t erase_dirty = _gf_false; - - xattr = dict_new (); - if (!xattr) { - op_ret = -ENOMEM; - goto out; - } - - /* dirty xattr represents if the file needs heal. Unless all the - * copies are healed, don't erase it */ - if (EC_COUNT (sources, ec->nodes) + - EC_COUNT (healed_sinks, ec->nodes) == ec->nodes) - erase_dirty = _gf_true; +__ec_fd_data_adjust_versions(call_frame_t *frame, ec_t *ec, fd_t *fd, + unsigned char *sources, + unsigned char *healed_sinks, uint64_t *versions, + uint64_t *dirty, uint64_t *size) +{ + dict_t *xattr = NULL; + int i = 0; + int ret = 0; + int op_ret = 0; + int source = -1; + gf_boolean_t erase_dirty = _gf_false; + + xattr = dict_new(); + if (!xattr) { + op_ret = -ENOMEM; + goto out; + } - for (i = 0; i < ec->nodes; i++) { - if (sources[i]) { - source = i; - break; - } - } + /* dirty xattr represents if the file needs heal. Unless all the + * copies are healed, don't erase it */ + if (EC_COUNT(sources, ec->nodes) + EC_COUNT(healed_sinks, ec->nodes) == + ec->nodes) + erase_dirty = _gf_true; - if (source == -1) { - op_ret = -ENOTCONN; - goto out; + for (i = 0; i < ec->nodes; i++) { + if (sources[i]) { + source = i; + break; } + } - for (i = 0; i < ec->nodes; i++) { - if (healed_sinks[i]) { - ret = ec_data_undo_pending (frame, ec, fd, xattr, - versions, dirty, size, - source, erase_dirty, i); - if (ret < 0) - goto out; - } - - } + if (source == -1) { + op_ret = -ENOTCONN; + goto out; + } - if (!erase_dirty) + for (i = 0; i < ec->nodes; i++) { + if (healed_sinks[i]) { + ret = ec_data_undo_pending(frame, ec, fd, xattr, versions, dirty, + size, source, erase_dirty, i); + if (ret < 0) goto out; + } + } - for (i = 0; i < ec->nodes; i++) { - if (sources[i]) { - ret = ec_data_undo_pending (frame, ec, fd, xattr, - versions, dirty, size, - source, erase_dirty, i); - if (ret < 0) - continue; - } + if (!erase_dirty) + goto out; + for (i = 0; i < ec->nodes; i++) { + if (sources[i]) { + ret = ec_data_undo_pending(frame, ec, fd, xattr, versions, dirty, + size, source, erase_dirty, i); + if (ret < 0) + continue; } + } out: - if (xattr) - dict_unref (xattr); - return op_ret; + if (xattr) + dict_unref(xattr); + return op_ret; } int -ec_restore_time_and_adjust_versions (call_frame_t *frame, ec_t *ec, fd_t *fd, - unsigned char *sources, - unsigned char *healed_sinks, - uint64_t *versions, uint64_t *dirty, - uint64_t *size) -{ - unsigned char *locked_on = NULL; - unsigned char *participants = NULL; - unsigned char *output = NULL; - default_args_cbk_t *replies = NULL; - unsigned char *postsh_sources = NULL; - unsigned char *postsh_healed_sinks = NULL; - unsigned char *postsh_trim = NULL; - uint64_t *postsh_versions = NULL; - uint64_t *postsh_dirty = NULL; - uint64_t *postsh_size = NULL; - int ret = 0; - int i = 0; - struct iatt source_buf = {0}; - loc_t loc = {0}; - - locked_on = alloca0(ec->nodes); - output = alloca0(ec->nodes); - participants = alloca0(ec->nodes); - postsh_sources = alloca0(ec->nodes); - postsh_healed_sinks = alloca0(ec->nodes); - postsh_trim = alloca0(ec->nodes); - postsh_versions = alloca0(ec->nodes * sizeof (*postsh_versions)); - postsh_dirty = alloca0(ec->nodes * sizeof (*postsh_dirty)); - postsh_size = alloca0(ec->nodes * sizeof (*postsh_size)); - - for (i = 0; i < ec->nodes; i++) { - if (healed_sinks[i] || sources[i]) - participants[i] = 1; - } - - EC_REPLIES_ALLOC (replies, ec->nodes); - ret = cluster_inodelk (ec->xl_list, participants, ec->nodes, replies, - locked_on, frame, ec->xl, ec->xl->name, - fd->inode, 0, 0); - { - if (ret <= ec->fragments) { - gf_msg_debug (ec->xl->name, 0, "%s: Skipping heal " - "as only %d number of subvolumes could " - "be locked", uuid_utoa (fd->inode->gfid), ret); - ret = -ENOTCONN; - goto unlock; - } +ec_restore_time_and_adjust_versions(call_frame_t *frame, ec_t *ec, fd_t *fd, + unsigned char *sources, + unsigned char *healed_sinks, + uint64_t *versions, uint64_t *dirty, + uint64_t *size) +{ + unsigned char *locked_on = NULL; + unsigned char *participants = NULL; + unsigned char *output = NULL; + default_args_cbk_t *replies = NULL; + unsigned char *postsh_sources = NULL; + unsigned char *postsh_healed_sinks = NULL; + unsigned char *postsh_trim = NULL; + uint64_t *postsh_versions = NULL; + uint64_t *postsh_dirty = NULL; + uint64_t *postsh_size = NULL; + int ret = 0; + int i = 0; + struct iatt source_buf = {0}; + loc_t loc = {0}; + + locked_on = alloca0(ec->nodes); + output = alloca0(ec->nodes); + participants = alloca0(ec->nodes); + postsh_sources = alloca0(ec->nodes); + postsh_healed_sinks = alloca0(ec->nodes); + postsh_trim = alloca0(ec->nodes); + postsh_versions = alloca0(ec->nodes * sizeof(*postsh_versions)); + postsh_dirty = alloca0(ec->nodes * sizeof(*postsh_dirty)); + postsh_size = alloca0(ec->nodes * sizeof(*postsh_size)); + + for (i = 0; i < ec->nodes; i++) { + if (healed_sinks[i] || sources[i]) + participants[i] = 1; + } - ret = __ec_heal_data_prepare (frame, ec, fd, locked_on, - postsh_versions, postsh_dirty, - postsh_size, postsh_sources, - postsh_healed_sinks, postsh_trim, - &source_buf); - if (ret < 0) - goto unlock; - - loc.inode = inode_ref (fd->inode); - gf_uuid_copy (loc.gfid, fd->inode->gfid); - ret = cluster_setattr (ec->xl_list, healed_sinks, ec->nodes, - replies, output, frame, ec->xl, &loc, - &source_buf, - GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME, - NULL); - EC_INTERSECT (healed_sinks, healed_sinks, output, ec->nodes); - if (EC_COUNT (healed_sinks, ec->nodes) == 0) { - ret = -ENOTCONN; - goto unlock; - } - ret = __ec_fd_data_adjust_versions (frame, ec, fd, sources, - healed_sinks, versions, dirty, size); - } + EC_REPLIES_ALLOC(replies, ec->nodes); + ret = cluster_inodelk(ec->xl_list, participants, ec->nodes, replies, + locked_on, frame, ec->xl, ec->xl->name, fd->inode, 0, + 0); + { + if (ret <= ec->fragments) { + gf_msg_debug(ec->xl->name, 0, + "%s: Skipping heal " + "as only %d number of subvolumes could " + "be locked", + uuid_utoa(fd->inode->gfid), ret); + ret = -ENOTCONN; + goto unlock; + } + + ret = __ec_heal_data_prepare(frame, ec, fd, locked_on, postsh_versions, + postsh_dirty, postsh_size, postsh_sources, + postsh_healed_sinks, postsh_trim, + &source_buf); + if (ret < 0) + goto unlock; + + loc.inode = inode_ref(fd->inode); + gf_uuid_copy(loc.gfid, fd->inode->gfid); + ret = cluster_setattr(ec->xl_list, healed_sinks, ec->nodes, replies, + output, frame, ec->xl, &loc, &source_buf, + GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME, NULL); + EC_INTERSECT(healed_sinks, healed_sinks, output, ec->nodes); + if (EC_COUNT(healed_sinks, ec->nodes) == 0) { + ret = -ENOTCONN; + goto unlock; + } + ret = __ec_fd_data_adjust_versions(frame, ec, fd, sources, healed_sinks, + versions, dirty, size); + } unlock: - cluster_uninodelk (ec->xl_list, locked_on, ec->nodes, replies, output, - frame, ec->xl, ec->xl->name, fd->inode, 0, 0); - cluster_replies_wipe (replies, ec->nodes); - loc_wipe (&loc); - return ret; + cluster_uninodelk(ec->xl_list, locked_on, ec->nodes, replies, output, frame, + ec->xl, ec->xl->name, fd->inode, 0, 0); + cluster_replies_wipe(replies, ec->nodes); + loc_wipe(&loc); + return ret; } int -__ec_heal_data (call_frame_t *frame, ec_t *ec, fd_t *fd, unsigned char *heal_on, - unsigned char *sources, unsigned char *healed_sinks) +__ec_heal_data(call_frame_t *frame, ec_t *ec, fd_t *fd, unsigned char *heal_on, + unsigned char *sources, unsigned char *healed_sinks) { - unsigned char *locked_on = NULL; - unsigned char *output = NULL; - uint64_t *versions = NULL; - uint64_t *dirty = NULL; - uint64_t *size = NULL; - unsigned char *trim = NULL; - default_args_cbk_t *replies = NULL; - int ret = 0; - int source = 0; - - locked_on = alloca0(ec->nodes); - output = alloca0(ec->nodes); - trim = alloca0 (ec->nodes); - versions = alloca0 (ec->nodes * sizeof (*versions)); - dirty = alloca0 (ec->nodes * sizeof (*dirty)); - size = alloca0 (ec->nodes * sizeof (*size)); - - EC_REPLIES_ALLOC (replies, ec->nodes); - ret = cluster_inodelk (ec->xl_list, heal_on, ec->nodes, replies, - locked_on, frame, ec->xl, ec->xl->name, - fd->inode, 0, 0); - { - if (ret <= ec->fragments) { - gf_msg_debug (ec->xl->name, 0, "%s: Skipping heal " - "as only %d number of subvolumes could " - "be locked", uuid_utoa (fd->inode->gfid), ret); - ret = -ENOTCONN; - goto unlock; - } - - ret = __ec_heal_data_prepare (frame, ec, fd, locked_on, - versions, dirty, size, sources, - healed_sinks, trim, NULL); - if (ret < 0) - goto unlock; - - if (EC_COUNT(healed_sinks, ec->nodes) == 0) { - ret = __ec_fd_data_adjust_versions (frame, ec, fd, - sources, - healed_sinks, versions, dirty, size); - goto unlock; - } + unsigned char *locked_on = NULL; + unsigned char *output = NULL; + uint64_t *versions = NULL; + uint64_t *dirty = NULL; + uint64_t *size = NULL; + unsigned char *trim = NULL; + default_args_cbk_t *replies = NULL; + int ret = 0; + int source = 0; + + locked_on = alloca0(ec->nodes); + output = alloca0(ec->nodes); + trim = alloca0(ec->nodes); + versions = alloca0(ec->nodes * sizeof(*versions)); + dirty = alloca0(ec->nodes * sizeof(*dirty)); + size = alloca0(ec->nodes * sizeof(*size)); + + EC_REPLIES_ALLOC(replies, ec->nodes); + ret = cluster_inodelk(ec->xl_list, heal_on, ec->nodes, replies, locked_on, + frame, ec->xl, ec->xl->name, fd->inode, 0, 0); + { + if (ret <= ec->fragments) { + gf_msg_debug(ec->xl->name, 0, + "%s: Skipping heal " + "as only %d number of subvolumes could " + "be locked", + uuid_utoa(fd->inode->gfid), ret); + ret = -ENOTCONN; + goto unlock; + } - source = ret; - ret = __ec_heal_mark_sinks (frame, ec, fd, versions, - healed_sinks); - if (ret < 0) - goto unlock; + ret = __ec_heal_data_prepare(frame, ec, fd, locked_on, versions, dirty, + size, sources, healed_sinks, trim, NULL); + if (ret < 0) + goto unlock; - ret = __ec_heal_trim_sinks (frame, ec, fd, healed_sinks, - trim, size[source]); + if (EC_COUNT(healed_sinks, ec->nodes) == 0) { + ret = __ec_fd_data_adjust_versions( + frame, ec, fd, sources, healed_sinks, versions, dirty, size); + goto unlock; } -unlock: - cluster_uninodelk (ec->xl_list, locked_on, ec->nodes, replies, output, - frame, ec->xl, ec->xl->name, fd->inode, 0, 0); + + source = ret; + ret = __ec_heal_mark_sinks(frame, ec, fd, versions, healed_sinks); if (ret < 0) - goto out; + goto unlock; - if (EC_COUNT(healed_sinks, ec->nodes) == 0) - goto out; + ret = __ec_heal_trim_sinks(frame, ec, fd, healed_sinks, trim, + size[source]); + } +unlock: + cluster_uninodelk(ec->xl_list, locked_on, ec->nodes, replies, output, frame, + ec->xl, ec->xl->name, fd->inode, 0, 0); + if (ret < 0) + goto out; - gf_msg_debug (ec->xl->name, 0, "%s: sources: %d, sinks: " - "%d", uuid_utoa (fd->inode->gfid), - EC_COUNT (sources, ec->nodes), - EC_COUNT (healed_sinks, ec->nodes)); + if (EC_COUNT(healed_sinks, ec->nodes) == 0) + goto out; - ret = ec_rebuild_data (frame, ec, fd, size[source], sources, - healed_sinks); - if (ret < 0) - goto out; + gf_msg_debug(ec->xl->name, 0, + "%s: sources: %d, sinks: " + "%d", + uuid_utoa(fd->inode->gfid), EC_COUNT(sources, ec->nodes), + EC_COUNT(healed_sinks, ec->nodes)); + + ret = ec_rebuild_data(frame, ec, fd, size[source], sources, healed_sinks); + if (ret < 0) + goto out; - ret = ec_restore_time_and_adjust_versions (frame, ec, fd, sources, - healed_sinks, versions, - dirty, size); + ret = ec_restore_time_and_adjust_versions( + frame, ec, fd, sources, healed_sinks, versions, dirty, size); out: - cluster_replies_wipe (replies, ec->nodes); - return ret; + cluster_replies_wipe(replies, ec->nodes); + return ret; } int -ec_heal_data (call_frame_t *frame, ec_t *ec, gf_boolean_t block, inode_t *inode, - unsigned char *sources, unsigned char *healed_sinks) -{ - unsigned char *locked_on = NULL; - unsigned char *up_subvols = NULL; - unsigned char *output = NULL; - default_args_cbk_t *replies = NULL; - fd_t *fd = NULL; - loc_t loc = {0}; - char selfheal_domain[1024] = {0}; - int ret = 0; - - EC_REPLIES_ALLOC (replies, ec->nodes); - - locked_on = alloca0(ec->nodes); - output = alloca0(ec->nodes); - up_subvols = alloca0(ec->nodes); - loc.inode = inode_ref (inode); - gf_uuid_copy (loc.gfid, inode->gfid); - - fd = fd_create (inode, 0); - if (!fd) { - ret = -ENOMEM; - goto out; - } +ec_heal_data(call_frame_t *frame, ec_t *ec, gf_boolean_t block, inode_t *inode, + unsigned char *sources, unsigned char *healed_sinks) +{ + unsigned char *locked_on = NULL; + unsigned char *up_subvols = NULL; + unsigned char *output = NULL; + default_args_cbk_t *replies = NULL; + fd_t *fd = NULL; + loc_t loc = {0}; + char selfheal_domain[1024] = {0}; + int ret = 0; + + EC_REPLIES_ALLOC(replies, ec->nodes); + + locked_on = alloca0(ec->nodes); + output = alloca0(ec->nodes); + up_subvols = alloca0(ec->nodes); + loc.inode = inode_ref(inode); + gf_uuid_copy(loc.gfid, inode->gfid); + + fd = fd_create(inode, 0); + if (!fd) { + ret = -ENOMEM; + goto out; + } - ec_mask_to_char_array (ec->xl_up, up_subvols, ec->nodes); + ec_mask_to_char_array(ec->xl_up, up_subvols, ec->nodes); - ret = cluster_open (ec->xl_list, up_subvols, ec->nodes, replies, output, - frame, ec->xl, &loc, O_RDWR|O_LARGEFILE, fd, NULL); - if (ret <= ec->fragments) { - ret = -ENOTCONN; - goto out; - } + ret = cluster_open(ec->xl_list, up_subvols, ec->nodes, replies, output, + frame, ec->xl, &loc, O_RDWR | O_LARGEFILE, fd, NULL); + if (ret <= ec->fragments) { + ret = -ENOTCONN; + goto out; + } - fd_bind (fd); - sprintf (selfheal_domain, "%s:self-heal", ec->xl->name); - /*If other processes are already doing the heal, don't block*/ - if (block) { - ret = cluster_inodelk (ec->xl_list, output, ec->nodes, replies, - locked_on, frame, ec->xl, - selfheal_domain, inode, 0, 0); - } else { - ret = cluster_tiebreaker_inodelk (ec->xl_list, output, - ec->nodes, replies, locked_on, - frame, ec->xl, - selfheal_domain, inode, 0, 0); - } - { - if (ret <= ec->fragments) { - gf_msg_debug (ec->xl->name, 0, "%s: Skipping heal " - "as only %d number of subvolumes could " - "be locked", uuid_utoa (inode->gfid), ret); - ret = -ENOTCONN; - goto unlock; - } - ret = __ec_heal_data (frame, ec, fd, locked_on, sources, - healed_sinks); - } + fd_bind(fd); + sprintf(selfheal_domain, "%s:self-heal", ec->xl->name); + /*If other processes are already doing the heal, don't block*/ + if (block) { + ret = cluster_inodelk(ec->xl_list, output, ec->nodes, replies, + locked_on, frame, ec->xl, selfheal_domain, inode, + 0, 0); + } else { + ret = cluster_tiebreaker_inodelk(ec->xl_list, output, ec->nodes, + replies, locked_on, frame, ec->xl, + selfheal_domain, inode, 0, 0); + } + { + if (ret <= ec->fragments) { + gf_msg_debug(ec->xl->name, 0, + "%s: Skipping heal " + "as only %d number of subvolumes could " + "be locked", + uuid_utoa(inode->gfid), ret); + ret = -ENOTCONN; + goto unlock; + } + ret = __ec_heal_data(frame, ec, fd, locked_on, sources, healed_sinks); + } unlock: - cluster_uninodelk (ec->xl_list, locked_on, ec->nodes, replies, output, - frame, ec->xl, selfheal_domain, inode, 0, 0); + cluster_uninodelk(ec->xl_list, locked_on, ec->nodes, replies, output, frame, + ec->xl, selfheal_domain, inode, 0, 0); out: - if (fd) - fd_unref (fd); - loc_wipe (&loc); - cluster_replies_wipe (replies, ec->nodes); - return ret; + if (fd) + fd_unref(fd); + loc_wipe(&loc); + cluster_replies_wipe(replies, ec->nodes); + return ret; } void -ec_heal_do (xlator_t *this, void *data, loc_t *loc, int32_t partial) -{ - call_frame_t *frame = NULL; - unsigned char *participants = NULL; - unsigned char *msources = NULL; - unsigned char *mhealed_sinks = NULL; - unsigned char *sources = NULL; - unsigned char *healed_sinks = NULL; - ec_t *ec = NULL; - int ret = 0; - int op_ret = 0; - int op_errno = 0; - intptr_t mgood = 0; - intptr_t mbad = 0; - intptr_t good = 0; - intptr_t bad = 0; - ec_fop_data_t *fop = data; - gf_boolean_t blocking = _gf_false; - ec_heal_need_t need_heal = EC_HEAL_NONEED; - unsigned char *up_subvols = NULL; - char up_bricks[32]; - - ec = this->private; - - /* If it is heal request from getxattr, complete the heal and then - * unwind, if it is ec_heal with NULL as frame then no need to block - * the heal as the caller doesn't care about its completion. In case - * of heald whichever gets tiebreaking inodelk will take care of the - * heal, so no need to block*/ - if (fop->req_frame && !ec->shd.iamshd) - blocking = _gf_true; - - frame = create_frame (this, this->ctx->pool); - if (!frame) - goto out; +ec_heal_do(xlator_t *this, void *data, loc_t *loc, int32_t partial) +{ + call_frame_t *frame = NULL; + unsigned char *participants = NULL; + unsigned char *msources = NULL; + unsigned char *mhealed_sinks = NULL; + unsigned char *sources = NULL; + unsigned char *healed_sinks = NULL; + ec_t *ec = NULL; + int ret = 0; + int op_ret = 0; + int op_errno = 0; + intptr_t mgood = 0; + intptr_t mbad = 0; + intptr_t good = 0; + intptr_t bad = 0; + ec_fop_data_t *fop = data; + gf_boolean_t blocking = _gf_false; + ec_heal_need_t need_heal = EC_HEAL_NONEED; + unsigned char *up_subvols = NULL; + char up_bricks[32]; + + ec = this->private; + + /* If it is heal request from getxattr, complete the heal and then + * unwind, if it is ec_heal with NULL as frame then no need to block + * the heal as the caller doesn't care about its completion. In case + * of heald whichever gets tiebreaking inodelk will take care of the + * heal, so no need to block*/ + if (fop->req_frame && !ec->shd.iamshd) + blocking = _gf_true; + + frame = create_frame(this, this->ctx->pool); + if (!frame) + goto out; - ec_owner_set(frame, frame->root); - /*Do heal as root*/ - frame->root->uid = 0; - frame->root->gid = 0; - /*Mark the fops as internal*/ - frame->root->pid = GF_CLIENT_PID_SELF_HEALD; - participants = alloca0(ec->nodes); - ec_mask_to_char_array (ec->xl_up, participants, ec->nodes); - - up_subvols = alloca0(ec->nodes); - ec_mask_to_char_array (ec->xl_up, up_subvols, ec->nodes); - - if (loc->name && strlen (loc->name)) { - ret = ec_heal_name (frame, ec, loc->parent, (char *)loc->name, - participants); - if (ret == 0) { - gf_msg_debug (this->name, 0, "%s: name heal " - "successful on %lX", loc->path, - ec_char_array_to_mask (participants, - ec->nodes)); - } else { - gf_msg_debug (this->name, 0, "%s: name heal " - "failed. ret = %d, subvolumes up = %s", - loc->path, ret, - ec_bin(up_bricks, sizeof(up_bricks), ec->xl_up, - ec->nodes)); - } + ec_owner_set(frame, frame->root); + /*Do heal as root*/ + frame->root->uid = 0; + frame->root->gid = 0; + /*Mark the fops as internal*/ + frame->root->pid = GF_CLIENT_PID_SELF_HEALD; + participants = alloca0(ec->nodes); + ec_mask_to_char_array(ec->xl_up, participants, ec->nodes); + + up_subvols = alloca0(ec->nodes); + ec_mask_to_char_array(ec->xl_up, up_subvols, ec->nodes); + + if (loc->name && strlen(loc->name)) { + ret = ec_heal_name(frame, ec, loc->parent, (char *)loc->name, + participants); + if (ret == 0) { + gf_msg_debug(this->name, 0, + "%s: name heal " + "successful on %lX", + loc->path, + ec_char_array_to_mask(participants, ec->nodes)); + } else { + gf_msg_debug( + this->name, 0, + "%s: name heal " + "failed. ret = %d, subvolumes up = %s", + loc->path, ret, + ec_bin(up_bricks, sizeof(up_bricks), ec->xl_up, ec->nodes)); } + } - /* Mount triggers heal only when it detects that it must need heal, shd - * triggers heals periodically which need not be thorough*/ - ec_heal_inspect (frame, ec, loc->inode, up_subvols, _gf_false, - !ec->shd.iamshd, &need_heal); + /* Mount triggers heal only when it detects that it must need heal, shd + * triggers heals periodically which need not be thorough*/ + ec_heal_inspect(frame, ec, loc->inode, up_subvols, _gf_false, + !ec->shd.iamshd, &need_heal); - if (need_heal == EC_HEAL_NONEED) { - gf_msg (ec->xl->name, GF_LOG_DEBUG, 0, - EC_MSG_HEAL_FAIL, "Heal is not required for : %s ", - uuid_utoa(loc->gfid)); - goto out; - } + if (need_heal == EC_HEAL_NONEED) { + gf_msg(ec->xl->name, GF_LOG_DEBUG, 0, EC_MSG_HEAL_FAIL, + "Heal is not required for : %s ", uuid_utoa(loc->gfid)); + goto out; + } - msources = alloca0(ec->nodes); - mhealed_sinks = alloca0(ec->nodes); - ret = ec_heal_metadata (frame, ec, loc->inode, msources, mhealed_sinks); - if (ret == 0) { - mgood = ec_char_array_to_mask (msources, ec->nodes); - mbad = ec_char_array_to_mask (mhealed_sinks, ec->nodes); - } else { - op_ret = -1; - op_errno = -ret; - } - sources = alloca0(ec->nodes); - healed_sinks = alloca0(ec->nodes); - if (IA_ISREG (loc->inode->ia_type)) { - ret = ec_heal_data (frame, ec, blocking, loc->inode, sources, - healed_sinks); - } else if (IA_ISDIR (loc->inode->ia_type) && !partial) { - ret = ec_heal_entry (frame, ec, loc->inode, sources, - healed_sinks); - } else { - ret = 0; - memcpy (sources, participants, ec->nodes); - memcpy (healed_sinks, participants, ec->nodes); - } + msources = alloca0(ec->nodes); + mhealed_sinks = alloca0(ec->nodes); + ret = ec_heal_metadata(frame, ec, loc->inode, msources, mhealed_sinks); + if (ret == 0) { + mgood = ec_char_array_to_mask(msources, ec->nodes); + mbad = ec_char_array_to_mask(mhealed_sinks, ec->nodes); + } else { + op_ret = -1; + op_errno = -ret; + } + sources = alloca0(ec->nodes); + healed_sinks = alloca0(ec->nodes); + if (IA_ISREG(loc->inode->ia_type)) { + ret = ec_heal_data(frame, ec, blocking, loc->inode, sources, + healed_sinks); + } else if (IA_ISDIR(loc->inode->ia_type) && !partial) { + ret = ec_heal_entry(frame, ec, loc->inode, sources, healed_sinks); + } else { + ret = 0; + memcpy(sources, participants, ec->nodes); + memcpy(healed_sinks, participants, ec->nodes); + } - if (ret == 0) { - good = ec_char_array_to_mask (sources, ec->nodes); - bad = ec_char_array_to_mask (healed_sinks, ec->nodes); - } else { - op_ret = -1; - op_errno = -ret; - } + if (ret == 0) { + good = ec_char_array_to_mask(sources, ec->nodes); + bad = ec_char_array_to_mask(healed_sinks, ec->nodes); + } else { + op_ret = -1; + op_errno = -ret; + } out: - if (fop->cbks.heal) { - fop->cbks.heal (fop->req_frame, fop, fop->xl, op_ret, - op_errno, ec_char_array_to_mask (participants, - ec->nodes), - mgood & good, mbad & bad, NULL); - } - if (frame) - STACK_DESTROY (frame->root); - return; + if (fop->cbks.heal) { + fop->cbks.heal(fop->req_frame, fop, fop->xl, op_ret, op_errno, + ec_char_array_to_mask(participants, ec->nodes), + mgood & good, mbad & bad, NULL); + } + if (frame) + STACK_DESTROY(frame->root); + return; } int -ec_synctask_heal_wrap (void *opaque) +ec_synctask_heal_wrap(void *opaque) { - ec_fop_data_t *fop = opaque; - ec_heal_do (fop->xl, fop, &fop->loc[0], fop->int32); - return 0; + ec_fop_data_t *fop = opaque; + ec_heal_do(fop->xl, fop, &fop->loc[0], fop->int32); + return 0; } int -ec_heal_done (int ret, call_frame_t *heal, void *opaque) +ec_heal_done(int ret, call_frame_t *heal, void *opaque) { - if (opaque) - ec_fop_data_release (opaque); - return 0; + if (opaque) + ec_fop_data_release(opaque); + return 0; } -ec_fop_data_t* -__ec_dequeue_heals (ec_t *ec) +ec_fop_data_t * +__ec_dequeue_heals(ec_t *ec) { - ec_fop_data_t *fop = NULL; + ec_fop_data_t *fop = NULL; - if (list_empty (&ec->heal_waiting)) - goto none; + if (list_empty(&ec->heal_waiting)) + goto none; - if ((ec->background_heals > 0) && (ec->healers >= ec->background_heals)) - goto none; + if ((ec->background_heals > 0) && (ec->healers >= ec->background_heals)) + goto none; - fop = list_entry(ec->heal_waiting.next, ec_fop_data_t, healer); - ec->heal_waiters--; - list_del_init(&fop->healer); - list_add(&fop->healer, &ec->healing); - ec->healers++; - return fop; + fop = list_entry(ec->heal_waiting.next, ec_fop_data_t, healer); + ec->heal_waiters--; + list_del_init(&fop->healer); + list_add(&fop->healer, &ec->healing); + ec->healers++; + return fop; none: - gf_msg_debug (ec->xl->name, 0, "Num healers: %d, Num Waiters: %d", - ec->healers, ec->heal_waiters); - return NULL; + gf_msg_debug(ec->xl->name, 0, "Num healers: %d, Num Waiters: %d", + ec->healers, ec->heal_waiters); + return NULL; } void -ec_heal_fail (ec_t *ec, ec_fop_data_t *fop) +ec_heal_fail(ec_t *ec, ec_fop_data_t *fop) { - if (fop->cbks.heal) { - fop->cbks.heal (fop->req_frame, NULL, ec->xl, -1, fop->error, 0, 0, - 0, NULL); - } - ec_fop_data_release (fop); + if (fop->cbks.heal) { + fop->cbks.heal(fop->req_frame, NULL, ec->xl, -1, fop->error, 0, 0, 0, + NULL); + } + ec_fop_data_release(fop); } void -ec_launch_heal (ec_t *ec, ec_fop_data_t *fop) +ec_launch_heal(ec_t *ec, ec_fop_data_t *fop) { - int ret = 0; + int ret = 0; - ret = synctask_new (ec->xl->ctx->env, ec_synctask_heal_wrap, - ec_heal_done, NULL, fop); - if (ret < 0) { - ec_fop_set_error(fop, ENOMEM); - ec_heal_fail (ec, fop); - } + ret = synctask_new(ec->xl->ctx->env, ec_synctask_heal_wrap, ec_heal_done, + NULL, fop); + if (ret < 0) { + ec_fop_set_error(fop, ENOMEM); + ec_heal_fail(ec, fop); + } } void -ec_handle_healers_done (ec_fop_data_t *fop) +ec_handle_healers_done(ec_fop_data_t *fop) { - ec_t *ec = fop->xl->private; - ec_fop_data_t *heal_fop = NULL; + ec_t *ec = fop->xl->private; + ec_fop_data_t *heal_fop = NULL; - if (list_empty (&fop->healer)) - return; + if (list_empty(&fop->healer)) + return; - LOCK (&ec->lock); + LOCK(&ec->lock); - list_del_init (&fop->healer); + list_del_init(&fop->healer); - do { - ec->healers--; - heal_fop = __ec_dequeue_heals (ec); + do { + ec->healers--; + heal_fop = __ec_dequeue_heals(ec); - if ((heal_fop != NULL) && ec->shutdown) { - /* This will prevent ec_handle_healers_done() to be - * called recursively. That would be problematic if - * the queue is too big. */ - list_del_init(&heal_fop->healer); + if ((heal_fop != NULL) && ec->shutdown) { + /* This will prevent ec_handle_healers_done() to be + * called recursively. That would be problematic if + * the queue is too big. */ + list_del_init(&heal_fop->healer); - UNLOCK(&ec->lock); + UNLOCK(&ec->lock); - ec_fop_set_error(fop, ENOTCONN); - ec_heal_fail(ec, heal_fop); + ec_fop_set_error(fop, ENOTCONN); + ec_heal_fail(ec, heal_fop); - LOCK(&ec->lock); - } - } while ((heal_fop != NULL) && ec->shutdown); + LOCK(&ec->lock); + } + } while ((heal_fop != NULL) && ec->shutdown); - UNLOCK (&ec->lock); + UNLOCK(&ec->lock); - if (heal_fop) - ec_launch_heal (ec, heal_fop); + if (heal_fop) + ec_launch_heal(ec, heal_fop); } void -ec_heal_throttle (xlator_t *this, ec_fop_data_t *fop) -{ - gf_boolean_t can_heal = _gf_true; - ec_t *ec = this->private; - - if (fop->req_frame == NULL) { - - LOCK (&ec->lock); - { - if ((ec->background_heals > 0) && - (ec->heal_wait_qlen + ec->background_heals) > - (ec->heal_waiters + ec->healers)) { - list_add_tail(&fop->healer, &ec->heal_waiting); - ec->heal_waiters++; - fop = __ec_dequeue_heals (ec); - } else { - can_heal = _gf_false; - } - } - UNLOCK (&ec->lock); - } +ec_heal_throttle(xlator_t *this, ec_fop_data_t *fop) +{ + gf_boolean_t can_heal = _gf_true; + ec_t *ec = this->private; - if (can_heal) { - if (fop) - ec_launch_heal (ec, fop); - } else { - gf_msg_debug (this->name, 0, "Max number of heals are " - "pending, background self-heal rejected"); - ec_fop_set_error(fop, EBUSY); - ec_heal_fail (ec, fop); - } + if (fop->req_frame == NULL) { + LOCK(&ec->lock); + { + if ((ec->background_heals > 0) && + (ec->heal_wait_qlen + ec->background_heals) > + (ec->heal_waiters + ec->healers)) { + list_add_tail(&fop->healer, &ec->heal_waiting); + ec->heal_waiters++; + fop = __ec_dequeue_heals(ec); + } else { + can_heal = _gf_false; + } + } + UNLOCK(&ec->lock); + } + + if (can_heal) { + if (fop) + ec_launch_heal(ec, fop); + } else { + gf_msg_debug(this->name, 0, + "Max number of heals are " + "pending, background self-heal rejected"); + ec_fop_set_error(fop, EBUSY); + ec_heal_fail(ec, fop); + } } void -ec_heal (call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_heal_cbk_t func, void *data, loc_t *loc, - int32_t partial, dict_t *xdata) +ec_heal(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_heal_cbk_t func, void *data, loc_t *loc, int32_t partial, + dict_t *xdata) { - ec_cbk_t callback = { .heal = func }; + ec_cbk_t callback = {.heal = func}; ec_fop_data_t *fop = NULL; int32_t err = EINVAL; - gf_msg_trace ("ec", 0, "EC(HEAL) %p", frame); + gf_msg_trace("ec", 0, "EC(HEAL) %p", frame); VALIDATE_OR_GOTO(this, fail); GF_VALIDATE_OR_GOTO(this->name, this->private, fail); - if (!loc || !loc->inode || gf_uuid_is_null (loc->inode->gfid)) - goto fail; + if (!loc || !loc->inode || gf_uuid_is_null(loc->inode->gfid)) + goto fail; if (frame && frame->local) - goto fail; - fop = ec_fop_data_allocate (frame, this, EC_FOP_HEAL, 0, target, minimum, - NULL, NULL, callback, data); + goto fail; + fop = ec_fop_data_allocate(frame, this, EC_FOP_HEAL, 0, target, minimum, + NULL, NULL, callback, data); err = ENOMEM; @@ -2738,454 +2721,446 @@ ec_heal (call_frame_t *frame, xlator_t *this, uintptr_t target, if (xdata) fop->xdata = dict_ref(xdata); - ec_heal_throttle (this, fop); + ec_heal_throttle(this, fop); return; fail: if (fop) - ec_fop_data_release (fop); + ec_fop_data_release(fop); if (func) - func (frame, NULL, this, -1, err, 0, 0, 0, NULL); + func(frame, NULL, this, -1, err, 0, 0, 0, NULL); } int -ec_replace_heal_done (int ret, call_frame_t *heal, void *opaque) +ec_replace_heal_done(int ret, call_frame_t *heal, void *opaque) { - ec_t *ec = opaque; + ec_t *ec = opaque; - gf_msg_debug (ec->xl->name, 0, - "getxattr on bricks is done ret %d", ret); - return 0; + gf_msg_debug(ec->xl->name, 0, "getxattr on bricks is done ret %d", ret); + return 0; } int32_t -ec_replace_heal (ec_t *ec, inode_t *inode) +ec_replace_heal(ec_t *ec, inode_t *inode) { - loc_t loc = {0}; - int ret = 0; + loc_t loc = {0}; + int ret = 0; - loc.inode = inode_ref (inode); - gf_uuid_copy (loc.gfid, inode->gfid); - ret = syncop_getxattr (ec->xl, &loc, NULL, EC_XATTR_HEAL, - NULL, NULL); - if (ret < 0) - gf_msg_debug (ec->xl->name, 0, - "Heal failed for replace brick ret = %d", ret); - - /* Once the root inode has been checked, it might have triggered a - * self-heal on it after a replace brick command or for some other - * reason. It can also happen that the volume already had damaged - * files in the index, even if the heal on the root directory failed. - * In both cases we need to wake all index healers to continue - * healing remaining entries that are marked as dirty. */ - ec_shd_index_healer_wake(ec); - - loc_wipe (&loc); - return ret; + loc.inode = inode_ref(inode); + gf_uuid_copy(loc.gfid, inode->gfid); + ret = syncop_getxattr(ec->xl, &loc, NULL, EC_XATTR_HEAL, NULL, NULL); + if (ret < 0) + gf_msg_debug(ec->xl->name, 0, "Heal failed for replace brick ret = %d", + ret); + + /* Once the root inode has been checked, it might have triggered a + * self-heal on it after a replace brick command or for some other + * reason. It can also happen that the volume already had damaged + * files in the index, even if the heal on the root directory failed. + * In both cases we need to wake all index healers to continue + * healing remaining entries that are marked as dirty. */ + ec_shd_index_healer_wake(ec); + + loc_wipe(&loc); + return ret; } int32_t -ec_replace_brick_heal_wrap (void *opaque) +ec_replace_brick_heal_wrap(void *opaque) { - ec_t *ec = opaque; - inode_table_t *itable = NULL; - int32_t ret = -1; + ec_t *ec = opaque; + inode_table_t *itable = NULL; + int32_t ret = -1; - if (ec->xl->itable) - itable = ec->xl->itable; - else - goto out; - ret = ec_replace_heal (ec, itable->root); + if (ec->xl->itable) + itable = ec->xl->itable; + else + goto out; + ret = ec_replace_heal(ec, itable->root); out: - return ret; + return ret; } int32_t -ec_launch_replace_heal (ec_t *ec) +ec_launch_replace_heal(ec_t *ec) { - int ret = -1; + int ret = -1; - if (!ec) - return ret; - ret = synctask_new (ec->xl->ctx->env, ec_replace_brick_heal_wrap, - ec_replace_heal_done, NULL, ec); - if (ret < 0) { - gf_msg_debug (ec->xl->name, 0, - "Heal failed for replace brick ret = %d", ret); - } + if (!ec) return ret; + ret = synctask_new(ec->xl->ctx->env, ec_replace_brick_heal_wrap, + ec_replace_heal_done, NULL, ec); + if (ret < 0) { + gf_msg_debug(ec->xl->name, 0, "Heal failed for replace brick ret = %d", + ret); + } + return ret; } int32_t ec_set_heal_info(dict_t **dict_rsp, char *status) { - dict_t *dict = NULL; - int ret = 0; + dict_t *dict = NULL; + int ret = 0; - dict = dict_new (); - if (!dict) { - ret = -ENOMEM; - goto out; - } - ret = dict_set_str (dict, "heal-info", status); - if (ret) { - gf_msg (THIS->name, GF_LOG_WARNING, -ret, - EC_MSG_HEAL_FAIL, - "Failed to set heal-info key to " - "%s", status); - dict_unref(dict); - dict = NULL; - } - *dict_rsp = dict; + dict = dict_new(); + if (!dict) { + ret = -ENOMEM; + goto out; + } + ret = dict_set_str(dict, "heal-info", status); + if (ret) { + gf_msg(THIS->name, GF_LOG_WARNING, -ret, EC_MSG_HEAL_FAIL, + "Failed to set heal-info key to " + "%s", + status); + dict_unref(dict); + dict = NULL; + } + *dict_rsp = dict; out: - return ret; + return ret; } static int32_t -_need_heal_calculate (ec_t *ec, uint64_t *dirty, unsigned char *sources, - gf_boolean_t self_locked, int32_t lock_count, - ec_heal_need_t *need_heal) -{ - int i = 0; - int source_count = 0; - - source_count = EC_COUNT (sources, ec->nodes); - if (source_count == ec->nodes) { - *need_heal = EC_HEAL_NONEED; - if (self_locked || lock_count == 0) { - for (i = 0; i < ec->nodes; i++) { - if (dirty[i]) { - *need_heal = EC_HEAL_MUST; - goto out; - } - } - } else { - for (i = 0; i < ec->nodes; i++) { - /* Since each lock can only increment the dirty - * count once, if dirty is > 1 it means that - * another operation has left the dirty count - * set and this indicates a problem in the - * inode.*/ - if (dirty[i] > 1) { - *need_heal = EC_HEAL_MUST; - goto out; - } - } +_need_heal_calculate(ec_t *ec, uint64_t *dirty, unsigned char *sources, + gf_boolean_t self_locked, int32_t lock_count, + ec_heal_need_t *need_heal) +{ + int i = 0; + int source_count = 0; + + source_count = EC_COUNT(sources, ec->nodes); + if (source_count == ec->nodes) { + *need_heal = EC_HEAL_NONEED; + if (self_locked || lock_count == 0) { + for (i = 0; i < ec->nodes; i++) { + if (dirty[i]) { + *need_heal = EC_HEAL_MUST; + goto out; } + } } else { - *need_heal = EC_HEAL_MUST; + for (i = 0; i < ec->nodes; i++) { + /* Since each lock can only increment the dirty + * count once, if dirty is > 1 it means that + * another operation has left the dirty count + * set and this indicates a problem in the + * inode.*/ + if (dirty[i] > 1) { + *need_heal = EC_HEAL_MUST; + goto out; + } + } } + } else { + *need_heal = EC_HEAL_MUST; + } out: - return source_count; + return source_count; } static int32_t -ec_need_metadata_heal (ec_t *ec, inode_t *inode, default_args_cbk_t *replies, - int32_t lock_count, gf_boolean_t self_locked, - gf_boolean_t thorough, ec_heal_need_t *need_heal) -{ - uint64_t *dirty = NULL; - unsigned char *sources = NULL; - unsigned char *healed_sinks = NULL; - uint64_t *meta_versions = NULL; - int ret = 0; - int i = 0; - - sources = alloca0(ec->nodes); - healed_sinks = alloca0(ec->nodes); - dirty = alloca0 (ec->nodes * sizeof (*dirty)); - meta_versions = alloca0 (ec->nodes * sizeof (*meta_versions)); - ret = ec_heal_metadata_find_direction (ec, replies, meta_versions, - dirty, sources, healed_sinks); - if (ret < 0 && ret != -EIO) { +ec_need_metadata_heal(ec_t *ec, inode_t *inode, default_args_cbk_t *replies, + int32_t lock_count, gf_boolean_t self_locked, + gf_boolean_t thorough, ec_heal_need_t *need_heal) +{ + uint64_t *dirty = NULL; + unsigned char *sources = NULL; + unsigned char *healed_sinks = NULL; + uint64_t *meta_versions = NULL; + int ret = 0; + int i = 0; + + sources = alloca0(ec->nodes); + healed_sinks = alloca0(ec->nodes); + dirty = alloca0(ec->nodes * sizeof(*dirty)); + meta_versions = alloca0(ec->nodes * sizeof(*meta_versions)); + ret = ec_heal_metadata_find_direction(ec, replies, meta_versions, dirty, + sources, healed_sinks); + if (ret < 0 && ret != -EIO) { + goto out; + } + + ret = _need_heal_calculate(ec, dirty, sources, self_locked, lock_count, + need_heal); + if (ret == ec->nodes && *need_heal == EC_HEAL_NONEED) { + for (i = 1; i < ec->nodes; i++) { + if (meta_versions[i] != meta_versions[0]) { + *need_heal = EC_HEAL_MUST; goto out; + } } + } +out: + return ret; +} - ret = _need_heal_calculate (ec, dirty, sources, self_locked, lock_count, - need_heal); - if (ret == ec->nodes && *need_heal == EC_HEAL_NONEED) { - for (i = 1; i < ec->nodes; i++) { - if (meta_versions[i] != meta_versions[0]) { - *need_heal = EC_HEAL_MUST; - goto out; - } - } - } +static int32_t +ec_need_data_heal(ec_t *ec, inode_t *inode, default_args_cbk_t *replies, + int32_t lock_count, gf_boolean_t self_locked, + gf_boolean_t thorough, ec_heal_need_t *need_heal) +{ + uint64_t *dirty = NULL; + unsigned char *sources = NULL; + unsigned char *healed_sinks = NULL; + uint64_t *data_versions = NULL; + uint64_t *size = NULL; + int ret = 0; + + sources = alloca0(ec->nodes); + healed_sinks = alloca0(ec->nodes); + dirty = alloca0(ec->nodes * sizeof(*dirty)); + data_versions = alloca0(ec->nodes * sizeof(*data_versions)); + size = alloca0(ec->nodes * sizeof(*size)); + + /* When dd is going on and heal info is called there is a very good + * chance for on disk sizes to mismatch even though nothing is wrong + * we don't need ondisk size check there. But if the file is either + * self-locked or the caller wants a thorough check then make sure to + * perform on disk check also. */ + ret = ec_heal_data_find_direction( + ec, replies, data_versions, dirty, size, sources, healed_sinks, + self_locked || thorough, EC_COMBINE_XDATA); + if (ret < 0 && ret != -EIO) { + goto out; + } + + ret = _need_heal_calculate(ec, dirty, sources, self_locked, lock_count, + need_heal); out: - return ret; + return ret; } static int32_t -ec_need_data_heal (ec_t *ec, inode_t *inode, default_args_cbk_t *replies, +ec_need_entry_heal(ec_t *ec, inode_t *inode, default_args_cbk_t *replies, int32_t lock_count, gf_boolean_t self_locked, gf_boolean_t thorough, ec_heal_need_t *need_heal) { - uint64_t *dirty = NULL; - unsigned char *sources = NULL; - unsigned char *healed_sinks = NULL; - uint64_t *data_versions = NULL; - uint64_t *size = NULL; - int ret = 0; - - sources = alloca0(ec->nodes); - healed_sinks = alloca0(ec->nodes); - dirty = alloca0 (ec->nodes * sizeof (*dirty)); - data_versions = alloca0 (ec->nodes * sizeof (*data_versions)); - size = alloca0 (ec->nodes * sizeof (*size)); - - /* When dd is going on and heal info is called there is a very good - * chance for on disk sizes to mismatch even though nothing is wrong - * we don't need ondisk size check there. But if the file is either - * self-locked or the caller wants a thorough check then make sure to - * perform on disk check also. */ - ret = ec_heal_data_find_direction (ec, replies, data_versions, - dirty, size, sources, healed_sinks, - self_locked || thorough, - EC_COMBINE_XDATA); - if (ret < 0 && ret != -EIO) { - goto out; - } + uint64_t *dirty = NULL; + unsigned char *sources = NULL; + unsigned char *healed_sinks = NULL; + uint64_t *data_versions = NULL; + int ret = 0; - ret = _need_heal_calculate (ec, dirty, sources, self_locked, lock_count, - need_heal); -out: - return ret; -} + sources = alloca0(ec->nodes); + healed_sinks = alloca0(ec->nodes); + dirty = alloca0(ec->nodes * sizeof(*dirty)); + data_versions = alloca0(ec->nodes * sizeof(*data_versions)); -static int32_t -ec_need_entry_heal (ec_t *ec, inode_t *inode, default_args_cbk_t *replies, - int32_t lock_count, gf_boolean_t self_locked, - gf_boolean_t thorough, ec_heal_need_t *need_heal) -{ - uint64_t *dirty = NULL; - unsigned char *sources = NULL; - unsigned char *healed_sinks = NULL; - uint64_t *data_versions = NULL; - int ret = 0; - - sources = alloca0(ec->nodes); - healed_sinks = alloca0(ec->nodes); - dirty = alloca0 (ec->nodes * sizeof (*dirty)); - data_versions = alloca0 (ec->nodes * sizeof (*data_versions)); - - ret = ec_heal_entry_find_direction (ec, replies, data_versions, - dirty, sources, healed_sinks); - if (ret < 0 && ret != -EIO) { - goto out; - } + ret = ec_heal_entry_find_direction(ec, replies, data_versions, dirty, + sources, healed_sinks); + if (ret < 0 && ret != -EIO) { + goto out; + } - ret = _need_heal_calculate (ec, dirty, sources, self_locked, lock_count, - need_heal); + ret = _need_heal_calculate(ec, dirty, sources, self_locked, lock_count, + need_heal); out: - return ret; + return ret; } static int32_t -ec_need_heal (ec_t *ec, inode_t *inode, default_args_cbk_t *replies, - int32_t lock_count, gf_boolean_t self_locked, - gf_boolean_t thorough, ec_heal_need_t *need_heal) +ec_need_heal(ec_t *ec, inode_t *inode, default_args_cbk_t *replies, + int32_t lock_count, gf_boolean_t self_locked, + gf_boolean_t thorough, ec_heal_need_t *need_heal) { - int ret = 0; - + int ret = 0; - ret = ec_need_metadata_heal (ec, inode, replies, lock_count, - self_locked, thorough, need_heal); - if (ret < 0) - goto out; + ret = ec_need_metadata_heal(ec, inode, replies, lock_count, self_locked, + thorough, need_heal); + if (ret < 0) + goto out; - if (*need_heal == EC_HEAL_MUST) - goto out; + if (*need_heal == EC_HEAL_MUST) + goto out; - if (inode->ia_type == IA_IFREG) { - ret = ec_need_data_heal (ec, inode, replies, lock_count, - self_locked, thorough, need_heal); - } else if (inode->ia_type == IA_IFDIR) { - ret = ec_need_entry_heal (ec, inode, replies, lock_count, - self_locked, thorough, need_heal); - } + if (inode->ia_type == IA_IFREG) { + ret = ec_need_data_heal(ec, inode, replies, lock_count, self_locked, + thorough, need_heal); + } else if (inode->ia_type == IA_IFDIR) { + ret = ec_need_entry_heal(ec, inode, replies, lock_count, self_locked, + thorough, need_heal); + } out: - return ret; + return ret; } int32_t -ec_heal_inspect (call_frame_t *frame, ec_t *ec, - inode_t *inode, unsigned char *locked_on, - gf_boolean_t self_locked, gf_boolean_t thorough, - ec_heal_need_t *need_heal) -{ - loc_t loc = {0}; - int i = 0; - int ret = 0; - dict_t *xdata = NULL; - uint64_t zero_array[2] = {0}; - uint64_t zero_value = 0; - unsigned char *output = NULL; - default_args_cbk_t *replies = NULL; - int32_t lock_count = 0; - - EC_REPLIES_ALLOC (replies, ec->nodes); - output = alloca0 (ec->nodes); - - loc.inode = inode_ref (inode); - gf_uuid_copy (loc.gfid, inode->gfid); - - xdata = dict_new (); - if (!xdata || - dict_set_static_bin (xdata, EC_XATTR_VERSION, zero_array, - sizeof (zero_array)) || - dict_set_static_bin (xdata, EC_XATTR_DIRTY, zero_array, - sizeof (zero_array)) || - dict_set_static_bin (xdata, EC_XATTR_SIZE, &zero_value, - sizeof (zero_value))) { - ret = -ENOMEM; - goto out; - } +ec_heal_inspect(call_frame_t *frame, ec_t *ec, inode_t *inode, + unsigned char *locked_on, gf_boolean_t self_locked, + gf_boolean_t thorough, ec_heal_need_t *need_heal) +{ + loc_t loc = {0}; + int i = 0; + int ret = 0; + dict_t *xdata = NULL; + uint64_t zero_array[2] = {0}; + uint64_t zero_value = 0; + unsigned char *output = NULL; + default_args_cbk_t *replies = NULL; + int32_t lock_count = 0; + + EC_REPLIES_ALLOC(replies, ec->nodes); + output = alloca0(ec->nodes); + + loc.inode = inode_ref(inode); + gf_uuid_copy(loc.gfid, inode->gfid); + + xdata = dict_new(); + if (!xdata || + dict_set_static_bin(xdata, EC_XATTR_VERSION, zero_array, + sizeof(zero_array)) || + dict_set_static_bin(xdata, EC_XATTR_DIRTY, zero_array, + sizeof(zero_array)) || + dict_set_static_bin(xdata, EC_XATTR_SIZE, &zero_value, + sizeof(zero_value))) { + ret = -ENOMEM; + goto out; + } - if (!self_locked) { - ret = dict_set_str(xdata, GLUSTERFS_INODELK_DOM_COUNT, - ec->xl->name); - if (ret) { - ret = -ENOMEM; - goto out; - } + if (!self_locked) { + ret = dict_set_str(xdata, GLUSTERFS_INODELK_DOM_COUNT, ec->xl->name); + if (ret) { + ret = -ENOMEM; + goto out; } + } - ret = cluster_lookup (ec->xl_list, locked_on, ec->nodes, replies, - output, frame, ec->xl, &loc, xdata); + ret = cluster_lookup(ec->xl_list, locked_on, ec->nodes, replies, output, + frame, ec->xl, &loc, xdata); - if (ret != ec->nodes) { - ret = ec->nodes; - *need_heal = EC_HEAL_MUST; - goto out; - } + if (ret != ec->nodes) { + ret = ec->nodes; + *need_heal = EC_HEAL_MUST; + goto out; + } - if (self_locked) - goto need_heal; + if (self_locked) + goto need_heal; - for (i = 0; i < ec->nodes; i++) { - if (!output[i] || !replies[i].xdata) { - continue; - } - if ((dict_get_int32 (replies[i].xdata, GLUSTERFS_INODELK_COUNT, - &lock_count) == 0) && lock_count > 0) { - break; - } + for (i = 0; i < ec->nodes; i++) { + if (!output[i] || !replies[i].xdata) { + continue; + } + if ((dict_get_int32(replies[i].xdata, GLUSTERFS_INODELK_COUNT, + &lock_count) == 0) && + lock_count > 0) { + break; } + } need_heal: - ret = ec_need_heal (ec, inode, replies, lock_count, - self_locked, thorough, need_heal); + ret = ec_need_heal(ec, inode, replies, lock_count, self_locked, thorough, + need_heal); - if (!self_locked && *need_heal == EC_HEAL_MUST) { - *need_heal = EC_HEAL_MAYBE; - } + if (!self_locked && *need_heal == EC_HEAL_MUST) { + *need_heal = EC_HEAL_MAYBE; + } out: - cluster_replies_wipe (replies, ec->nodes); - loc_wipe (&loc); - if (xdata) { - dict_unref(xdata); - } - return ret; + cluster_replies_wipe(replies, ec->nodes); + loc_wipe(&loc); + if (xdata) { + dict_unref(xdata); + } + return ret; } int32_t -ec_heal_locked_inspect (call_frame_t *frame, ec_t *ec, inode_t *inode, - ec_heal_need_t *need_heal) -{ - unsigned char *locked_on = NULL; - unsigned char *up_subvols = NULL; - unsigned char *output = NULL; - default_args_cbk_t *replies = NULL; - int ret = 0; - - EC_REPLIES_ALLOC (replies, ec->nodes); - locked_on = alloca0(ec->nodes); - output = alloca0(ec->nodes); - up_subvols = alloca0(ec->nodes); - ec_mask_to_char_array (ec->xl_up, up_subvols, ec->nodes); - - ret = cluster_inodelk (ec->xl_list, up_subvols, ec->nodes, - replies, locked_on, frame, ec->xl, - ec->xl->name, inode, 0, 0); - if (ret != ec->nodes) { - *need_heal = EC_HEAL_MUST; - goto unlock; - } - ret = ec_heal_inspect (frame, ec, inode, locked_on, _gf_true, _gf_true, - need_heal); +ec_heal_locked_inspect(call_frame_t *frame, ec_t *ec, inode_t *inode, + ec_heal_need_t *need_heal) +{ + unsigned char *locked_on = NULL; + unsigned char *up_subvols = NULL; + unsigned char *output = NULL; + default_args_cbk_t *replies = NULL; + int ret = 0; + + EC_REPLIES_ALLOC(replies, ec->nodes); + locked_on = alloca0(ec->nodes); + output = alloca0(ec->nodes); + up_subvols = alloca0(ec->nodes); + ec_mask_to_char_array(ec->xl_up, up_subvols, ec->nodes); + + ret = cluster_inodelk(ec->xl_list, up_subvols, ec->nodes, replies, + locked_on, frame, ec->xl, ec->xl->name, inode, 0, 0); + if (ret != ec->nodes) { + *need_heal = EC_HEAL_MUST; + goto unlock; + } + ret = ec_heal_inspect(frame, ec, inode, locked_on, _gf_true, _gf_true, + need_heal); unlock: - cluster_uninodelk (ec->xl_list, locked_on, ec->nodes, - replies, output, frame, ec->xl, - ec->xl->name, inode, 0, 0); - cluster_replies_wipe (replies, ec->nodes); - return ret; + cluster_uninodelk(ec->xl_list, locked_on, ec->nodes, replies, output, frame, + ec->xl, ec->xl->name, inode, 0, 0); + cluster_replies_wipe(replies, ec->nodes); + return ret; } int32_t -ec_get_heal_info (xlator_t *this, loc_t *entry_loc, dict_t **dict_rsp) +ec_get_heal_info(xlator_t *this, loc_t *entry_loc, dict_t **dict_rsp) { - int ret = -ENOMEM; - ec_heal_need_t need_heal = EC_HEAL_NONEED; - call_frame_t *frame = NULL; - ec_t *ec = NULL; - unsigned char *up_subvols = NULL; - loc_t loc = {0, }; + int ret = -ENOMEM; + ec_heal_need_t need_heal = EC_HEAL_NONEED; + call_frame_t *frame = NULL; + ec_t *ec = NULL; + unsigned char *up_subvols = NULL; + loc_t loc = { + 0, + }; - VALIDATE_OR_GOTO(this, out); - GF_VALIDATE_OR_GOTO(this->name, entry_loc, out); + VALIDATE_OR_GOTO(this, out); + GF_VALIDATE_OR_GOTO(this->name, entry_loc, out); - ec = this->private; - up_subvols = alloca0(ec->nodes); - ec_mask_to_char_array (ec->xl_up, up_subvols, ec->nodes); + ec = this->private; + up_subvols = alloca0(ec->nodes); + ec_mask_to_char_array(ec->xl_up, up_subvols, ec->nodes); - if (EC_COUNT (up_subvols, ec->nodes) != ec->nodes) { - need_heal = EC_HEAL_MUST; - goto set_heal; - } - frame = create_frame (this, this->ctx->pool); - if (!frame) { - goto out; - } - ec_owner_set(frame, frame->root); - frame->root->uid = 0; - frame->root->gid = 0; - frame->root->pid = GF_CLIENT_PID_SELF_HEALD; - - if (loc_copy(&loc, entry_loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, - ENOMEM, EC_MSG_LOC_COPY_FAIL, - "Failed to copy a location."); - goto out; - } - if (!loc.inode) { - ret = syncop_inode_find (this, this, loc.gfid, - &loc.inode, NULL, NULL); - if (ret < 0) - goto out; - } - - ret = ec_heal_inspect (frame, ec, loc.inode, up_subvols, _gf_false, - _gf_false, &need_heal); - if (ret == ec->nodes && need_heal == EC_HEAL_NONEED) { - goto set_heal; - } - need_heal = EC_HEAL_NONEED; - ret = ec_heal_locked_inspect (frame, ec, loc.inode, - &need_heal); + if (EC_COUNT(up_subvols, ec->nodes) != ec->nodes) { + need_heal = EC_HEAL_MUST; + goto set_heal; + } + frame = create_frame(this, this->ctx->pool); + if (!frame) { + goto out; + } + ec_owner_set(frame, frame->root); + frame->root->uid = 0; + frame->root->gid = 0; + frame->root->pid = GF_CLIENT_PID_SELF_HEALD; + + if (loc_copy(&loc, entry_loc) != 0) { + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); + goto out; + } + if (!loc.inode) { + ret = syncop_inode_find(this, this, loc.gfid, &loc.inode, NULL, NULL); if (ret < 0) - goto out; + goto out; + } + + ret = ec_heal_inspect(frame, ec, loc.inode, up_subvols, _gf_false, + _gf_false, &need_heal); + if (ret == ec->nodes && need_heal == EC_HEAL_NONEED) { + goto set_heal; + } + need_heal = EC_HEAL_NONEED; + ret = ec_heal_locked_inspect(frame, ec, loc.inode, &need_heal); + if (ret < 0) + goto out; set_heal: - if (need_heal == EC_HEAL_MUST) { - ret = ec_set_heal_info (dict_rsp, "heal"); - } else { - ret = ec_set_heal_info (dict_rsp, "no-heal"); - } + if (need_heal == EC_HEAL_MUST) { + ret = ec_set_heal_info(dict_rsp, "heal"); + } else { + ret = ec_set_heal_info(dict_rsp, "no-heal"); + } out: - if (frame) { - STACK_DESTROY (frame->root); - } - loc_wipe (&loc); - return ret; + if (frame) { + STACK_DESTROY(frame->root); + } + loc_wipe(&loc); + return ret; } diff --git a/xlators/cluster/ec/src/ec-heald.c b/xlators/cluster/ec/src/ec-heald.c index f36901ef74f..cc1062dd353 100644 --- a/xlators/cluster/ec/src/ec-heald.c +++ b/xlators/cluster/ec/src/ec-heald.c @@ -19,559 +19,545 @@ #include "syncop-utils.h" #include "protocol-common.h" - -#define NTH_INDEX_HEALER(this, n) (&((((ec_t *)this->private))->shd.index_healers[n])) -#define NTH_FULL_HEALER(this, n) (&((((ec_t *)this->private))->shd.full_healers[n])) +#define NTH_INDEX_HEALER(this, n) \ + (&((((ec_t *)this->private))->shd.index_healers[n])) +#define NTH_FULL_HEALER(this, n) \ + (&((((ec_t *)this->private))->shd.full_healers[n])) gf_boolean_t -ec_shd_is_subvol_local (xlator_t *this, int subvol) +ec_shd_is_subvol_local(xlator_t *this, int subvol) { - ec_t *ec = NULL; - gf_boolean_t is_local = _gf_false; - loc_t loc = {0, }; - - ec = this->private; - loc.inode = this->itable->root; - syncop_is_subvol_local (ec->xl_list[subvol], &loc, &is_local); - return is_local; + ec_t *ec = NULL; + gf_boolean_t is_local = _gf_false; + loc_t loc = { + 0, + }; + + ec = this->private; + loc.inode = this->itable->root; + syncop_is_subvol_local(ec->xl_list[subvol], &loc, &is_local); + return is_local; } char * -ec_subvol_name (xlator_t *this, int subvol) +ec_subvol_name(xlator_t *this, int subvol) { - ec_t *ec = NULL; + ec_t *ec = NULL; - ec = this->private; - if (subvol < 0 || subvol > ec->nodes) - return NULL; + ec = this->private; + if (subvol < 0 || subvol > ec->nodes) + return NULL; - return ec->xl_list[subvol]->name; + return ec->xl_list[subvol]->name; } int -__ec_shd_healer_wait (struct subvol_healer *healer) +__ec_shd_healer_wait(struct subvol_healer *healer) { - ec_t *ec = NULL; - struct timespec wait_till = {0, }; - int ret = 0; + ec_t *ec = NULL; + struct timespec wait_till = { + 0, + }; + int ret = 0; - ec = healer->this->private; + ec = healer->this->private; disabled_loop: - wait_till.tv_sec = time (NULL) + 60; - - while (!healer->rerun) { - ret = pthread_cond_timedwait (&healer->cond, - &healer->mutex, - &wait_till); - if (ret == ETIMEDOUT) - break; - } + wait_till.tv_sec = time(NULL) + 60; - ret = healer->rerun; - healer->rerun = 0; + while (!healer->rerun) { + ret = pthread_cond_timedwait(&healer->cond, &healer->mutex, &wait_till); + if (ret == ETIMEDOUT) + break; + } - if (!ec->shd.enabled || !ec->up) - goto disabled_loop; + ret = healer->rerun; + healer->rerun = 0; - return ret; -} + if (!ec->shd.enabled || !ec->up) + goto disabled_loop; + return ret; +} int -ec_shd_healer_wait (struct subvol_healer *healer) +ec_shd_healer_wait(struct subvol_healer *healer) { - int ret = 0; + int ret = 0; - pthread_mutex_lock (&healer->mutex); - { - ret = __ec_shd_healer_wait (healer); - } - pthread_mutex_unlock (&healer->mutex); + pthread_mutex_lock(&healer->mutex); + { + ret = __ec_shd_healer_wait(healer); + } + pthread_mutex_unlock(&healer->mutex); - return ret; + return ret; } int -ec_shd_index_inode (xlator_t *this, xlator_t *subvol, inode_t **inode) +ec_shd_index_inode(xlator_t *this, xlator_t *subvol, inode_t **inode) { - loc_t rootloc = {0, }; - int ret = 0; - dict_t *xattr = NULL; - void *index_gfid = NULL; - - *inode = NULL; - rootloc.inode = inode_ref (this->itable->root); - gf_uuid_copy (rootloc.gfid, rootloc.inode->gfid); - - ret = syncop_getxattr (subvol, &rootloc, &xattr, - GF_XATTROP_INDEX_GFID, NULL, NULL); - if (ret < 0) - goto out; - if (!xattr) { - ret = -EINVAL; - goto out; - } - - ret = dict_get_ptr (xattr, GF_XATTROP_INDEX_GFID, &index_gfid); - if (ret) - goto out; - - gf_msg_debug (this->name, 0, "index-dir gfid for %s: %s", - subvol->name, uuid_utoa (index_gfid)); - - ret = syncop_inode_find (this, subvol, index_gfid, - inode, NULL, NULL); + loc_t rootloc = { + 0, + }; + int ret = 0; + dict_t *xattr = NULL; + void *index_gfid = NULL; + + *inode = NULL; + rootloc.inode = inode_ref(this->itable->root); + gf_uuid_copy(rootloc.gfid, rootloc.inode->gfid); + + ret = syncop_getxattr(subvol, &rootloc, &xattr, GF_XATTROP_INDEX_GFID, NULL, + NULL); + if (ret < 0) + goto out; + if (!xattr) { + ret = -EINVAL; + goto out; + } + + ret = dict_get_ptr(xattr, GF_XATTROP_INDEX_GFID, &index_gfid); + if (ret) + goto out; + + gf_msg_debug(this->name, 0, "index-dir gfid for %s: %s", subvol->name, + uuid_utoa(index_gfid)); + + ret = syncop_inode_find(this, subvol, index_gfid, inode, NULL, NULL); out: - loc_wipe (&rootloc); + loc_wipe(&rootloc); - if (xattr) - dict_unref (xattr); + if (xattr) + dict_unref(xattr); - return ret; + return ret; } int -ec_shd_index_purge (xlator_t *subvol, inode_t *inode, char *name) +ec_shd_index_purge(xlator_t *subvol, inode_t *inode, char *name) { - loc_t loc = {0, }; - int ret = 0; + loc_t loc = { + 0, + }; + int ret = 0; - loc.parent = inode_ref (inode); - loc.name = name; + loc.parent = inode_ref(inode); + loc.name = name; - ret = syncop_unlink (subvol, &loc, NULL, NULL); + ret = syncop_unlink(subvol, &loc, NULL, NULL); - loc_wipe (&loc); - return ret; + loc_wipe(&loc); + return ret; } int -ec_shd_selfheal (struct subvol_healer *healer, int child, loc_t *loc) +ec_shd_selfheal(struct subvol_healer *healer, int child, loc_t *loc) { - int32_t ret; - - ret = syncop_getxattr (healer->this, loc, NULL, EC_XATTR_HEAL, NULL, - NULL); - if ((ret >= 0) && (loc->inode->ia_type == IA_IFDIR)) { - /* If we have just healed a directory, it's possible that - * other index entries have appeared to be healed. We put a - * mark so that we can check it later and restart a scan - * without delay. */ - healer->rerun = _gf_true; - } - - return ret; + int32_t ret; + + ret = syncop_getxattr(healer->this, loc, NULL, EC_XATTR_HEAL, NULL, NULL); + if ((ret >= 0) && (loc->inode->ia_type == IA_IFDIR)) { + /* If we have just healed a directory, it's possible that + * other index entries have appeared to be healed. We put a + * mark so that we can check it later and restart a scan + * without delay. */ + healer->rerun = _gf_true; + } + + return ret; } - int -ec_shd_index_heal (xlator_t *subvol, gf_dirent_t *entry, loc_t *parent, - void *data) +ec_shd_index_heal(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent, + void *data) { - struct subvol_healer *healer = data; - ec_t *ec = NULL; - loc_t loc = {0}; - int ret = 0; - - ec = healer->this->private; - if (ec->xl_up_count <= ec->fragments) { - return -ENOTCONN; - } - if (!ec->shd.enabled) - return -EBUSY; - - gf_msg_debug (healer->this->name, 0, "got entry: %s", - entry->d_name); - - ret = gf_uuid_parse (entry->d_name, loc.gfid); - if (ret) - return 0; + struct subvol_healer *healer = data; + ec_t *ec = NULL; + loc_t loc = {0}; + int ret = 0; + + ec = healer->this->private; + if (ec->xl_up_count <= ec->fragments) { + return -ENOTCONN; + } + if (!ec->shd.enabled) + return -EBUSY; + + gf_msg_debug(healer->this->name, 0, "got entry: %s", entry->d_name); + + ret = gf_uuid_parse(entry->d_name, loc.gfid); + if (ret) + return 0; - /* If this fails with ENOENT/ESTALE index is stale */ - ret = syncop_gfid_to_path (healer->this->itable, subvol, loc.gfid, - (char **)&loc.path); - if (ret < 0) - goto out; + /* If this fails with ENOENT/ESTALE index is stale */ + ret = syncop_gfid_to_path(healer->this->itable, subvol, loc.gfid, + (char **)&loc.path); + if (ret < 0) + goto out; - ret = syncop_inode_find (healer->this, healer->this, loc.gfid, - &loc.inode, NULL, NULL); - if (ret < 0) - goto out; + ret = syncop_inode_find(healer->this, healer->this, loc.gfid, &loc.inode, + NULL, NULL); + if (ret < 0) + goto out; - ec_shd_selfheal (healer, healer->subvol, &loc); + ec_shd_selfheal(healer, healer->subvol, &loc); out: - if (ret == -ENOENT || ret == -ESTALE) { - gf_msg (healer->this->name, GF_LOG_DEBUG, 0, - EC_MSG_HEAL_FAIL, "Purging index for gfid %s:", - uuid_utoa(loc.gfid)); - ec_shd_index_purge (subvol, parent->inode, entry->d_name); - } - loc_wipe (&loc); - - return 0; + if (ret == -ENOENT || ret == -ESTALE) { + gf_msg(healer->this->name, GF_LOG_DEBUG, 0, EC_MSG_HEAL_FAIL, + "Purging index for gfid %s:", uuid_utoa(loc.gfid)); + ec_shd_index_purge(subvol, parent->inode, entry->d_name); + } + loc_wipe(&loc); + + return 0; } int -ec_shd_index_sweep (struct subvol_healer *healer) +ec_shd_index_sweep(struct subvol_healer *healer) { - loc_t loc = {0}; - ec_t *ec = NULL; - int ret = 0; - xlator_t *subvol = NULL; - dict_t *xdata = NULL; - - ec = healer->this->private; - subvol = ec->xl_list[healer->subvol]; - - ret = ec_shd_index_inode (healer->this, subvol, &loc.inode); - if (ret < 0) { - gf_msg (healer->this->name, GF_LOG_WARNING, errno, - EC_MSG_INDEX_DIR_GET_FAIL, - "unable to get index-dir on %s", subvol->name); - goto out; - } - - xdata = dict_new (); - if (!xdata || dict_set_int32 (xdata, "get-gfid-type", 1)) { - ret = -ENOMEM; - goto out; - } - - ret = syncop_mt_dir_scan (NULL, subvol, &loc, GF_CLIENT_PID_SELF_HEALD, - healer, ec_shd_index_heal, xdata, - ec->shd.max_threads, ec->shd.wait_qlength); + loc_t loc = {0}; + ec_t *ec = NULL; + int ret = 0; + xlator_t *subvol = NULL; + dict_t *xdata = NULL; + + ec = healer->this->private; + subvol = ec->xl_list[healer->subvol]; + + ret = ec_shd_index_inode(healer->this, subvol, &loc.inode); + if (ret < 0) { + gf_msg(healer->this->name, GF_LOG_WARNING, errno, + EC_MSG_INDEX_DIR_GET_FAIL, "unable to get index-dir on %s", + subvol->name); + goto out; + } + + xdata = dict_new(); + if (!xdata || dict_set_int32(xdata, "get-gfid-type", 1)) { + ret = -ENOMEM; + goto out; + } + + ret = syncop_mt_dir_scan(NULL, subvol, &loc, GF_CLIENT_PID_SELF_HEALD, + healer, ec_shd_index_heal, xdata, + ec->shd.max_threads, ec->shd.wait_qlength); out: - if (xdata) - dict_unref (xdata); - loc_wipe (&loc); + if (xdata) + dict_unref(xdata); + loc_wipe(&loc); - return ret; + return ret; } int -ec_shd_full_heal (xlator_t *subvol, gf_dirent_t *entry, loc_t *parent, - void *data) +ec_shd_full_heal(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent, + void *data) { - struct subvol_healer *healer = data; - xlator_t *this = healer->this; - ec_t *ec = NULL; - loc_t loc = {0}; - int ret = 0; - - ec = this->private; - if (ec->xl_up_count <= ec->fragments) { - return -ENOTCONN; - } - if (!ec->shd.enabled) - return -EBUSY; - - if (gf_uuid_is_null(entry->d_stat.ia_gfid)) { - /* It's possible that an entry has been removed just after - * being seen in a directory but before getting its stat info. - * In this case we'll receive a NULL gfid here. Since the file - * doesn't exist anymore, we can safely ignore it. */ - return 0; - } + struct subvol_healer *healer = data; + xlator_t *this = healer->this; + ec_t *ec = NULL; + loc_t loc = {0}; + int ret = 0; + + ec = this->private; + if (ec->xl_up_count <= ec->fragments) { + return -ENOTCONN; + } + if (!ec->shd.enabled) + return -EBUSY; + + if (gf_uuid_is_null(entry->d_stat.ia_gfid)) { + /* It's possible that an entry has been removed just after + * being seen in a directory but before getting its stat info. + * In this case we'll receive a NULL gfid here. Since the file + * doesn't exist anymore, we can safely ignore it. */ + return 0; + } - loc.parent = inode_ref (parent->inode); - loc.name = entry->d_name; - gf_uuid_copy (loc.gfid, entry->d_stat.ia_gfid); + loc.parent = inode_ref(parent->inode); + loc.name = entry->d_name; + gf_uuid_copy(loc.gfid, entry->d_stat.ia_gfid); - /* If this fails with ENOENT/ESTALE index is stale */ - ret = syncop_gfid_to_path (this->itable, subvol, loc.gfid, - (char **)&loc.path); - if (ret < 0) - goto out; + /* If this fails with ENOENT/ESTALE index is stale */ + ret = syncop_gfid_to_path(this->itable, subvol, loc.gfid, + (char **)&loc.path); + if (ret < 0) + goto out; - ret = syncop_inode_find (this, this, loc.gfid, - &loc.inode, NULL, NULL); - if (ret < 0) - goto out; + ret = syncop_inode_find(this, this, loc.gfid, &loc.inode, NULL, NULL); + if (ret < 0) + goto out; - ec_shd_selfheal (healer, healer->subvol, &loc); + ec_shd_selfheal(healer, healer->subvol, &loc); - ret = 0; + ret = 0; out: - loc_wipe (&loc); - return ret; + loc_wipe(&loc); + return ret; } int -ec_shd_full_sweep (struct subvol_healer *healer, inode_t *inode) +ec_shd_full_sweep(struct subvol_healer *healer, inode_t *inode) { - ec_t *ec = NULL; - loc_t loc = {0}; - - ec = healer->this->private; - loc.inode = inode; - return syncop_ftw (ec->xl_list[healer->subvol], &loc, - GF_CLIENT_PID_SELF_HEALD, healer, - ec_shd_full_heal); -} + ec_t *ec = NULL; + loc_t loc = {0}; + ec = healer->this->private; + loc.inode = inode; + return syncop_ftw(ec->xl_list[healer->subvol], &loc, + GF_CLIENT_PID_SELF_HEALD, healer, ec_shd_full_heal); +} void * -ec_shd_index_healer (void *data) +ec_shd_index_healer(void *data) { - struct subvol_healer *healer = NULL; - xlator_t *this = NULL; - - healer = data; - THIS = this = healer->this; - ec_t *ec = this->private; - - for (;;) { - ec_shd_healer_wait (healer); - - if (ec->xl_up_count > ec->fragments) { - gf_msg_debug (this->name, 0, - "starting index sweep on subvol %s", - ec_subvol_name (this, healer->subvol)); - ec_shd_index_sweep (healer); - } - gf_msg_debug (this->name, 0, - "finished index sweep on subvol %s", - ec_subvol_name (this, healer->subvol)); + struct subvol_healer *healer = NULL; + xlator_t *this = NULL; + + healer = data; + THIS = this = healer->this; + ec_t *ec = this->private; + + for (;;) { + ec_shd_healer_wait(healer); + + if (ec->xl_up_count > ec->fragments) { + gf_msg_debug(this->name, 0, "starting index sweep on subvol %s", + ec_subvol_name(this, healer->subvol)); + ec_shd_index_sweep(healer); } + gf_msg_debug(this->name, 0, "finished index sweep on subvol %s", + ec_subvol_name(this, healer->subvol)); + } - return NULL; + return NULL; } - void * -ec_shd_full_healer (void *data) +ec_shd_full_healer(void *data) { - struct subvol_healer *healer = NULL; - xlator_t *this = NULL; - loc_t rootloc = {0}; - - int run = 0; - - healer = data; - THIS = this = healer->this; - ec_t *ec = this->private; - - rootloc.inode = this->itable->root; - for (;;) { - pthread_mutex_lock (&healer->mutex); - { - run = __ec_shd_healer_wait (healer); - if (!run) - healer->running = _gf_false; - } - pthread_mutex_unlock (&healer->mutex); - - if (!run) - break; - - if (ec->xl_up_count > ec->fragments) { - gf_msg (this->name, GF_LOG_INFO, 0, - EC_MSG_FULL_SWEEP_START, - "starting full sweep on subvol %s", - ec_subvol_name (this, healer->subvol)); - - ec_shd_selfheal (healer, healer->subvol, &rootloc); - ec_shd_full_sweep (healer, this->itable->root); - } - - gf_msg (this->name, GF_LOG_INFO, 0, - EC_MSG_FULL_SWEEP_STOP, - "finished full sweep on subvol %s", - ec_subvol_name (this, healer->subvol)); + struct subvol_healer *healer = NULL; + xlator_t *this = NULL; + loc_t rootloc = {0}; + + int run = 0; + + healer = data; + THIS = this = healer->this; + ec_t *ec = this->private; + + rootloc.inode = this->itable->root; + for (;;) { + pthread_mutex_lock(&healer->mutex); + { + run = __ec_shd_healer_wait(healer); + if (!run) + healer->running = _gf_false; } + pthread_mutex_unlock(&healer->mutex); - return NULL; -} + if (!run) + break; + + if (ec->xl_up_count > ec->fragments) { + gf_msg(this->name, GF_LOG_INFO, 0, EC_MSG_FULL_SWEEP_START, + "starting full sweep on subvol %s", + ec_subvol_name(this, healer->subvol)); + + ec_shd_selfheal(healer, healer->subvol, &rootloc); + ec_shd_full_sweep(healer, this->itable->root); + } + + gf_msg(this->name, GF_LOG_INFO, 0, EC_MSG_FULL_SWEEP_STOP, + "finished full sweep on subvol %s", + ec_subvol_name(this, healer->subvol)); + } + return NULL; +} int -ec_shd_healer_init (xlator_t *this, struct subvol_healer *healer) +ec_shd_healer_init(xlator_t *this, struct subvol_healer *healer) { - int ret = 0; + int ret = 0; - ret = pthread_mutex_init (&healer->mutex, NULL); - if (ret) - goto out; + ret = pthread_mutex_init(&healer->mutex, NULL); + if (ret) + goto out; - ret = pthread_cond_init (&healer->cond, NULL); - if (ret) - goto out; + ret = pthread_cond_init(&healer->cond, NULL); + if (ret) + goto out; - healer->this = this; - healer->running = _gf_false; - healer->rerun = _gf_false; + healer->this = this; + healer->running = _gf_false; + healer->rerun = _gf_false; out: - return ret; + return ret; } - int -ec_shd_healer_spawn (xlator_t *this, struct subvol_healer *healer, - void *(threadfn)(void *)) +ec_shd_healer_spawn(xlator_t *this, struct subvol_healer *healer, + void *(threadfn)(void *)) { - int ret = 0; - - pthread_mutex_lock (&healer->mutex); - { - if (healer->running) { - pthread_cond_signal (&healer->cond); - } else { - ret = gf_thread_create (&healer->thread, NULL, - threadfn, healer, "ecshd"); - if (ret) - goto unlock; - healer->running = 1; - } - - healer->rerun = 1; + int ret = 0; + + pthread_mutex_lock(&healer->mutex); + { + if (healer->running) { + pthread_cond_signal(&healer->cond); + } else { + ret = gf_thread_create(&healer->thread, NULL, threadfn, healer, + "ecshd"); + if (ret) + goto unlock; + healer->running = 1; } + + healer->rerun = 1; + } unlock: - pthread_mutex_unlock (&healer->mutex); + pthread_mutex_unlock(&healer->mutex); - return ret; + return ret; } int -ec_shd_full_healer_spawn (xlator_t *this, int subvol) +ec_shd_full_healer_spawn(xlator_t *this, int subvol) { - return ec_shd_healer_spawn (this, NTH_FULL_HEALER (this, subvol), - ec_shd_full_healer); + return ec_shd_healer_spawn(this, NTH_FULL_HEALER(this, subvol), + ec_shd_full_healer); } - int -ec_shd_index_healer_spawn (xlator_t *this, int subvol) +ec_shd_index_healer_spawn(xlator_t *this, int subvol) { - return ec_shd_healer_spawn (this, NTH_INDEX_HEALER (this, subvol), - ec_shd_index_healer); + return ec_shd_healer_spawn(this, NTH_INDEX_HEALER(this, subvol), + ec_shd_index_healer); } void ec_shd_index_healer_wake(ec_t *ec) { - int32_t i; + int32_t i; - for (i = 0; i < ec->nodes; i++) { - if (((ec->xl_up >> i) & 1) != 0) { - ec_shd_index_healer_spawn(ec->xl, i); - } + for (i = 0; i < ec->nodes; i++) { + if (((ec->xl_up >> i) & 1) != 0) { + ec_shd_index_healer_spawn(ec->xl, i); } + } } int -ec_selfheal_daemon_init (xlator_t *this) +ec_selfheal_daemon_init(xlator_t *this) { - ec_t *ec = NULL; - ec_self_heald_t *shd = NULL; - int ret = -1; - int i = 0; - - ec = this->private; - shd = &ec->shd; - - shd->index_healers = GF_CALLOC (sizeof(*shd->index_healers), - ec->nodes, - ec_mt_subvol_healer_t); - if (!shd->index_healers) - goto out; - - for (i = 0; i < ec->nodes; i++) { - shd->index_healers[i].subvol = i; - ret = ec_shd_healer_init (this, &shd->index_healers[i]); - if (ret) - goto out; - } + ec_t *ec = NULL; + ec_self_heald_t *shd = NULL; + int ret = -1; + int i = 0; + + ec = this->private; + shd = &ec->shd; + + shd->index_healers = GF_CALLOC(sizeof(*shd->index_healers), ec->nodes, + ec_mt_subvol_healer_t); + if (!shd->index_healers) + goto out; + + for (i = 0; i < ec->nodes; i++) { + shd->index_healers[i].subvol = i; + ret = ec_shd_healer_init(this, &shd->index_healers[i]); + if (ret) + goto out; + } - shd->full_healers = GF_CALLOC (sizeof(*shd->full_healers), - ec->nodes, - ec_mt_subvol_healer_t); - if (!shd->full_healers) - goto out; - - for (i = 0; i < ec->nodes; i++) { - shd->full_healers[i].subvol = i; - ret = ec_shd_healer_init (this, &shd->full_healers[i]); - if (ret) - goto out; - } + shd->full_healers = GF_CALLOC(sizeof(*shd->full_healers), ec->nodes, + ec_mt_subvol_healer_t); + if (!shd->full_healers) + goto out; + + for (i = 0; i < ec->nodes; i++) { + shd->full_healers[i].subvol = i; + ret = ec_shd_healer_init(this, &shd->full_healers[i]); + if (ret) + goto out; + } - ret = 0; + ret = 0; out: - return ret; + return ret; } - int -ec_heal_op (xlator_t *this, dict_t *output, gf_xl_afr_op_t op, int xl_id) +ec_heal_op(xlator_t *this, dict_t *output, gf_xl_afr_op_t op, int xl_id) { - char key[64] = {0}; - int op_ret = 0; - ec_t *ec = NULL; - int i = 0; - GF_UNUSED int ret = 0; - - ec = this->private; - - op_ret = -1; - for (i = 0; i < ec->nodes; i++) { - snprintf (key, sizeof (key), "%d-%d-status", xl_id, i); - - if (((ec->xl_up >> i) & 1) == 0) { - ret = dict_set_str (output, key, "Brick is not connected"); - } else if (!ec->up) { - ret = dict_set_str (output, key, - "Disperse subvolume is not up"); - } else if (!ec_shd_is_subvol_local (this, i)) { - ret = dict_set_str (output, key, "Brick is remote"); - } else { - ret = dict_set_str (output, key, "Started self-heal"); - if (op == GF_SHD_OP_HEAL_FULL) { - ec_shd_full_healer_spawn (this, i); - } else if (op == GF_SHD_OP_HEAL_INDEX) { - ec_shd_index_healer_spawn (this, i); - } - op_ret = 0; - } + char key[64] = {0}; + int op_ret = 0; + ec_t *ec = NULL; + int i = 0; + GF_UNUSED int ret = 0; + + ec = this->private; + + op_ret = -1; + for (i = 0; i < ec->nodes; i++) { + snprintf(key, sizeof(key), "%d-%d-status", xl_id, i); + + if (((ec->xl_up >> i) & 1) == 0) { + ret = dict_set_str(output, key, "Brick is not connected"); + } else if (!ec->up) { + ret = dict_set_str(output, key, "Disperse subvolume is not up"); + } else if (!ec_shd_is_subvol_local(this, i)) { + ret = dict_set_str(output, key, "Brick is remote"); + } else { + ret = dict_set_str(output, key, "Started self-heal"); + if (op == GF_SHD_OP_HEAL_FULL) { + ec_shd_full_healer_spawn(this, i); + } else if (op == GF_SHD_OP_HEAL_INDEX) { + ec_shd_index_healer_spawn(this, i); + } + op_ret = 0; } - return op_ret; + } + return op_ret; } int -ec_xl_op (xlator_t *this, dict_t *input, dict_t *output) +ec_xl_op(xlator_t *this, dict_t *input, dict_t *output) { - gf_xl_afr_op_t op = GF_SHD_OP_INVALID; - int ret = 0; - int xl_id = 0; + gf_xl_afr_op_t op = GF_SHD_OP_INVALID; + int ret = 0; + int xl_id = 0; - ret = dict_get_int32 (input, "xl-op", (int32_t *)&op); - if (ret) - goto out; + ret = dict_get_int32(input, "xl-op", (int32_t *)&op); + if (ret) + goto out; - ret = dict_get_int32 (input, this->name, &xl_id); - if (ret) - goto out; + ret = dict_get_int32(input, this->name, &xl_id); + if (ret) + goto out; - ret = dict_set_int32 (output, this->name, xl_id); - if (ret) - goto out; + ret = dict_set_int32(output, this->name, xl_id); + if (ret) + goto out; - switch (op) { + switch (op) { case GF_SHD_OP_HEAL_FULL: - ret = ec_heal_op (this, output, op, xl_id); - break; + ret = ec_heal_op(this, output, op, xl_id); + break; case GF_SHD_OP_HEAL_INDEX: - ret = ec_heal_op (this, output, op, xl_id); - break; + ret = ec_heal_op(this, output, op, xl_id); + break; default: - ret = -1; - break; - } + ret = -1; + break; + } out: - dict_del (output, this->name); - return ret; + dict_del(output, this->name); + return ret; } diff --git a/xlators/cluster/ec/src/ec-helpers.c b/xlators/cluster/ec/src/ec-helpers.c index ff3558def86..dec39b9d2aa 100644 --- a/xlators/cluster/ec/src/ec-helpers.c +++ b/xlators/cluster/ec/src/ec-helpers.c @@ -19,25 +19,20 @@ #include "ec-method.h" #include "ec-helpers.h" -static const char * ec_fop_list[] = -{ - [-EC_FOP_HEAL] = "HEAL" -}; +static const char *ec_fop_list[] = {[-EC_FOP_HEAL] = "HEAL"}; -const char * ec_bin(char * str, size_t size, uint64_t value, int32_t digits) +const char * +ec_bin(char *str, size_t size, uint64_t value, int32_t digits) { str += size; - if (size-- < 1) - { + if (size-- < 1) { goto failed; } *--str = 0; - while ((value != 0) || (digits > 0)) - { - if (size-- < 1) - { + while ((value != 0) || (digits > 0)) { + if (size-- < 1) { goto failed; } *--str = '0' + (value & 1); @@ -51,21 +46,22 @@ failed: return "<buffer too small>"; } -const char * ec_fop_name(int32_t id) +const char * +ec_fop_name(int32_t id) { - if (id >= 0) - { + if (id >= 0) { return gf_fop_list[id]; } return ec_fop_list[-id]; } -void ec_trace(const char * event, ec_fop_data_t * fop, const char * fmt, ...) +void +ec_trace(const char *event, ec_fop_data_t *fop, const char *fmt, ...) { char str1[32], str2[32], str3[32]; - char * msg; - ec_t * ec = fop->xl->private; + char *msg; + ec_t *ec = fop->xl->private; va_list args; int32_t ret; @@ -73,28 +69,28 @@ void ec_trace(const char * event, ec_fop_data_t * fop, const char * fmt, ...) ret = vasprintf(&msg, fmt, args); va_end(args); - if (ret < 0) - { + if (ret < 0) { msg = "<memory allocation error>"; } - gf_msg_trace ("ec", 0, "%s(%s) %p(%p) [refs=%d, winds=%d, jobs=%d] " - "frame=%p/%p, min/exp=%d/%d, err=%d state=%d " - "{%s:%s:%s} %s", - event, ec_fop_name(fop->id), fop, fop->parent, fop->refs, - fop->winds, fop->jobs, fop->req_frame, fop->frame, fop->minimum, - fop->expected, fop->error, fop->state, - ec_bin(str1, sizeof(str1), fop->mask, ec->nodes), - ec_bin(str2, sizeof(str2), fop->remaining, ec->nodes), - ec_bin(str3, sizeof(str3), fop->good, ec->nodes), msg); + gf_msg_trace("ec", 0, + "%s(%s) %p(%p) [refs=%d, winds=%d, jobs=%d] " + "frame=%p/%p, min/exp=%d/%d, err=%d state=%d " + "{%s:%s:%s} %s", + event, ec_fop_name(fop->id), fop, fop->parent, fop->refs, + fop->winds, fop->jobs, fop->req_frame, fop->frame, + fop->minimum, fop->expected, fop->error, fop->state, + ec_bin(str1, sizeof(str1), fop->mask, ec->nodes), + ec_bin(str2, sizeof(str2), fop->remaining, ec->nodes), + ec_bin(str3, sizeof(str3), fop->good, ec->nodes), msg); - if (ret >= 0) - { + if (ret >= 0) { free(msg); } } -int32_t ec_bits_consume(uint64_t * n) +int32_t +ec_bits_consume(uint64_t *n) { uint64_t tmp; @@ -105,21 +101,18 @@ int32_t ec_bits_consume(uint64_t * n) return gf_bits_index(tmp); } -size_t ec_iov_copy_to(void * dst, struct iovec * vector, int32_t count, - off_t offset, size_t size) +size_t +ec_iov_copy_to(void *dst, struct iovec *vector, int32_t count, off_t offset, + size_t size) { int32_t i = 0; size_t total = 0, len = 0; - while (i < count) - { - if (offset < vector[i].iov_len) - { - while ((i < count) && (size > 0)) - { + while (i < count) { + if (offset < vector[i].iov_len) { + while ((i < count) && (size > 0)) { len = size; - if (len > vector[i].iov_len - offset) - { + if (len > vector[i].iov_len - offset) { len = vector[i].iov_len - offset; } memcpy(dst, vector[i++].iov_base + offset, len); @@ -139,15 +132,15 @@ size_t ec_iov_copy_to(void * dst, struct iovec * vector, int32_t count, return total; } -int32_t ec_buffer_alloc(xlator_t *xl, size_t size, struct iobref **piobref, - void **ptr) +int32_t +ec_buffer_alloc(xlator_t *xl, size_t size, struct iobref **piobref, void **ptr) { struct iobref *iobref = NULL; struct iobuf *iobuf = NULL; int32_t ret = -ENOMEM; - iobuf = iobuf_get_page_aligned (xl->ctx->iobuf_pool, size, - EC_METHOD_WORD_SIZE); + iobuf = iobuf_get_page_aligned(xl->ctx->iobuf_pool, size, + EC_METHOD_WORD_SIZE); if (iobuf == NULL) { goto out; } @@ -186,12 +179,12 @@ out: return ret; } -int32_t ec_dict_set_array(dict_t *dict, char *key, uint64_t value[], - int32_t size) +int32_t +ec_dict_set_array(dict_t *dict, char *key, uint64_t value[], int32_t size) { - int ret = -1; - uint64_t *ptr = NULL; - int32_t vindex; + int ret = -1; + uint64_t *ptr = NULL; + int32_t vindex; if (value == NULL) { return -EINVAL; @@ -202,19 +195,18 @@ int32_t ec_dict_set_array(dict_t *dict, char *key, uint64_t value[], return -ENOMEM; } for (vindex = 0; vindex < size; vindex++) { - ptr[vindex] = hton64(value[vindex]); + ptr[vindex] = hton64(value[vindex]); } ret = dict_set_bin(dict, key, ptr, sizeof(uint64_t) * size); if (ret) - GF_FREE (ptr); + GF_FREE(ptr); return ret; } - int32_t -ec_dict_get_array (dict_t *dict, char *key, uint64_t value[], int32_t size) +ec_dict_get_array(dict_t *dict, char *key, uint64_t value[], int32_t size) { - void *ptr; + void *ptr; int32_t len; int32_t vindex; int32_t old_size = 0; @@ -228,43 +220,43 @@ ec_dict_get_array (dict_t *dict, char *key, uint64_t value[], int32_t size) return err; } - if (len > (size * sizeof(uint64_t)) || (len % sizeof (uint64_t))) { + if (len > (size * sizeof(uint64_t)) || (len % sizeof(uint64_t))) { return -EINVAL; } /* 3.6 version ec would have stored version in 64 bit. In that case treat * metadata versions same as data*/ - old_size = min (size, len/sizeof(uint64_t)); + old_size = min(size, len / sizeof(uint64_t)); for (vindex = 0; vindex < old_size; vindex++) { - value[vindex] = ntoh64(*((uint64_t *)ptr + vindex)); + value[vindex] = ntoh64(*((uint64_t *)ptr + vindex)); } if (old_size < size) { - for (vindex = old_size; vindex < size; vindex++) { - value[vindex] = value[old_size-1]; - } + for (vindex = old_size; vindex < size; vindex++) { + value[vindex] = value[old_size - 1]; + } } return 0; } int32_t -ec_dict_del_array (dict_t *dict, char *key, uint64_t value[], int32_t size) +ec_dict_del_array(dict_t *dict, char *key, uint64_t value[], int32_t size) { int ret = 0; - ret = ec_dict_get_array (dict, key, value, size); + ret = ec_dict_get_array(dict, key, value, size); if (ret == 0) - dict_del(dict, key); + dict_del(dict, key); return ret; } - -int32_t ec_dict_set_number(dict_t * dict, char * key, uint64_t value) +int32_t +ec_dict_set_number(dict_t *dict, char *key, uint64_t value) { - int ret = -1; - uint64_t * ptr; + int ret = -1; + uint64_t *ptr; ptr = GF_MALLOC(sizeof(value), gf_common_mt_char); if (ptr == NULL) { @@ -275,14 +267,15 @@ int32_t ec_dict_set_number(dict_t * dict, char * key, uint64_t value) ret = dict_set_bin(dict, key, ptr, sizeof(value)); if (ret) - GF_FREE (ptr); + GF_FREE(ptr); return ret; } -int32_t ec_dict_del_number(dict_t * dict, char * key, uint64_t * value) +int32_t +ec_dict_del_number(dict_t *dict, char *key, uint64_t *value) { - void * ptr; + void *ptr; int32_t len, err; if (dict == NULL) { @@ -303,24 +296,23 @@ int32_t ec_dict_del_number(dict_t * dict, char * key, uint64_t * value) return 0; } -int32_t ec_dict_set_config(dict_t * dict, char * key, ec_config_t * config) +int32_t +ec_dict_set_config(dict_t *dict, char *key, ec_config_t *config) { int ret = -1; - uint64_t * ptr, data; + uint64_t *ptr, data; - if (config->version > EC_CONFIG_VERSION) - { - gf_msg ("ec", GF_LOG_ERROR, EINVAL, - EC_MSG_UNSUPPORTED_VERSION, - "Trying to store an unsupported config " - "version (%u)", config->version); + if (config->version > EC_CONFIG_VERSION) { + gf_msg("ec", GF_LOG_ERROR, EINVAL, EC_MSG_UNSUPPORTED_VERSION, + "Trying to store an unsupported config " + "version (%u)", + config->version); return -EINVAL; } ptr = GF_MALLOC(sizeof(uint64_t), gf_common_mt_char); - if (ptr == NULL) - { + if (ptr == NULL) { return -ENOMEM; } @@ -335,14 +327,15 @@ int32_t ec_dict_set_config(dict_t * dict, char * key, ec_config_t * config) ret = dict_set_bin(dict, key, ptr, sizeof(uint64_t)); if (ret) - GF_FREE (ptr); + GF_FREE(ptr); return ret; } -int32_t ec_dict_del_config(dict_t * dict, char * key, ec_config_t * config) +int32_t +ec_dict_del_config(dict_t *dict, char *key, ec_config_t *config) { - void * ptr; + void *ptr; uint64_t data; int32_t len, err; @@ -372,12 +365,9 @@ int32_t ec_dict_del_config(dict_t * dict, char * key, ec_config_t * config) } config->version = (data >> 56) & 0xff; - if (config->version > EC_CONFIG_VERSION) - { - gf_msg ("ec", GF_LOG_ERROR, EINVAL, - EC_MSG_UNSUPPORTED_VERSION, - "Found an unsupported config version (%u)", - config->version); + if (config->version > EC_CONFIG_VERSION) { + gf_msg("ec", GF_LOG_ERROR, EINVAL, EC_MSG_UNSUPPORTED_VERSION, + "Found an unsupported config version (%u)", config->version); return -EINVAL; } @@ -393,7 +383,8 @@ int32_t ec_dict_del_config(dict_t * dict, char * key, ec_config_t * config) return 0; } -gf_boolean_t ec_loc_gfid_check(xlator_t *xl, uuid_t dst, uuid_t src) +gf_boolean_t +ec_loc_gfid_check(xlator_t *xl, uuid_t dst, uuid_t src) { if (gf_uuid_is_null(src)) { return _gf_true; @@ -406,9 +397,8 @@ gf_boolean_t ec_loc_gfid_check(xlator_t *xl, uuid_t dst, uuid_t src) } if (gf_uuid_compare(dst, src) != 0) { - gf_msg (xl->name, GF_LOG_WARNING, 0, - EC_MSG_GFID_MISMATCH, - "Mismatching GFID's in loc"); + gf_msg(xl->name, GF_LOG_WARNING, 0, EC_MSG_GFID_MISMATCH, + "Mismatching GFID's in loc"); return _gf_false; } @@ -416,7 +406,8 @@ gf_boolean_t ec_loc_gfid_check(xlator_t *xl, uuid_t dst, uuid_t src) return _gf_true; } -int32_t ec_loc_setup_inode(xlator_t *xl, inode_table_t *table, loc_t *loc) +int32_t +ec_loc_setup_inode(xlator_t *xl, inode_table_t *table, loc_t *loc) { int32_t ret = -EINVAL; @@ -427,7 +418,7 @@ int32_t ec_loc_setup_inode(xlator_t *xl, inode_table_t *table, loc_t *loc) } else if (table != NULL) { if (!gf_uuid_is_null(loc->gfid)) { loc->inode = inode_find(table, loc->gfid); - } else if (loc->path && strchr (loc->path, '/')) { + } else if (loc->path && strchr(loc->path, '/')) { loc->inode = inode_resolve(table, (char *)loc->path); } } @@ -438,7 +429,8 @@ out: return ret; } -int32_t ec_loc_setup_parent(xlator_t *xl, inode_table_t *table, loc_t *loc) +int32_t +ec_loc_setup_parent(xlator_t *xl, inode_table_t *table, loc_t *loc) { char *path, *parent; int32_t ret = -EINVAL; @@ -450,13 +442,11 @@ int32_t ec_loc_setup_parent(xlator_t *xl, inode_table_t *table, loc_t *loc) } else if (table != NULL) { if (!gf_uuid_is_null(loc->pargfid)) { loc->parent = inode_find(table, loc->pargfid); - } else if (loc->path && strchr (loc->path, '/')) { + } else if (loc->path && strchr(loc->path, '/')) { path = gf_strdup(loc->path); if (path == NULL) { - gf_msg (xl->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, - "Unable to duplicate path '%s'", - loc->path); + gf_msg(xl->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Unable to duplicate path '%s'", loc->path); ret = -ENOMEM; @@ -483,7 +473,8 @@ out: return ret; } -int32_t ec_loc_setup_path(xlator_t *xl, loc_t *loc) +int32_t +ec_loc_setup_path(xlator_t *xl, loc_t *loc) { uuid_t root = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; char *name; @@ -513,10 +504,8 @@ int32_t ec_loc_setup_path(xlator_t *xl, loc_t *loc) if (loc->name != NULL) { if (strcmp(loc->name, name) != 0) { - gf_msg (xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_INVALID_LOC_NAME, - "Invalid name '%s' in loc", - loc->name); + gf_msg(xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_LOC_NAME, + "Invalid name '%s' in loc", loc->name); goto out; } @@ -531,7 +520,8 @@ out: return ret; } -int32_t ec_loc_parent(xlator_t *xl, loc_t *loc, loc_t *parent) +int32_t +ec_loc_parent(xlator_t *xl, loc_t *loc, loc_t *parent) { inode_table_t *table = NULL; char *str = NULL; @@ -548,24 +538,20 @@ int32_t ec_loc_parent(xlator_t *xl, loc_t *loc, loc_t *parent) if (!gf_uuid_is_null(loc->pargfid)) { gf_uuid_copy(parent->gfid, loc->pargfid); } - if (loc->path && strchr (loc->path, '/')) { + if (loc->path && strchr(loc->path, '/')) { str = gf_strdup(loc->path); if (str == NULL) { - gf_msg (xl->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, - "Unable to duplicate path '%s'", - loc->path); + gf_msg(xl->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Unable to duplicate path '%s'", loc->path); - goto out; + goto out; } parent->path = gf_strdup(dirname(str)); if (parent->path == NULL) { - gf_msg (xl->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, - "Unable to duplicate path '%s'", - dirname(str)); + gf_msg(xl->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Unable to duplicate path '%s'", dirname(str)); - goto out; + goto out; } } @@ -582,9 +568,8 @@ int32_t ec_loc_parent(xlator_t *xl, loc_t *loc, loc_t *parent) if ((parent->inode == NULL) && (parent->path == NULL) && gf_uuid_is_null(parent->gfid)) { - gf_msg (xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_LOC_PARENT_INODE_MISSING, - "Parent inode missing for loc_t"); + gf_msg(xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_LOC_PARENT_INODE_MISSING, + "Parent inode missing for loc_t"); ret = -EINVAL; @@ -603,8 +588,8 @@ out: return ret; } -int32_t ec_loc_update(xlator_t *xl, loc_t *loc, inode_t *inode, - struct iatt *iatt) +int32_t +ec_loc_update(xlator_t *xl, loc_t *loc, inode_t *inode, struct iatt *iatt) { inode_table_t *table = NULL; int32_t ret = -EINVAL; @@ -645,9 +630,10 @@ out: return ret; } -int32_t ec_loc_from_fd(xlator_t * xl, loc_t * loc, fd_t * fd) +int32_t +ec_loc_from_fd(xlator_t *xl, loc_t *loc, fd_t *fd) { - ec_fd_t * ctx; + ec_fd_t *ctx; int32_t ret = -ENOMEM; memset(loc, 0, sizeof(*loc)); @@ -672,7 +658,8 @@ out: return ret; } -int32_t ec_loc_from_loc(xlator_t * xl, loc_t * dst, loc_t * src) +int32_t +ec_loc_from_loc(xlator_t *xl, loc_t *dst, loc_t *src) { int32_t ret = -ENOMEM; @@ -695,62 +682,61 @@ out: return ret; } -void ec_owner_set(call_frame_t * frame, void * owner) +void +ec_owner_set(call_frame_t *frame, void *owner) { set_lk_owner_from_ptr(&frame->root->lk_owner, owner); } -void ec_owner_copy(call_frame_t *frame, gf_lkowner_t *owner) +void +ec_owner_copy(call_frame_t *frame, gf_lkowner_t *owner) { - lk_owner_copy (&frame->root->lk_owner, owner); + lk_owner_copy(&frame->root->lk_owner, owner); } static void -ec_stripe_cache_init (ec_t *ec, ec_inode_t *ctx) +ec_stripe_cache_init(ec_t *ec, ec_inode_t *ctx) { - ec_stripe_list_t *stripe_cache = NULL; + ec_stripe_list_t *stripe_cache = NULL; - stripe_cache = &(ctx->stripe_cache); - if (stripe_cache->max == 0) { - stripe_cache->max = ec->stripe_cache; - } + stripe_cache = &(ctx->stripe_cache); + if (stripe_cache->max == 0) { + stripe_cache->max = ec->stripe_cache; + } } -ec_inode_t * __ec_inode_get(inode_t * inode, xlator_t * xl) +ec_inode_t * +__ec_inode_get(inode_t *inode, xlator_t *xl) { - ec_inode_t * ctx = NULL; + ec_inode_t *ctx = NULL; uint64_t value = 0; - if ((__inode_ctx_get(inode, xl, &value) != 0) || (value == 0)) - { + if ((__inode_ctx_get(inode, xl, &value) != 0) || (value == 0)) { ctx = GF_MALLOC(sizeof(*ctx), ec_mt_ec_inode_t); - if (ctx != NULL) - { + if (ctx != NULL) { memset(ctx, 0, sizeof(*ctx)); INIT_LIST_HEAD(&ctx->heal); INIT_LIST_HEAD(&ctx->stripe_cache.lru); value = (uint64_t)(uintptr_t)ctx; - if (__inode_ctx_set(inode, xl, &value) != 0) - { + if (__inode_ctx_set(inode, xl, &value) != 0) { GF_FREE(ctx); return NULL; } } - } - else - { + } else { ctx = (ec_inode_t *)(uintptr_t)value; } if (ctx) - ec_stripe_cache_init (xl->private, ctx); + ec_stripe_cache_init(xl->private, ctx); return ctx; } -ec_inode_t * ec_inode_get(inode_t * inode, xlator_t * xl) +ec_inode_t * +ec_inode_get(inode_t *inode, xlator_t *xl) { - ec_inode_t * ctx = NULL; + ec_inode_t *ctx = NULL; LOCK(&inode->lock); @@ -761,30 +747,31 @@ ec_inode_t * ec_inode_get(inode_t * inode, xlator_t * xl) return ctx; } -ec_fd_t * __ec_fd_get(fd_t * fd, xlator_t * xl) +ec_fd_t * +__ec_fd_get(fd_t *fd, xlator_t *xl) { int i = 0; - ec_fd_t * ctx = NULL; + ec_fd_t *ctx = NULL; uint64_t value = 0; ec_t *ec = xl->private; if ((__fd_ctx_get(fd, xl, &value) != 0) || (value == 0)) { - ctx = GF_MALLOC(sizeof(*ctx) + (sizeof (ec_fd_status_t) * ec->nodes), + ctx = GF_MALLOC(sizeof(*ctx) + (sizeof(ec_fd_status_t) * ec->nodes), ec_mt_ec_fd_t); if (ctx != NULL) { memset(ctx, 0, sizeof(*ctx)); for (i = 0; i < ec->nodes; i++) { - if (fd_is_anonymous (fd)) { - ctx->fd_status[i] = EC_FD_OPENED; + if (fd_is_anonymous(fd)) { + ctx->fd_status[i] = EC_FD_OPENED; } else { - ctx->fd_status[i] = EC_FD_NOT_OPENED; + ctx->fd_status[i] = EC_FD_NOT_OPENED; } } value = (uint64_t)(uintptr_t)ctx; if (__fd_ctx_set(fd, xl, value) != 0) { - GF_FREE (ctx); + GF_FREE(ctx); return NULL; } } @@ -803,9 +790,10 @@ ec_fd_t * __ec_fd_get(fd_t * fd, xlator_t * xl) return ctx; } -ec_fd_t * ec_fd_get(fd_t * fd, xlator_t * xl) +ec_fd_t * +ec_fd_get(fd_t *fd, xlator_t *xl) { - ec_fd_t * ctx = NULL; + ec_fd_t *ctx = NULL; LOCK(&fd->lock); @@ -817,37 +805,36 @@ ec_fd_t * ec_fd_get(fd_t * fd, xlator_t * xl) } gf_boolean_t -ec_is_internal_xattr (dict_t *dict, char *key, data_t *value, void *data) +ec_is_internal_xattr(dict_t *dict, char *key, data_t *value, void *data) { - if (key && - (strncmp (key, EC_XATTR_PREFIX, SLEN (EC_XATTR_PREFIX)) == 0)) - return _gf_true; + if (key && (strncmp(key, EC_XATTR_PREFIX, SLEN(EC_XATTR_PREFIX)) == 0)) + return _gf_true; - return _gf_false; + return _gf_false; } void -ec_filter_internal_xattrs (dict_t *xattr) +ec_filter_internal_xattrs(dict_t *xattr) { - dict_foreach_match (xattr, ec_is_internal_xattr, NULL, - dict_remove_foreach_fn, NULL); + dict_foreach_match(xattr, ec_is_internal_xattr, NULL, + dict_remove_foreach_fn, NULL); } gf_boolean_t -ec_is_data_fop (glusterfs_fop_t fop) +ec_is_data_fop(glusterfs_fop_t fop) { - switch (fop) { + switch (fop) { case GF_FOP_WRITE: case GF_FOP_TRUNCATE: case GF_FOP_FTRUNCATE: case GF_FOP_FALLOCATE: case GF_FOP_DISCARD: case GF_FOP_ZEROFILL: - return _gf_true; + return _gf_true; default: - return _gf_false; - } - return _gf_false; + return _gf_false; + } + return _gf_false; } /* gf_boolean_t diff --git a/xlators/cluster/ec/src/ec-inode-read.c b/xlators/cluster/ec/src/ec-inode-read.c index 30d76371da6..7a8b174bbed 100644 --- a/xlators/cluster/ec/src/ec-inode-read.c +++ b/xlators/cluster/ec/src/ec-inode-read.c @@ -21,8 +21,9 @@ /* FOP: access */ -int32_t ec_access_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, dict_t * xdata) +int32_t +ec_access_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, dict_t *xdata) { ec_fop_data_t *fop = NULL; ec_cbk_data_t *cbk = NULL; @@ -35,27 +36,27 @@ int32_t ec_access_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); - cbk = ec_cbk_data_allocate (frame, this, fop, GF_FOP_ACCESS, - idx, op_ret, op_errno); + cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_ACCESS, idx, op_ret, + op_errno); if (cbk) { if (xdata) - cbk->xdata = dict_ref (xdata); - ec_combine (cbk, NULL); + cbk->xdata = dict_ref(xdata); + ec_combine(cbk, NULL); } out: - if (fop != NULL) - { - ec_complete (fop); + if (fop != NULL) { + ec_complete(fop); } return 0; } -void ec_wind_access(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_access(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -67,19 +68,19 @@ void ec_wind_access(ec_t * ec, ec_fop_data_t * fop, int32_t idx) int32_t ec_manager_access(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t *cbk = NULL; + ec_cbk_data_t *cbk = NULL; - switch (state) { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: - ec_lock_prepare_inode (fop, &fop->loc[0], EC_QUERY_INFO, 0, - LLONG_MAX); - ec_lock (fop); + ec_lock_prepare_inode(fop, &fop->loc[0], EC_QUERY_INFO, 0, + LLONG_MAX); + ec_lock(fop); return EC_STATE_DISPATCH; case EC_STATE_DISPATCH: - ec_dispatch_one (fop); + ec_dispatch_one(fop); return EC_STATE_PREPARE_ANSWER; @@ -92,12 +93,11 @@ ec_manager_access(ec_fop_data_t *fop, int32_t state) case EC_STATE_REPORT: cbk = fop->answer; - GF_ASSERT (cbk); + GF_ASSERT(cbk); if (fop->cbks.access != NULL) { if (cbk) { - fop->cbks.access(fop->req_frame, fop, fop->xl, - cbk->op_ret, cbk->op_errno, - cbk->xdata); + fop->cbks.access(fop->req_frame, fop, fop->xl, cbk->op_ret, + cbk->op_errno, cbk->xdata); } } return EC_STATE_LOCK_REUSE; @@ -108,8 +108,8 @@ ec_manager_access(ec_fop_data_t *fop, int32_t state) case -EC_STATE_PREPARE_ANSWER: case -EC_STATE_REPORT: if (fop->cbks.access != NULL) { - fop->cbks.access(fop->req_frame, fop, fop->xl, -1, - fop->error, NULL); + fop->cbks.access(fop->req_frame, fop, fop->xl, -1, fop->error, + NULL); } return EC_STATE_LOCK_REUSE; @@ -126,24 +126,23 @@ ec_manager_access(ec_fop_data_t *fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, - "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; - } + } } -void ec_access(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_access_cbk_t func, void * data, - loc_t * loc, int32_t mask, dict_t * xdata) +void +ec_access(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_access_cbk_t func, void *data, loc_t *loc, + int32_t mask, dict_t *xdata) { - ec_cbk_t callback = { .access = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.access = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(ACCESS) %p", frame); + gf_msg_trace("ec", 0, "EC(ACCESS) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -160,9 +159,8 @@ void ec_access(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, - "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -170,10 +168,9 @@ void ec_access(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -191,14 +188,13 @@ out: /* FOP: getxattr */ -int32_t ec_combine_getxattr(ec_fop_data_t * fop, ec_cbk_data_t * dst, - ec_cbk_data_t * src) +int32_t +ec_combine_getxattr(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src) { - if (!ec_dict_compare(dst->dict, src->dict)) - { - gf_msg (fop->xl->name, GF_LOG_NOTICE, 0, - EC_MSG_DICT_MISMATCH, "Mismatching dictionary in " - "answers of 'GF_FOP_GETXATTR'"); + if (!ec_dict_compare(dst->dict, src->dict)) { + gf_msg(fop->xl->name, GF_LOG_NOTICE, 0, EC_MSG_DICT_MISMATCH, + "Mismatching dictionary in " + "answers of 'GF_FOP_GETXATTR'"); return 0; } @@ -206,12 +202,12 @@ int32_t ec_combine_getxattr(ec_fop_data_t * fop, ec_cbk_data_t * dst, return 1; } -int32_t ec_getxattr_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, dict_t * dict, - dict_t * xdata) +int32_t +ec_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -221,38 +217,30 @@ int32_t ec_getxattr_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_GETXATTR, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (op_ret >= 0) - { - if (dict != NULL) - { + if (cbk != NULL) { + if (op_ret >= 0) { + if (dict != NULL) { cbk->dict = dict_ref(dict); - if (cbk->dict == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + if (cbk->dict == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } } } - if (xdata != NULL) - { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -262,15 +250,15 @@ int32_t ec_getxattr_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_getxattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_getxattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -280,40 +268,40 @@ void ec_wind_getxattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) } void -ec_handle_special_xattrs (ec_fop_data_t *fop) +ec_handle_special_xattrs(ec_fop_data_t *fop) { - ec_cbk_data_t *cbk = NULL; - /* Stime may not be available on all the bricks, so even if some of the - * subvols succeed the operation, treat it as answer.*/ - if (fop->str[0] && - fnmatch (GF_XATTR_STIME_PATTERN, fop->str[0], 0) == 0) { - if (!fop->answer || (fop->answer->op_ret < 0)) { - list_for_each_entry (cbk, &fop->cbk_list, list) { - if (cbk->op_ret >= 0) { - fop->answer = cbk; - break; - } - } + ec_cbk_data_t *cbk = NULL; + /* Stime may not be available on all the bricks, so even if some of the + * subvols succeed the operation, treat it as answer.*/ + if (fop->str[0] && fnmatch(GF_XATTR_STIME_PATTERN, fop->str[0], 0) == 0) { + if (!fop->answer || (fop->answer->op_ret < 0)) { + list_for_each_entry(cbk, &fop->cbk_list, list) + { + if (cbk->op_ret >= 0) { + fop->answer = cbk; + break; } + } } + } } -int32_t ec_manager_getxattr(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_getxattr(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: /* clear-locks commands must be done without any locks acquired to avoid interferences. */ if ((fop->str[0] == NULL) || (strncmp(fop->str[0], GF_XATTR_CLRLK_CMD, - SLEN (GF_XATTR_CLRLK_CMD)) != 0)) { + SLEN(GF_XATTR_CLRLK_CMD)) != 0)) { if (fop->fd == NULL) { - ec_lock_prepare_inode(fop, &fop->loc[0], EC_QUERY_INFO, - 0, LLONG_MAX); + ec_lock_prepare_inode(fop, &fop->loc[0], EC_QUERY_INFO, 0, + LLONG_MAX); } else { ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, 0, LLONG_MAX); @@ -333,11 +321,11 @@ int32_t ec_manager_getxattr(ec_fop_data_t * fop, int32_t state) return EC_STATE_PREPARE_ANSWER; case EC_STATE_PREPARE_ANSWER: - ec_handle_special_xattrs (fop); + ec_handle_special_xattrs(fop); if (fop->minimum == EC_MINIMUM_ALL) { cbk = ec_fop_prepare_answer(fop, _gf_true); } else { - if (ec_dispatch_one_retry (fop, &cbk)) { + if (ec_dispatch_one_retry(fop, &cbk)) { return EC_STATE_DISPATCH; } } @@ -347,10 +335,10 @@ int32_t ec_manager_getxattr(ec_fop_data_t * fop, int32_t state) err = ec_dict_combine(cbk, EC_COMBINE_DICT); if (!ec_cbk_set_error(cbk, -err, _gf_true)) { if (cbk->xdata != NULL) - ec_filter_internal_xattrs (cbk->xdata); + ec_filter_internal_xattrs(cbk->xdata); if (cbk->dict != NULL) - ec_filter_internal_xattrs (cbk->dict); + ec_filter_internal_xattrs(cbk->dict); } } @@ -361,8 +349,7 @@ int32_t ec_manager_getxattr(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.getxattr != NULL) - { + if (fop->cbks.getxattr != NULL) { fop->cbks.getxattr(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, cbk->dict, cbk->xdata); } @@ -376,10 +363,9 @@ int32_t ec_manager_getxattr(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.getxattr != NULL) - { - fop->cbks.getxattr(fop->req_frame, fop, fop->xl, -1, - fop->error, NULL, NULL); + if (fop->cbks.getxattr != NULL) { + fop->cbks.getxattr(fop->req_frame, fop, fop->xl, -1, fop->error, + NULL, NULL); } return EC_STATE_LOCK_REUSE; @@ -397,18 +383,17 @@ int32_t ec_manager_getxattr(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, - "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -int32_t ec_getxattr_heal_cbk(call_frame_t *frame, void *cookie, xlator_t *xl, - int32_t op_ret, int32_t op_errno, uintptr_t mask, - uintptr_t good, uintptr_t bad, dict_t *xdata) +int32_t +ec_getxattr_heal_cbk(call_frame_t *frame, void *cookie, xlator_t *xl, + int32_t op_ret, int32_t op_errno, uintptr_t mask, + uintptr_t good, uintptr_t bad, dict_t *xdata) { ec_fop_data_t *fop = cookie; fop_getxattr_cbk_t func = fop->data; @@ -460,15 +445,15 @@ out: } void -ec_getxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_getxattr_cbk_t func, void *data, - loc_t *loc, const char *name, dict_t *xdata) +ec_getxattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_getxattr_cbk_t func, void *data, loc_t *loc, + const char *name, dict_t *xdata) { - ec_cbk_t callback = { .getxattr = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.getxattr = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(GETXATTR) %p", frame); + gf_msg_trace("ec", 0, "EC(GETXATTR) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -476,25 +461,23 @@ ec_getxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, /* Special handling of an explicit self-heal request */ if ((name != NULL) && (strcmp(name, EC_XATTR_HEAL) == 0)) { - ec_heal(frame, this, target, EC_MINIMUM_ONE, ec_getxattr_heal_cbk, - func, loc, 0, NULL); + ec_heal(frame, this, target, EC_MINIMUM_ONE, ec_getxattr_heal_cbk, func, + loc, 0, NULL); return; } - fop = ec_fop_data_allocate(frame, this, GF_FOP_GETXATTR, - EC_FLAG_LOCK_SHARED, target, minimum, - ec_wind_getxattr, ec_manager_getxattr, callback, - data); + fop = ec_fop_data_allocate( + frame, this, GF_FOP_GETXATTR, EC_FLAG_LOCK_SHARED, target, minimum, + ec_wind_getxattr, ec_manager_getxattr, callback, data); if (fop == NULL) { goto out; } if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, - "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -503,15 +486,14 @@ ec_getxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, /* In case of list-node-uuids xattr, set flag to indicate * the same and use node-uuid xattr for winding fop */ if (XATTR_IS_NODE_UUID_LIST(name)) { - fop->int32 = 1; - fop->str[0] = gf_strdup(GF_XATTR_NODE_UUID_KEY); + fop->int32 = 1; + fop->str[0] = gf_strdup(GF_XATTR_NODE_UUID_KEY); } else { - fop->str[0] = gf_strdup(name); + fop->str[0] = gf_strdup(name); } if (fop->str[0] == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, - "Failed to duplicate a string."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to duplicate a string."); goto out; } @@ -519,10 +501,9 @@ ec_getxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -532,20 +513,20 @@ ec_getxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, out: if (fop != NULL) { - ec_manager (fop, error); + ec_manager(fop, error); } else { - func (frame, NULL, this, -1, error, NULL, NULL); + func(frame, NULL, this, -1, error, NULL, NULL); } } /* FOP: fgetxattr */ -int32_t ec_fgetxattr_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, dict_t * dict, - dict_t * xdata) +int32_t +ec_fgetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -555,38 +536,30 @@ int32_t ec_fgetxattr_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FGETXATTR, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (op_ret >= 0) - { - if (dict != NULL) - { + if (cbk != NULL) { + if (op_ret >= 0) { + if (dict != NULL) { cbk->dict = dict_ref(dict); - if (cbk->dict == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + if (cbk->dict == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } } } - if (xdata != NULL) - { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -596,8 +569,7 @@ int32_t ec_fgetxattr_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } @@ -605,7 +577,7 @@ out: } void -ec_wind_fgetxattr (ec_t *ec, ec_fop_data_t *fop, int32_t idx) +ec_wind_fgetxattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -615,24 +587,23 @@ ec_wind_fgetxattr (ec_t *ec, ec_fop_data_t *fop, int32_t idx) } void -ec_fgetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_fgetxattr_cbk_t func, void *data, - fd_t *fd, const char *name, dict_t *xdata) +ec_fgetxattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fgetxattr_cbk_t func, void *data, fd_t *fd, + const char *name, dict_t *xdata) { - ec_cbk_t callback = { .fgetxattr = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.fgetxattr = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(FGETXATTR) %p", frame); + gf_msg_trace("ec", 0, "EC(FGETXATTR) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate(frame, this, GF_FOP_FGETXATTR, - EC_FLAG_LOCK_SHARED, target, minimum, - ec_wind_fgetxattr, ec_manager_getxattr, - callback, data); + fop = ec_fop_data_allocate( + frame, this, GF_FOP_FGETXATTR, EC_FLAG_LOCK_SHARED, target, minimum, + ec_wind_fgetxattr, ec_manager_getxattr, callback, data); if (fop == NULL) { goto out; } @@ -642,10 +613,9 @@ ec_fgetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, - "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -653,8 +623,8 @@ ec_fgetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (name != NULL) { fop->str[0] = gf_strdup(name); if (fop->str[0] == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, "Failed to duplicate a string."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to duplicate a string."); goto out; } @@ -662,9 +632,9 @@ ec_fgetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -674,22 +644,21 @@ ec_fgetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, out: if (fop != NULL) { - ec_manager (fop, error); + ec_manager(fop, error); } else { - func (frame, NULL, this, -1, error, NULL, NULL); + func(frame, NULL, this, -1, error, NULL, NULL); } } /* FOP: open */ -int32_t ec_combine_open(ec_fop_data_t * fop, ec_cbk_data_t * dst, - ec_cbk_data_t * src) +int32_t +ec_combine_open(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src) { - if (dst->fd != src->fd) - { - gf_msg (fop->xl->name, GF_LOG_NOTICE, 0, - EC_MSG_FD_MISMATCH, "Mismatching fd in answers " - "of 'GF_FOP_OPEN': %p <-> %p", + if (dst->fd != src->fd) { + gf_msg(fop->xl->name, GF_LOG_NOTICE, 0, EC_MSG_FD_MISMATCH, + "Mismatching fd in answers " + "of 'GF_FOP_OPEN': %p <-> %p", dst->fd, src->fd); return 0; @@ -698,12 +667,12 @@ int32_t ec_combine_open(ec_fop_data_t * fop, ec_cbk_data_t * dst, return 1; } -int32_t ec_open_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, fd_t * fd, - dict_t * xdata) +int32_t +ec_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, fd_t *fd, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -713,36 +682,31 @@ int32_t ec_open_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_OPEN, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (op_ret >= 0) - { - if (fd != NULL) - { + if (cbk != NULL) { + if (op_ret >= 0) { + if (fd != NULL) { cbk->fd = fd_ref(fd); - if (cbk->fd == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a " - "file descriptor."); + if (cbk->fd == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, + EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } } } - if (xdata != NULL) - { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -750,20 +714,19 @@ int32_t ec_open_cbk(call_frame_t * frame, void * cookie, xlator_t * this, ec_combine(cbk, ec_combine_open); - ec_update_fd_status (fd, this, idx, op_ret); - + ec_update_fd_status(fd, this, idx, op_ret); } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_open(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_open(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -772,10 +735,10 @@ void ec_wind_open(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], fop->int32, fop->fd, fop->xdata); } -int32_t ec_open_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, - struct iatt *prebuf, struct iatt *postbuf, - dict_t *xdata) +int32_t +ec_open_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iatt *prebuf, + struct iatt *postbuf, dict_t *xdata) { ec_fop_data_t *fop = cookie; int32_t error = 0; @@ -792,14 +755,14 @@ int32_t ec_open_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this, return 0; } -int32_t ec_manager_open(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_open(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; - ec_fd_t * ctx; + ec_cbk_data_t *cbk; + ec_fd_t *ctx; int32_t err; - switch (state) - { + switch (state) { case EC_STATE_INIT: LOCK(&fop->fd->lock); @@ -833,7 +796,7 @@ int32_t ec_manager_open(ec_fop_data_t * fop, int32_t state) fop->uint32 = fop->int32 & O_TRUNC; fop->int32 &= ~(O_APPEND | O_TRUNC); - /* Fall through */ + /* Fall through */ case EC_STATE_DISPATCH: ec_dispatch_all(fop); @@ -864,8 +827,8 @@ int32_t ec_manager_open(ec_fop_data_t * fop, int32_t state) if (fop->uint32 != 0) { ec_sleep(fop); ec_ftruncate(fop->req_frame, fop->xl, cbk->mask, - fop->minimum, ec_open_truncate_cbk, - fop, cbk->fd, 0, NULL); + fop->minimum, ec_open_truncate_cbk, fop, + cbk->fd, 0, NULL); } } } @@ -877,8 +840,7 @@ int32_t ec_manager_open(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.open != NULL) - { + if (fop->cbks.open != NULL) { fop->cbks.open(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, cbk->fd, cbk->xdata); } @@ -891,8 +853,7 @@ int32_t ec_manager_open(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.open != NULL) - { + if (fop->cbks.open != NULL) { fop->cbks.open(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL); } @@ -900,23 +861,23 @@ int32_t ec_manager_open(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_open(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_open_cbk_t func, void * data, loc_t * loc, - int32_t flags, fd_t * fd, dict_t * xdata) +void +ec_open(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_open_cbk_t func, void *data, loc_t *loc, int32_t flags, fd_t *fd, + dict_t *xdata) { - ec_cbk_t callback = { .open = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.open = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(OPEN) %p", frame); + gf_msg_trace("ec", 0, "EC(OPEN) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -933,8 +894,8 @@ void ec_open(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -942,9 +903,9 @@ void ec_open(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -952,9 +913,9 @@ void ec_open(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -972,13 +933,13 @@ out: /* FOP: readlink */ -int32_t ec_combine_readlink(ec_fop_data_t * fop, ec_cbk_data_t * dst, - ec_cbk_data_t * src) +int32_t +ec_combine_readlink(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src) { if (!ec_iatt_combine(fop, dst->iatt, src->iatt, 1)) { - gf_msg (fop->xl->name, GF_LOG_NOTICE, 0, - EC_MSG_IATT_MISMATCH, "Mismatching iatt in " - "answers of 'GF_FOP_READLINK'"); + gf_msg(fop->xl->name, GF_LOG_NOTICE, 0, EC_MSG_IATT_MISMATCH, + "Mismatching iatt in " + "answers of 'GF_FOP_READLINK'"); return 0; } @@ -987,13 +948,13 @@ int32_t ec_combine_readlink(ec_fop_data_t * fop, ec_cbk_data_t * dst, } int32_t -ec_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, const char *path, - struct iatt *buf, dict_t *xdata) +ec_readlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, const char *path, + struct iatt *buf, dict_t *xdata) { - ec_fop_data_t *fop = NULL; - ec_cbk_data_t *cbk = NULL; - int32_t idx = (int32_t)(uintptr_t)cookie; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; + int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -1002,23 +963,23 @@ ec_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); - cbk = ec_cbk_data_allocate (frame, this, fop, fop->id, - idx, op_ret, op_errno); + cbk = ec_cbk_data_allocate(frame, this, fop, fop->id, idx, op_ret, + op_errno); if (cbk) { - if (xdata) - cbk->xdata = dict_ref (xdata); - - if (cbk->op_ret >= 0) { - cbk->iatt[0] = *buf; - cbk->str = gf_strdup (path); - if (!cbk->str) { - ec_cbk_set_error(cbk, ENOMEM, _gf_true); - } + if (xdata) + cbk->xdata = dict_ref(xdata); + + if (cbk->op_ret >= 0) { + cbk->iatt[0] = *buf; + cbk->str = gf_strdup(path); + if (!cbk->str) { + ec_cbk_set_error(cbk, ENOMEM, _gf_true); } - ec_combine (cbk, NULL); + } + ec_combine(cbk, NULL); } out: @@ -1028,7 +989,8 @@ out: return 0; } -void ec_wind_readlink(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_readlink(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -1037,21 +999,21 @@ void ec_wind_readlink(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], fop->size, fop->xdata); } -int32_t ec_manager_readlink(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_readlink(ec_fop_data_t *fop, int32_t state) { ec_cbk_data_t *cbk = NULL; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: - ec_lock_prepare_inode (fop, &fop->loc[0], EC_QUERY_INFO, 0, - LLONG_MAX); - ec_lock (fop); + ec_lock_prepare_inode(fop, &fop->loc[0], EC_QUERY_INFO, 0, + LLONG_MAX); + ec_lock(fop); return EC_STATE_DISPATCH; case EC_STATE_DISPATCH: - ec_dispatch_one (fop); + ec_dispatch_one(fop); return EC_STATE_PREPARE_ANSWER; @@ -1068,11 +1030,11 @@ int32_t ec_manager_readlink(ec_fop_data_t * fop, int32_t state) case EC_STATE_REPORT: cbk = fop->answer; - GF_ASSERT (cbk); + GF_ASSERT(cbk); if (fop->cbks.readlink != NULL) { - fop->cbks.readlink (fop->req_frame, fop, fop->xl, cbk->op_ret, - cbk->op_errno, cbk->str, &cbk->iatt[0], - cbk->xdata); + fop->cbks.readlink(fop->req_frame, fop, fop->xl, cbk->op_ret, + cbk->op_errno, cbk->str, &cbk->iatt[0], + cbk->xdata); } return EC_STATE_LOCK_REUSE; @@ -1083,8 +1045,8 @@ int32_t ec_manager_readlink(ec_fop_data_t * fop, int32_t state) case -EC_STATE_PREPARE_ANSWER: case -EC_STATE_REPORT: if (fop->cbks.readlink != NULL) { - fop->cbks.readlink(fop->req_frame, fop, fop->xl, -1, - fop->error, NULL, NULL, NULL); + fop->cbks.readlink(fop->req_frame, fop, fop->xl, -1, fop->error, + NULL, NULL, NULL); } return EC_STATE_LOCK_REUSE; @@ -1100,32 +1062,31 @@ int32_t ec_manager_readlink(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_readlink(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_readlink_cbk_t func, void * data, - loc_t * loc, size_t size, dict_t * xdata) +void +ec_readlink(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_readlink_cbk_t func, void *data, loc_t *loc, + size_t size, dict_t *xdata) { - ec_cbk_t callback = { .readlink = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.readlink = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(READLINK) %p", frame); + gf_msg_trace("ec", 0, "EC(READLINK) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate(frame, this, GF_FOP_READLINK, - EC_FLAG_LOCK_SHARED, target, minimum, - ec_wind_readlink, ec_manager_readlink, callback, - data); + fop = ec_fop_data_allocate( + frame, this, GF_FOP_READLINK, EC_FLAG_LOCK_SHARED, target, minimum, + ec_wind_readlink, ec_manager_readlink, callback, data); if (fop == NULL) { goto out; } @@ -1134,8 +1095,8 @@ void ec_readlink(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -1143,9 +1104,9 @@ void ec_readlink(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1163,7 +1124,8 @@ out: /* FOP: readv */ -int32_t ec_readv_rebuild(ec_t * ec, ec_fop_data_t * fop, ec_cbk_data_t * cbk) +int32_t +ec_readv_rebuild(ec_t *ec, ec_fop_data_t *fop, ec_cbk_data_t *cbk) { struct iovec vector[1]; ec_cbk_data_t *ans = NULL; @@ -1256,22 +1218,21 @@ out: return err; } -int32_t ec_combine_readv(ec_fop_data_t * fop, ec_cbk_data_t * dst, - ec_cbk_data_t * src) +int32_t +ec_combine_readv(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src) { - if (!ec_vector_compare(dst->vector, dst->int32, src->vector, src->int32)) - { - gf_msg (fop->xl->name, GF_LOG_NOTICE, 0, - EC_MSG_VECTOR_MISMATCH, "Mismatching vector in " - "answers of 'GF_FOP_READ'"); + if (!ec_vector_compare(dst->vector, dst->int32, src->vector, src->int32)) { + gf_msg(fop->xl->name, GF_LOG_NOTICE, 0, EC_MSG_VECTOR_MISMATCH, + "Mismatching vector in " + "answers of 'GF_FOP_READ'"); return 0; } if (!ec_iatt_combine(fop, dst->iatt, src->iatt, 1)) { - gf_msg (fop->xl->name, GF_LOG_NOTICE, 0, - EC_MSG_IATT_MISMATCH, "Mismatching iatt in " - "answers of 'GF_FOP_READ'"); + gf_msg(fop->xl->name, GF_LOG_NOTICE, 0, EC_MSG_IATT_MISMATCH, + "Mismatching iatt in " + "answers of 'GF_FOP_READ'"); return 0; } @@ -1279,14 +1240,14 @@ int32_t ec_combine_readv(ec_fop_data_t * fop, ec_cbk_data_t * dst, return 1; } -int32_t ec_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, struct iovec * vector, - int32_t count, struct iatt * stbuf, - struct iobref * iobref, dict_t * xdata) +int32_t +ec_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, struct iovec *vector, int32_t count, + struct iatt *stbuf, struct iobref *iobref, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; - ec_t * ec = this->private; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; + ec_t *ec = this->private; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -1296,8 +1257,8 @@ int32_t ec_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_READ, idx, op_ret, op_errno); @@ -1308,9 +1269,9 @@ int32_t ec_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this, if (count > 0) { cbk->vector = iov_dup(vector, count); if (cbk->vector == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, "Failed to duplicate a " - "vector list."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to duplicate a " + "vector list."); goto out; } @@ -1322,9 +1283,9 @@ int32_t ec_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this, if (iobref != NULL) { cbk->buffers = iobref_ref(iobref); if (cbk->buffers == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_BUF_REF_FAIL, "Failed to reference a " - "buffer."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_BUF_REF_FAIL, + "Failed to reference a " + "buffer."); goto out; } @@ -1333,9 +1294,9 @@ int32_t ec_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this, if (xdata != NULL) { cbk->xdata = dict_ref(xdata); if (cbk->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1356,7 +1317,8 @@ out: return 0; } -void ec_wind_readv(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_readv(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -1365,12 +1327,12 @@ void ec_wind_readv(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->size, fop->offset, fop->uint32, fop->xdata); } -int32_t ec_manager_readv(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_readv(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: fop->user_size = fop->size; fop->head = ec_adjust_offset_down(fop->xl->private, &fop->offset, @@ -1378,7 +1340,7 @@ int32_t ec_manager_readv(ec_fop_data_t * fop, int32_t state) fop->size += fop->head; ec_adjust_size_up(fop->xl->private, &fop->size, _gf_true); - /* Fall through */ + /* Fall through */ case EC_STATE_LOCK: ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, fop->offset, @@ -1397,8 +1359,7 @@ int32_t ec_manager_readv(ec_fop_data_t * fop, int32_t state) if (cbk != NULL) { int32_t err; - ec_iatt_rebuild(fop->xl->private, cbk->iatt, 1, - cbk->count); + ec_iatt_rebuild(fop->xl->private, cbk->iatt, 1, cbk->count); err = ec_readv_rebuild(fop->xl->private, fop, cbk); if (err != 0) { @@ -1413,8 +1374,7 @@ int32_t ec_manager_readv(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.readv != NULL) - { + if (fop->cbks.readv != NULL) { fop->cbks.readv(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, cbk->vector, cbk->int32, &cbk->iatt[0], cbk->buffers, cbk->xdata); @@ -1429,8 +1389,7 @@ int32_t ec_manager_readv(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.readv != NULL) - { + if (fop->cbks.readv != NULL) { fop->cbks.readv(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, 0, NULL, NULL, NULL); } @@ -1450,31 +1409,31 @@ int32_t ec_manager_readv(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_readv(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_readv_cbk_t func, void * data, fd_t * fd, - size_t size, off_t offset, uint32_t flags, dict_t * xdata) +void +ec_readv(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_readv_cbk_t func, void *data, fd_t *fd, size_t size, off_t offset, + uint32_t flags, dict_t *xdata) { - ec_cbk_t callback = { .readv = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.readv = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(READ) %p", frame); + gf_msg_trace("ec", 0, "EC(READ) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); fop = ec_fop_data_allocate(frame, this, GF_FOP_READ, EC_FLAG_LOCK_SHARED, - target, minimum, ec_wind_readv, - ec_manager_readv, callback, data); + target, minimum, ec_wind_readv, ec_manager_readv, + callback, data); if (fop == NULL) { goto out; } @@ -1488,9 +1447,9 @@ void ec_readv(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -1498,9 +1457,9 @@ void ec_readv(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1518,9 +1477,9 @@ out: /* FOP: seek */ -int32_t ec_seek_cbk(call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, off_t offset, - dict_t *xdata) +int32_t +ec_seek_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, off_t offset, dict_t *xdata) { ec_fop_data_t *fop = NULL; ec_cbk_data_t *cbk = NULL; @@ -1534,8 +1493,8 @@ int32_t ec_seek_cbk(call_frame_t *frame, void *cookie, xlator_t *this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_SEEK, idx, op_ret, op_errno); @@ -1563,7 +1522,8 @@ out: return 0; } -void ec_wind_seek(ec_t *ec, ec_fop_data_t *fop, int32_t idx) +void +ec_wind_seek(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -1572,126 +1532,128 @@ void ec_wind_seek(ec_t *ec, ec_fop_data_t *fop, int32_t idx) fop->offset, fop->seek, fop->xdata); } -int32_t ec_manager_seek(ec_fop_data_t *fop, int32_t state) +int32_t +ec_manager_seek(ec_fop_data_t *fop, int32_t state) { ec_cbk_data_t *cbk; size_t size; switch (state) { - case EC_STATE_INIT: - fop->user_size = fop->offset; - fop->head = ec_adjust_offset_down(fop->xl->private, &fop->offset, - _gf_true); + case EC_STATE_INIT: + fop->user_size = fop->offset; + fop->head = ec_adjust_offset_down(fop->xl->private, &fop->offset, + _gf_true); - /* Fall through */ + /* Fall through */ - case EC_STATE_LOCK: - ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, fop->offset, LLONG_MAX); - ec_lock(fop); + case EC_STATE_LOCK: + ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, fop->offset, + LLONG_MAX); + ec_lock(fop); - return EC_STATE_DISPATCH; + return EC_STATE_DISPATCH; - case EC_STATE_DISPATCH: - /* This shouldn't fail because we have the inode locked. */ - GF_ASSERT(ec_get_inode_size(fop, fop->locks[0].lock->loc.inode, - &size)); + case EC_STATE_DISPATCH: + /* This shouldn't fail because we have the inode locked. */ + GF_ASSERT( + ec_get_inode_size(fop, fop->locks[0].lock->loc.inode, &size)); - if (fop->user_size >= size) { - ec_fop_set_error(fop, ENXIO); + if (fop->user_size >= size) { + ec_fop_set_error(fop, ENXIO); - return EC_STATE_REPORT; - } + return EC_STATE_REPORT; + } - ec_dispatch_one(fop); + ec_dispatch_one(fop); - return EC_STATE_PREPARE_ANSWER; + return EC_STATE_PREPARE_ANSWER; - case EC_STATE_PREPARE_ANSWER: - if (ec_dispatch_one_retry(fop, &cbk)) { - return EC_STATE_DISPATCH; - } - if ((cbk != NULL) && (cbk->op_ret >= 0)) { - ec_t *ec = fop->xl->private; + case EC_STATE_PREPARE_ANSWER: + if (ec_dispatch_one_retry(fop, &cbk)) { + return EC_STATE_DISPATCH; + } + if ((cbk != NULL) && (cbk->op_ret >= 0)) { + ec_t *ec = fop->xl->private; - /* This shouldn't fail because we have the inode locked. */ - GF_ASSERT(ec_get_inode_size(fop, fop->locks[0].lock->loc.inode, - &size)); + /* This shouldn't fail because we have the inode locked. */ + GF_ASSERT(ec_get_inode_size(fop, fop->locks[0].lock->loc.inode, + &size)); - cbk->offset *= ec->fragments; - if (cbk->offset < fop->user_size) { - cbk->offset = fop->user_size; - } - if (cbk->offset > size) { - cbk->offset = size; + cbk->offset *= ec->fragments; + if (cbk->offset < fop->user_size) { + cbk->offset = fop->user_size; + } + if (cbk->offset > size) { + cbk->offset = size; + } } - } - return EC_STATE_REPORT; + return EC_STATE_REPORT; - case EC_STATE_REPORT: - cbk = fop->answer; + case EC_STATE_REPORT: + cbk = fop->answer; - GF_ASSERT(cbk != NULL); + GF_ASSERT(cbk != NULL); - if (fop->cbks.seek != NULL) { - fop->cbks.seek(fop->req_frame, fop, fop->xl, cbk->op_ret, - cbk->op_errno, cbk->offset, cbk->xdata); - } + if (fop->cbks.seek != NULL) { + fop->cbks.seek(fop->req_frame, fop, fop->xl, cbk->op_ret, + cbk->op_errno, cbk->offset, cbk->xdata); + } - return EC_STATE_LOCK_REUSE; + return EC_STATE_LOCK_REUSE; - case -EC_STATE_INIT: - case -EC_STATE_LOCK: - case -EC_STATE_DISPATCH: - case -EC_STATE_PREPARE_ANSWER: - case -EC_STATE_REPORT: - GF_ASSERT(fop->error != 0); + case -EC_STATE_INIT: + case -EC_STATE_LOCK: + case -EC_STATE_DISPATCH: + case -EC_STATE_PREPARE_ANSWER: + case -EC_STATE_REPORT: + GF_ASSERT(fop->error != 0); - if (fop->cbks.seek != NULL) { - fop->cbks.seek(fop->req_frame, fop, fop->xl, -1, fop->error, 0, - NULL); - } + if (fop->cbks.seek != NULL) { + fop->cbks.seek(fop->req_frame, fop, fop->xl, -1, fop->error, 0, + NULL); + } - return EC_STATE_LOCK_REUSE; + return EC_STATE_LOCK_REUSE; - case -EC_STATE_LOCK_REUSE: - case EC_STATE_LOCK_REUSE: - ec_lock_reuse(fop); + case -EC_STATE_LOCK_REUSE: + case EC_STATE_LOCK_REUSE: + ec_lock_reuse(fop); - return EC_STATE_UNLOCK; + return EC_STATE_UNLOCK; - case -EC_STATE_UNLOCK: - case EC_STATE_UNLOCK: - ec_unlock(fop); + case -EC_STATE_UNLOCK: + case EC_STATE_UNLOCK: + ec_unlock(fop); - return EC_STATE_END; + return EC_STATE_END; - default: - gf_msg (fop->xl->name, GF_LOG_ERROR, 0, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", state, - ec_fop_name(fop->id)); + default: + gf_msg(fop->xl->name, GF_LOG_ERROR, 0, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); - return EC_STATE_END; + return EC_STATE_END; } } -void ec_seek(call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_seek_cbk_t func, void *data, fd_t *fd, - off_t offset, gf_seek_what_t what, dict_t *xdata) +void +ec_seek(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_seek_cbk_t func, void *data, fd_t *fd, off_t offset, + gf_seek_what_t what, dict_t *xdata) { - ec_cbk_t callback = { .seek = func }; + ec_cbk_t callback = {.seek = func}; ec_fop_data_t *fop = NULL; int32_t error = EIO; - gf_msg_trace ("ec", 0, "EC(SEEK) %p", frame); + gf_msg_trace("ec", 0, "EC(SEEK) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); fop = ec_fop_data_allocate(frame, this, GF_FOP_SEEK, EC_FLAG_LOCK_SHARED, - target, minimum, ec_wind_seek, - ec_manager_seek, callback, data); + target, minimum, ec_wind_seek, ec_manager_seek, + callback, data); if (fop == NULL) { goto out; } @@ -1720,13 +1682,13 @@ out: /* FOP: stat */ -int32_t ec_combine_stat(ec_fop_data_t * fop, ec_cbk_data_t * dst, - ec_cbk_data_t * src) +int32_t +ec_combine_stat(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src) { if (!ec_iatt_combine(fop, dst->iatt, src->iatt, 1)) { - gf_msg (fop->xl->name, GF_LOG_NOTICE, 0, - EC_MSG_IATT_MISMATCH, "Mismatching iatt in " - "answers of 'GF_FOP_STAT'"); + gf_msg(fop->xl->name, GF_LOG_NOTICE, 0, EC_MSG_IATT_MISMATCH, + "Mismatching iatt in " + "answers of 'GF_FOP_STAT'"); return 0; } @@ -1734,12 +1696,12 @@ int32_t ec_combine_stat(ec_fop_data_t * fop, ec_cbk_data_t * dst, return 1; } -int32_t ec_stat_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, struct iatt * buf, - dict_t * xdata) +int32_t +ec_stat_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, struct iatt *buf, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -1749,28 +1711,23 @@ int32_t ec_stat_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_STAT, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (op_ret >= 0) - { - if (buf != NULL) - { + if (cbk != NULL) { + if (op_ret >= 0) { + if (buf != NULL) { cbk->iatt[0] = *buf; } } - if (xdata != NULL) - { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1780,15 +1737,15 @@ int32_t ec_stat_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_stat(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_stat(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -1797,12 +1754,12 @@ void ec_wind_stat(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], fop->xdata); } -int32_t ec_manager_stat(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_stat(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: if (fop->fd == NULL) { @@ -1825,8 +1782,7 @@ int32_t ec_manager_stat(ec_fop_data_t * fop, int32_t state) if (cbk != NULL) { if (cbk->iatt[0].ia_type == IA_IFREG) { - ec_iatt_rebuild(fop->xl->private, cbk->iatt, 1, - cbk->count); + ec_iatt_rebuild(fop->xl->private, cbk->iatt, 1, cbk->count); /* This shouldn't fail because we have the inode locked. */ GF_ASSERT(ec_get_inode_size(fop, @@ -1842,18 +1798,13 @@ int32_t ec_manager_stat(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->id == GF_FOP_STAT) - { - if (fop->cbks.stat != NULL) - { + if (fop->id == GF_FOP_STAT) { + if (fop->cbks.stat != NULL) { fop->cbks.stat(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->iatt[0], cbk->xdata); } - } - else - { - if (fop->cbks.fstat != NULL) - { + } else { + if (fop->cbks.fstat != NULL) { fop->cbks.fstat(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->iatt[0], cbk->xdata); } @@ -1868,18 +1819,13 @@ int32_t ec_manager_stat(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->id == GF_FOP_STAT) - { - if (fop->cbks.stat != NULL) - { - fop->cbks.stat(fop->req_frame, fop, fop->xl, -1, - fop->error, NULL, NULL); + if (fop->id == GF_FOP_STAT) { + if (fop->cbks.stat != NULL) { + fop->cbks.stat(fop->req_frame, fop, fop->xl, -1, fop->error, + NULL, NULL); } - } - else - { - if (fop->cbks.fstat != NULL) - { + } else { + if (fop->cbks.fstat != NULL) { fop->cbks.fstat(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL); } @@ -1900,23 +1846,22 @@ int32_t ec_manager_stat(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_stat(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_stat_cbk_t func, void * data, loc_t * loc, - dict_t * xdata) +void +ec_stat(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_stat_cbk_t func, void *data, loc_t *loc, dict_t *xdata) { - ec_cbk_t callback = { .stat = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.stat = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(STAT) %p", frame); + gf_msg_trace("ec", 0, "EC(STAT) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -1931,8 +1876,8 @@ void ec_stat(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -1940,9 +1885,9 @@ void ec_stat(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1960,12 +1905,12 @@ out: /* FOP: fstat */ -int32_t ec_fstat_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, struct iatt * buf, - dict_t * xdata) +int32_t +ec_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, struct iatt *buf, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -1975,28 +1920,23 @@ int32_t ec_fstat_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FSTAT, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (op_ret >= 0) - { - if (buf != NULL) - { + if (cbk != NULL) { + if (op_ret >= 0) { + if (buf != NULL) { cbk->iatt[0] = *buf; } } - if (xdata != NULL) - { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -2006,15 +1946,15 @@ int32_t ec_fstat_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_fstat(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_fstat(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -2023,15 +1963,15 @@ void ec_wind_fstat(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->xdata); } -void ec_fstat(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fstat_cbk_t func, void * data, fd_t * fd, - dict_t * xdata) +void +ec_fstat(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_fstat_cbk_t func, void *data, fd_t *fd, dict_t *xdata) { - ec_cbk_t callback = { .fstat = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.fstat = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(FSTAT) %p", frame); + gf_msg_trace("ec", 0, "EC(FSTAT) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -2049,9 +1989,9 @@ void ec_fstat(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -2059,9 +1999,9 @@ void ec_fstat(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } diff --git a/xlators/cluster/ec/src/ec-inode-write.c b/xlators/cluster/ec/src/ec-inode-write.c index c9fbd3cf7df..ffdac632683 100644 --- a/xlators/cluster/ec/src/ec-inode-write.c +++ b/xlators/cluster/ec/src/ec-inode-write.c @@ -21,56 +21,55 @@ #include "ec-mem-types.h" int32_t -ec_update_writev_cbk (call_frame_t *frame, void *cookie, - xlator_t *this, int32_t op_ret, int32_t op_errno, - struct iatt *prebuf, struct iatt *postbuf, - dict_t *xdata) +ec_update_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iatt *prebuf, + struct iatt *postbuf, dict_t *xdata) { - ec_fop_data_t *fop = cookie; - ec_cbk_data_t *cbk = NULL; + ec_fop_data_t *fop = cookie; + ec_cbk_data_t *cbk = NULL; ec_fop_data_t *parent = fop->parent; - int i = 0; + int i = 0; ec_trace("UPDATE_WRITEV_CBK", cookie, "ret=%d, errno=%d, parent-fop=%s", - op_ret, op_errno, ec_fop_name (parent->id)); + op_ret, op_errno, ec_fop_name(parent->id)); if (op_ret < 0) { - ec_fop_set_error (parent, op_errno); - goto out; + ec_fop_set_error(parent, op_errno); + goto out; } - cbk = ec_cbk_data_allocate (parent->frame, this, parent, - parent->id, 0, op_ret, op_errno); + cbk = ec_cbk_data_allocate(parent->frame, this, parent, parent->id, 0, + op_ret, op_errno); if (!cbk) { - ec_fop_set_error (parent, ENOMEM); - goto out; + ec_fop_set_error(parent, ENOMEM); + goto out; } if (xdata) - cbk->xdata = dict_ref (xdata); + cbk->xdata = dict_ref(xdata); if (prebuf) - cbk->iatt[i++] = *prebuf; + cbk->iatt[i++] = *prebuf; if (postbuf) - cbk->iatt[i++] = *postbuf; + cbk->iatt[i++] = *postbuf; - LOCK (&parent->lock); + LOCK(&parent->lock); { - parent->good &= fop->good; + parent->good &= fop->good; - if (gf_bits_count (parent->good) < parent->minimum) { - __ec_fop_set_error (parent, EIO); - } else if (fop->error == 0 && parent->answer == NULL) { - parent->answer = cbk; - } + if (gf_bits_count(parent->good) < parent->minimum) { + __ec_fop_set_error(parent, EIO); + } else if (fop->error == 0 && parent->answer == NULL) { + parent->answer = cbk; + } } - UNLOCK (&parent->lock); + UNLOCK(&parent->lock); out: return 0; } -int32_t ec_update_write(ec_fop_data_t *fop, uintptr_t mask, off_t offset, - size_t size) +int32_t +ec_update_write(ec_fop_data_t *fop, uintptr_t mask, off_t offset, size_t size) { struct iobref *iobref = NULL; struct iobuf *iobuf = NULL; @@ -94,9 +93,8 @@ int32_t ec_update_write(ec_fop_data_t *fop, uintptr_t mask, off_t offset, vector.iov_len = size; memset(vector.iov_base, 0, vector.iov_len); - ec_writev(fop->frame, fop->xl, mask, fop->minimum, - ec_update_writev_cbk, NULL, fop->fd, &vector, 1, - offset, 0, iobref, NULL); + ec_writev(fop->frame, fop->xl, mask, fop->minimum, ec_update_writev_cbk, + NULL, fop->fd, &vector, 1, offset, 0, iobref, NULL); err = 0; @@ -112,62 +110,63 @@ out: } int -ec_inode_write_cbk (call_frame_t *frame, xlator_t *this, void *cookie, - int op_ret, int op_errno, struct iatt *prestat, - struct iatt *poststat, dict_t *xdata) +ec_inode_write_cbk(call_frame_t *frame, xlator_t *this, void *cookie, + int op_ret, int op_errno, struct iatt *prestat, + struct iatt *poststat, dict_t *xdata) { - ec_fop_data_t *fop = NULL; - ec_cbk_data_t *cbk = NULL; - int i = 0; - int idx = 0; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; + int i = 0; + int idx = 0; - VALIDATE_OR_GOTO (this, out); - GF_VALIDATE_OR_GOTO (this->name, frame, out); - GF_VALIDATE_OR_GOTO (this->name, frame->local, out); - GF_VALIDATE_OR_GOTO (this->name, this->private, out); + VALIDATE_OR_GOTO(this, out); + GF_VALIDATE_OR_GOTO(this->name, frame, out); + GF_VALIDATE_OR_GOTO(this->name, frame->local, out); + GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = frame->local; - idx = (int32_t)(uintptr_t) cookie; + fop = frame->local; + idx = (int32_t)(uintptr_t)cookie; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); - cbk = ec_cbk_data_allocate (frame, this, fop, fop->id, idx, op_ret, - op_errno); - if (!cbk) - goto out; + cbk = ec_cbk_data_allocate(frame, this, fop, fop->id, idx, op_ret, + op_errno); + if (!cbk) + goto out; - if (op_ret < 0) - goto out; + if (op_ret < 0) + goto out; - if (xdata) - cbk->xdata = dict_ref (xdata); + if (xdata) + cbk->xdata = dict_ref(xdata); - if (prestat) - cbk->iatt[i++] = *prestat; + if (prestat) + cbk->iatt[i++] = *prestat; - if (poststat) - cbk->iatt[i++] = *poststat; + if (poststat) + cbk->iatt[i++] = *poststat; out: - if (cbk) - ec_combine (cbk, ec_combine_write); + if (cbk) + ec_combine(cbk, ec_combine_write); - if (fop) - ec_complete (fop); - return 0; + if (fop) + ec_complete(fop); + return 0; } /* FOP: removexattr */ -int32_t ec_removexattr_cbk (call_frame_t *frame, void *cookie, - xlator_t *this, int32_t op_ret, int32_t op_errno, - dict_t *xdata) +int32_t +ec_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno, - NULL, NULL, xdata); + return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, NULL, NULL, + xdata); } -void ec_wind_removexattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_removexattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -177,127 +176,123 @@ void ec_wind_removexattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) } void -ec_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, - int32_t op_errno, dict_t *xdata) +ec_xattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, dict_t *xdata) { - ec_fop_data_t *fop = cookie; - switch (fop->id) { + ec_fop_data_t *fop = cookie; + switch (fop->id) { case GF_FOP_SETXATTR: - if (fop->cbks.setxattr) { - fop->cbks.setxattr (frame, cookie, this, op_ret, - op_errno, xdata); - } - break; + if (fop->cbks.setxattr) { + fop->cbks.setxattr(frame, cookie, this, op_ret, op_errno, + xdata); + } + break; case GF_FOP_REMOVEXATTR: - if (fop->cbks.removexattr) { - fop->cbks.removexattr (frame, cookie, this, op_ret, - op_errno, xdata); - } - break; + if (fop->cbks.removexattr) { + fop->cbks.removexattr(frame, cookie, this, op_ret, op_errno, + xdata); + } + break; case GF_FOP_FSETXATTR: - if (fop->cbks.fsetxattr) { - fop->cbks.fsetxattr (frame, cookie, this, op_ret, - op_errno, xdata); - } - break; + if (fop->cbks.fsetxattr) { + fop->cbks.fsetxattr(frame, cookie, this, op_ret, op_errno, + xdata); + } + break; case GF_FOP_FREMOVEXATTR: - if (fop->cbks.fremovexattr) { - fop->cbks.fremovexattr (frame, cookie, this, op_ret, - op_errno, xdata); - } - break; - } + if (fop->cbks.fremovexattr) { + fop->cbks.fremovexattr(frame, cookie, this, op_ret, op_errno, + xdata); + } + break; + } } int32_t -ec_manager_xattr (ec_fop_data_t *fop, int32_t state) +ec_manager_xattr(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: - if (fop->fd == NULL) { - ec_lock_prepare_inode(fop, &fop->loc[0], - EC_UPDATE_META | EC_QUERY_INFO, - 0, LLONG_MAX); - } else { - ec_lock_prepare_fd(fop, fop->fd, - EC_UPDATE_META | EC_QUERY_INFO, - 0, LLONG_MAX); - } - ec_lock(fop); + if (fop->fd == NULL) { + ec_lock_prepare_inode(fop, &fop->loc[0], + EC_UPDATE_META | EC_QUERY_INFO, 0, + LLONG_MAX); + } else { + ec_lock_prepare_fd(fop, fop->fd, EC_UPDATE_META | EC_QUERY_INFO, + 0, LLONG_MAX); + } + ec_lock(fop); - return EC_STATE_DISPATCH; + return EC_STATE_DISPATCH; case EC_STATE_DISPATCH: - ec_dispatch_all(fop); + ec_dispatch_all(fop); - return EC_STATE_PREPARE_ANSWER; + return EC_STATE_PREPARE_ANSWER; case EC_STATE_PREPARE_ANSWER: - ec_fop_prepare_answer(fop, _gf_false); + ec_fop_prepare_answer(fop, _gf_false); - return EC_STATE_REPORT; + return EC_STATE_REPORT; case EC_STATE_REPORT: - cbk = fop->answer; + cbk = fop->answer; - GF_ASSERT(cbk != NULL); + GF_ASSERT(cbk != NULL); - ec_xattr_cbk (fop->req_frame, fop, fop->xl, cbk->op_ret, - cbk->op_errno, cbk->xdata); + ec_xattr_cbk(fop->req_frame, fop, fop->xl, cbk->op_ret, + cbk->op_errno, cbk->xdata); - return EC_STATE_LOCK_REUSE; + return EC_STATE_LOCK_REUSE; case -EC_STATE_INIT: case -EC_STATE_LOCK: case -EC_STATE_DISPATCH: case -EC_STATE_PREPARE_ANSWER: case -EC_STATE_REPORT: - GF_ASSERT(fop->error != 0); + GF_ASSERT(fop->error != 0); - ec_xattr_cbk (fop->req_frame, fop, fop->xl, -1, fop->error, - NULL); + ec_xattr_cbk(fop->req_frame, fop, fop->xl, -1, fop->error, NULL); - return EC_STATE_LOCK_REUSE; + return EC_STATE_LOCK_REUSE; case -EC_STATE_LOCK_REUSE: case EC_STATE_LOCK_REUSE: - ec_lock_reuse(fop); + ec_lock_reuse(fop); - return EC_STATE_UNLOCK; + return EC_STATE_UNLOCK; case -EC_STATE_UNLOCK: case EC_STATE_UNLOCK: - ec_unlock(fop); + ec_unlock(fop); - return EC_STATE_END; + return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, - "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); - return EC_STATE_END; - } + return EC_STATE_END; + } } void -ec_removexattr (call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_removexattr_cbk_t func, void *data, - loc_t *loc, const char *name, dict_t *xdata) +ec_removexattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_removexattr_cbk_t func, void *data, + loc_t *loc, const char *name, dict_t *xdata) { - ec_cbk_t callback = { .removexattr = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.removexattr = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(REMOVEXATTR) %p", frame); + gf_msg_trace("ec", 0, "EC(REMOVEXATTR) %p", frame); - VALIDATE_OR_GOTO (this, out); - GF_VALIDATE_OR_GOTO (this->name, frame, out); - GF_VALIDATE_OR_GOTO (this->name, this->private, out); + VALIDATE_OR_GOTO(this, out); + GF_VALIDATE_OR_GOTO(this->name, frame, out); + GF_VALIDATE_OR_GOTO(this->name, this->private, out); fop = ec_fop_data_allocate(frame, this, GF_FOP_REMOVEXATTR, 0, target, minimum, ec_wind_removexattr, ec_manager_xattr, @@ -308,9 +303,8 @@ ec_removexattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, - "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -318,20 +312,18 @@ ec_removexattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (name != NULL) { fop->str[0] = gf_strdup(name); if (fop->str[0] == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, - "Failed to duplicate a string."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to duplicate a string."); goto out; } } if (xdata != NULL) { - fop->xdata = dict_copy_with_ref (xdata, NULL); + fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -341,23 +333,24 @@ ec_removexattr (call_frame_t *frame, xlator_t *this, uintptr_t target, out: if (fop != NULL) { - ec_manager (fop, error); + ec_manager(fop, error); } else { - func (frame, NULL, this, -1, error, NULL); + func(frame, NULL, this, -1, error, NULL); } } /* FOP: fremovexattr */ -int32_t ec_fremovexattr_cbk (call_frame_t *frame, void *cookie, - xlator_t *this, int32_t op_ret, int32_t op_errno, - dict_t *xdata) +int32_t +ec_fremovexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno, - NULL, NULL, xdata); + return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, NULL, NULL, + xdata); } -void ec_wind_fremovexattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_fremovexattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -367,19 +360,19 @@ void ec_wind_fremovexattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) } void -ec_fremovexattr (call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_fremovexattr_cbk_t func, void *data, - fd_t *fd, const char *name, dict_t *xdata) +ec_fremovexattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fremovexattr_cbk_t func, void *data, + fd_t *fd, const char *name, dict_t *xdata) { - ec_cbk_t callback = { .fremovexattr = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.fremovexattr = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(FREMOVEXATTR) %p", frame); + gf_msg_trace("ec", 0, "EC(FREMOVEXATTR) %p", frame); - VALIDATE_OR_GOTO (this, out); - GF_VALIDATE_OR_GOTO (this->name, frame, out); - GF_VALIDATE_OR_GOTO (this->name, this->private, out); + VALIDATE_OR_GOTO(this, out); + GF_VALIDATE_OR_GOTO(this->name, frame, out); + GF_VALIDATE_OR_GOTO(this->name, this->private, out); fop = ec_fop_data_allocate(frame, this, GF_FOP_FREMOVEXATTR, 0, target, minimum, ec_wind_fremovexattr, ec_manager_xattr, @@ -393,10 +386,9 @@ ec_fremovexattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, - "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -404,9 +396,8 @@ ec_fremovexattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (name != NULL) { fop->str[0] = gf_strdup(name); if (fop->str[0] == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, - "Failed to duplicate a string."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to duplicate a string."); goto out; } @@ -414,10 +405,9 @@ ec_fremovexattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -427,24 +417,25 @@ ec_fremovexattr (call_frame_t *frame, xlator_t *this, uintptr_t target, out: if (fop != NULL) { - ec_manager (fop, error); + ec_manager(fop, error); } else { - func (frame, NULL, this, -1, error, NULL); + func(frame, NULL, this, -1, error, NULL); } } /* FOP: setattr */ -int32_t ec_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, - struct iatt *prestat, struct iatt *poststat, - dict_t *xdata) +int32_t +ec_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iatt *prestat, + struct iatt *poststat, dict_t *xdata) { - return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno, - prestat, poststat, xdata); + return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prestat, + poststat, xdata); } -void ec_wind_setattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_setattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -453,18 +444,18 @@ void ec_wind_setattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], &fop->iatt, fop->int32, fop->xdata); } -int32_t ec_manager_setattr(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_setattr(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: if (fop->fd == NULL) { ec_lock_prepare_inode(fop, &fop->loc[0], - EC_UPDATE_META | EC_QUERY_INFO, - 0, LLONG_MAX); + EC_UPDATE_META | EC_QUERY_INFO, 0, + LLONG_MAX); } else { ec_lock_prepare_fd(fop, fop->fd, EC_UPDATE_META | EC_QUERY_INFO, 0, LLONG_MAX); @@ -482,8 +473,7 @@ int32_t ec_manager_setattr(ec_fop_data_t * fop, int32_t state) cbk = ec_fop_prepare_answer(fop, _gf_false); if (cbk != NULL) { if (cbk->iatt[0].ia_type == IA_IFREG) { - ec_iatt_rebuild(fop->xl->private, cbk->iatt, 2, - cbk->count); + ec_iatt_rebuild(fop->xl->private, cbk->iatt, 2, cbk->count); /* This shouldn't fail because we have the inode locked. */ GF_ASSERT(ec_get_inode_size(fop, @@ -500,20 +490,14 @@ int32_t ec_manager_setattr(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->id == GF_FOP_SETATTR) - { - if (fop->cbks.setattr != NULL) - { - fop->cbks.setattr(fop->req_frame, fop, fop->xl, - cbk->op_ret, cbk->op_errno, - &cbk->iatt[0], &cbk->iatt[1], - cbk->xdata); + if (fop->id == GF_FOP_SETATTR) { + if (fop->cbks.setattr != NULL) { + fop->cbks.setattr(fop->req_frame, fop, fop->xl, cbk->op_ret, + cbk->op_errno, &cbk->iatt[0], + &cbk->iatt[1], cbk->xdata); } - } - else - { - if (fop->cbks.fsetattr != NULL) - { + } else { + if (fop->cbks.fsetattr != NULL) { fop->cbks.fsetattr(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->iatt[0], &cbk->iatt[1], @@ -530,18 +514,13 @@ int32_t ec_manager_setattr(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->id == GF_FOP_SETATTR) - { - if (fop->cbks.setattr != NULL) - { + if (fop->id == GF_FOP_SETATTR) { + if (fop->cbks.setattr != NULL) { fop->cbks.setattr(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL); } - } - else - { - if (fop->cbks.fsetattr != NULL) - { + } else { + if (fop->cbks.fsetattr != NULL) { fop->cbks.fsetattr(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL); } @@ -562,25 +541,23 @@ int32_t ec_manager_setattr(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, - "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_setattr(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_setattr_cbk_t func, void * data, - loc_t * loc, struct iatt * stbuf, int32_t valid, - dict_t * xdata) +void +ec_setattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_setattr_cbk_t func, void *data, loc_t *loc, + struct iatt *stbuf, int32_t valid, dict_t *xdata) { - ec_cbk_t callback = { .setattr = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.setattr = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(SETATTR) %p", frame); + gf_msg_trace("ec", 0, "EC(SETATTR) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -597,9 +574,8 @@ void ec_setattr(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, - "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -610,10 +586,9 @@ void ec_setattr(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -631,16 +606,17 @@ out: /* FOP: fsetattr */ -int32_t ec_fsetattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, - struct iatt *prestat, struct iatt *poststat, - dict_t *xdata) +int32_t +ec_fsetattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iatt *prestat, + struct iatt *poststat, dict_t *xdata) { - return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno, - prestat, poststat, xdata); + return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prestat, + poststat, xdata); } -void ec_wind_fsetattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_fsetattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -649,23 +625,24 @@ void ec_wind_fsetattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->fd, &fop->iatt, fop->int32, fop->xdata); } -void ec_fsetattr(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fsetattr_cbk_t func, void * data, - fd_t * fd, struct iatt * stbuf, int32_t valid, dict_t * xdata) +void +ec_fsetattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fsetattr_cbk_t func, void *data, fd_t *fd, + struct iatt *stbuf, int32_t valid, dict_t *xdata) { - ec_cbk_t callback = { .fsetattr = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.fsetattr = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(FSETATTR) %p", frame); + gf_msg_trace("ec", 0, "EC(FSETATTR) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate(frame, this, GF_FOP_FSETATTR, 0, target, - minimum, ec_wind_fsetattr, ec_manager_setattr, - callback, data); + fop = ec_fop_data_allocate(frame, this, GF_FOP_FSETATTR, 0, target, minimum, + ec_wind_fsetattr, ec_manager_setattr, callback, + data); if (fop == NULL) { goto out; } @@ -677,10 +654,9 @@ void ec_fsetattr(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, - "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -691,10 +667,9 @@ void ec_fsetattr(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -712,14 +687,16 @@ out: /* FOP: setxattr */ -int32_t ec_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *xdata) +int32_t +ec_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno, - NULL, NULL, xdata); + return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, NULL, NULL, + xdata); } -void ec_wind_setxattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_setxattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -729,23 +706,23 @@ void ec_wind_setxattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) } void -ec_setxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_setxattr_cbk_t func, void *data, - loc_t *loc, dict_t *dict, int32_t flags, dict_t *xdata) +ec_setxattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_setxattr_cbk_t func, void *data, loc_t *loc, + dict_t *dict, int32_t flags, dict_t *xdata) { - ec_cbk_t callback = { .setxattr = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.setxattr = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(SETXATTR) %p", frame); + gf_msg_trace("ec", 0, "EC(SETXATTR) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate(frame, this, GF_FOP_SETXATTR, 0, target, - minimum, ec_wind_setxattr, ec_manager_xattr, - callback, data); + fop = ec_fop_data_allocate(frame, this, GF_FOP_SETXATTR, 0, target, minimum, + ec_wind_setxattr, ec_manager_xattr, callback, + data); if (fop == NULL) { goto out; } @@ -754,9 +731,8 @@ ec_setxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, - "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -764,10 +740,9 @@ ec_setxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (dict != NULL) { fop->dict = dict_copy_with_ref(dict, NULL); if (fop->dict == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -775,10 +750,9 @@ ec_setxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -788,45 +762,41 @@ ec_setxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, out: if (fop != NULL) { - ec_manager (fop, error); + ec_manager(fop, error); } else { - func (frame, NULL, this, -1, error, NULL); + func(frame, NULL, this, -1, error, NULL); } } /* FOP: fsetxattr */ int32_t -ec_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *xdata) +ec_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; - VALIDATE_OR_GOTO (this, out); - GF_VALIDATE_OR_GOTO (this->name, frame, out); - GF_VALIDATE_OR_GOTO (this->name, frame->local, out); - GF_VALIDATE_OR_GOTO (this->name, this->private, out); + VALIDATE_OR_GOTO(this, out); + GF_VALIDATE_OR_GOTO(this->name, frame, out); + GF_VALIDATE_OR_GOTO(this->name, frame->local, out); + GF_VALIDATE_OR_GOTO(this->name, this->private, out); fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FSETXATTR, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (xdata != NULL) - { + if (cbk != NULL) { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -836,15 +806,15 @@ ec_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_fsetxattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_fsetxattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -854,15 +824,15 @@ void ec_wind_fsetxattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx) } void -ec_fsetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_fsetxattr_cbk_t func, void *data, - fd_t *fd, dict_t *dict, int32_t flags, dict_t *xdata) +ec_fsetxattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fsetxattr_cbk_t func, void *data, fd_t *fd, + dict_t *dict, int32_t flags, dict_t *xdata) { - ec_cbk_t callback = { .fsetxattr = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.fsetxattr = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(FSETXATTR) %p", frame); + gf_msg_trace("ec", 0, "EC(FSETXATTR) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -882,10 +852,9 @@ ec_fsetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, - "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -893,10 +862,9 @@ ec_fsetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (dict != NULL) { fop->dict = dict_copy_with_ref(dict, NULL); if (fop->dict == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -904,10 +872,9 @@ ec_fsetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -917,9 +884,9 @@ ec_fsetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target, out: if (fop != NULL) { - ec_manager (fop, error); + ec_manager(fop, error); } else { - func (frame, NULL, this, -1, error, NULL); + func(frame, NULL, this, -1, error, NULL); } } @@ -929,154 +896,153 @@ out: * *********************************************************************/ -int32_t ec_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, struct iatt *prebuf, - struct iatt *postbuf, dict_t *xdata) +int32_t +ec_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iatt *prebuf, + struct iatt *postbuf, dict_t *xdata) { - return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno, - prebuf, postbuf, xdata); + return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prebuf, + postbuf, xdata); } -void ec_wind_fallocate(ec_t *ec, ec_fop_data_t *fop, int32_t idx) +void +ec_wind_fallocate(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); STACK_WIND_COOKIE(fop->frame, ec_fallocate_cbk, (void *)(uintptr_t)idx, ec->xl_list[idx], ec->xl_list[idx]->fops->fallocate, - fop->fd, fop->int32, fop->offset, - fop->size, fop->xdata); + fop->fd, fop->int32, fop->offset, fop->size, fop->xdata); } -int32_t ec_manager_fallocate(ec_fop_data_t *fop, int32_t state) +int32_t +ec_manager_fallocate(ec_fop_data_t *fop, int32_t state) { ec_cbk_data_t *cbk = NULL; switch (state) { - case EC_STATE_INIT: - if (fop->size == 0) { + case EC_STATE_INIT: + if (fop->size == 0) { ec_fop_set_error(fop, EINVAL); return EC_STATE_REPORT; - } - if (fop->int32 & (FALLOC_FL_COLLAPSE_RANGE - |FALLOC_FL_INSERT_RANGE - |FALLOC_FL_ZERO_RANGE - |FALLOC_FL_PUNCH_HOLE)) { + } + if (fop->int32 & + (FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_INSERT_RANGE | + FALLOC_FL_ZERO_RANGE | FALLOC_FL_PUNCH_HOLE)) { ec_fop_set_error(fop, ENOTSUP); return EC_STATE_REPORT; - } - fop->user_size = fop->offset + fop->size; - fop->head = ec_adjust_offset_down (fop->xl->private, &fop->offset, - _gf_true); - fop->size += fop->head; - ec_adjust_size_up (fop->xl->private, &fop->size, _gf_true); + } + fop->user_size = fop->offset + fop->size; + fop->head = ec_adjust_offset_down(fop->xl->private, &fop->offset, + _gf_true); + fop->size += fop->head; + ec_adjust_size_up(fop->xl->private, &fop->size, _gf_true); - /* Fall through */ + /* Fall through */ - case EC_STATE_LOCK: - ec_lock_prepare_fd(fop, fop->fd, - EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO, - fop->offset, fop->size); - ec_lock(fop); + case EC_STATE_LOCK: + ec_lock_prepare_fd(fop, fop->fd, + EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO, + fop->offset, fop->size); + ec_lock(fop); - return EC_STATE_DISPATCH; + return EC_STATE_DISPATCH; - case EC_STATE_DISPATCH: + case EC_STATE_DISPATCH: - ec_dispatch_all(fop); + ec_dispatch_all(fop); - return EC_STATE_PREPARE_ANSWER; + return EC_STATE_PREPARE_ANSWER; - case EC_STATE_PREPARE_ANSWER: - cbk = ec_fop_prepare_answer(fop, _gf_false); - if (cbk != NULL) { - ec_iatt_rebuild(fop->xl->private, cbk->iatt, 2, - cbk->count); + case EC_STATE_PREPARE_ANSWER: + cbk = ec_fop_prepare_answer(fop, _gf_false); + if (cbk != NULL) { + ec_iatt_rebuild(fop->xl->private, cbk->iatt, 2, cbk->count); /* This shouldn't fail because we have the inode locked. */ LOCK(&fop->locks[0].lock->loc.inode->lock); { - GF_ASSERT(__ec_get_inode_size(fop, - fop->locks[0].lock->loc.inode, - &cbk->iatt[0].ia_size)); + GF_ASSERT(__ec_get_inode_size(fop, + fop->locks[0].lock->loc.inode, + &cbk->iatt[0].ia_size)); - /*If mode has FALLOC_FL_KEEP_SIZE keep the size */ - if (fop->int32 & FALLOC_FL_KEEP_SIZE) { - cbk->iatt[1].ia_size = cbk->iatt[0].ia_size; - } else if (fop->user_size > cbk->iatt[0].ia_size) { - cbk->iatt[1].ia_size = fop->user_size; - - /* This shouldn't fail because we have the inode - * locked. */ - GF_ASSERT(__ec_set_inode_size(fop, - fop->locks[0].lock->loc.inode, - cbk->iatt[1].ia_size)); - } else { - cbk->iatt[1].ia_size = cbk->iatt[0].ia_size; - } + /*If mode has FALLOC_FL_KEEP_SIZE keep the size */ + if (fop->int32 & FALLOC_FL_KEEP_SIZE) { + cbk->iatt[1].ia_size = cbk->iatt[0].ia_size; + } else if (fop->user_size > cbk->iatt[0].ia_size) { + cbk->iatt[1].ia_size = fop->user_size; + + /* This shouldn't fail because we have the inode + * locked. */ + GF_ASSERT(__ec_set_inode_size( + fop, fop->locks[0].lock->loc.inode, + cbk->iatt[1].ia_size)); + } else { + cbk->iatt[1].ia_size = cbk->iatt[0].ia_size; + } } UNLOCK(&fop->locks[0].lock->loc.inode->lock); - } + } - return EC_STATE_REPORT; + return EC_STATE_REPORT; - case EC_STATE_REPORT: - cbk = fop->answer; + case EC_STATE_REPORT: + cbk = fop->answer; - GF_ASSERT(cbk != NULL); + GF_ASSERT(cbk != NULL); - if (fop->cbks.fallocate != NULL) { + if (fop->cbks.fallocate != NULL) { fop->cbks.fallocate(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->iatt[0], &cbk->iatt[1], cbk->xdata); - } + } - return EC_STATE_LOCK_REUSE; + return EC_STATE_LOCK_REUSE; - case -EC_STATE_INIT: - case -EC_STATE_LOCK: - case -EC_STATE_DISPATCH: - case -EC_STATE_PREPARE_ANSWER: - case -EC_STATE_REPORT: - GF_ASSERT(fop->error != 0); + case -EC_STATE_INIT: + case -EC_STATE_LOCK: + case -EC_STATE_DISPATCH: + case -EC_STATE_PREPARE_ANSWER: + case -EC_STATE_REPORT: + GF_ASSERT(fop->error != 0); - if (fop->cbks.fallocate != NULL) { + if (fop->cbks.fallocate != NULL) { fop->cbks.fallocate(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL); - } + } - return EC_STATE_LOCK_REUSE; + return EC_STATE_LOCK_REUSE; - case -EC_STATE_LOCK_REUSE: - case EC_STATE_LOCK_REUSE: - ec_lock_reuse(fop); + case -EC_STATE_LOCK_REUSE: + case EC_STATE_LOCK_REUSE: + ec_lock_reuse(fop); - return EC_STATE_UNLOCK; + return EC_STATE_UNLOCK; - case -EC_STATE_UNLOCK: - case EC_STATE_UNLOCK: - ec_unlock(fop); + case -EC_STATE_UNLOCK: + case EC_STATE_UNLOCK: + ec_unlock(fop); - return EC_STATE_END; + return EC_STATE_END; - default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, - "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + default: + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); - return EC_STATE_END; + return EC_STATE_END; } } -void ec_fallocate(call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_fallocate_cbk_t func, void *data, fd_t *fd, - int32_t mode, off_t offset, size_t len, dict_t *xdata) +void +ec_fallocate(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fallocate_cbk_t func, void *data, fd_t *fd, + int32_t mode, off_t offset, size_t len, dict_t *xdata) { - ec_cbk_t callback = { .fallocate = func }; + ec_cbk_t callback = {.fallocate = func}; ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(FALLOCATE) %p", frame); + gf_msg_trace("ec", 0, "EC(FALLOCATE) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -1097,22 +1063,20 @@ void ec_fallocate(call_frame_t *frame, xlator_t *this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, - "Failed to reference a " - "file descriptor."); - goto out; + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); + goto out; } } if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); - goto out; + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); + goto out; } } @@ -1131,66 +1095,70 @@ out: * File Operation : Discard * *********************************************************************/ -void ec_update_discard_write(ec_fop_data_t *fop, uintptr_t mask) +void +ec_update_discard_write(ec_fop_data_t *fop, uintptr_t mask) { - ec_t *ec = fop->xl->private; - off_t off_head = 0; - off_t off_tail = 0; + ec_t *ec = fop->xl->private; + off_t off_head = 0; + off_t off_tail = 0; size_t size_head = 0; size_t size_tail = 0; - int error = 0; + int error = 0; off_head = fop->offset * ec->fragments - fop->int32; if (fop->size == 0) { - error = ec_update_write (fop, mask, off_head, fop->user_size); + error = ec_update_write(fop, mask, off_head, fop->user_size); } else { - size_head = fop->int32; - size_tail = (off_head + fop->user_size) % ec->stripe_size; - off_tail = off_head + fop->user_size - size_tail; - if (size_head) { - error = ec_update_write (fop, mask, off_head, size_head); - if (error) { - goto out; - } - } - if (size_tail) { - error = ec_update_write (fop, mask, off_tail, size_tail); + size_head = fop->int32; + size_tail = (off_head + fop->user_size) % ec->stripe_size; + off_tail = off_head + fop->user_size - size_tail; + if (size_head) { + error = ec_update_write(fop, mask, off_head, size_head); + if (error) { + goto out; } + } + if (size_tail) { + error = ec_update_write(fop, mask, off_tail, size_tail); + } } out: if (error) - ec_fop_set_error (fop, -error); + ec_fop_set_error(fop, -error); } -void ec_discard_adjust_offset_size(ec_fop_data_t *fop) +void +ec_discard_adjust_offset_size(ec_fop_data_t *fop) { - ec_t *ec = fop->xl->private; + ec_t *ec = fop->xl->private; - fop->user_size = fop->size; - /* If discard length covers at least a fragment on brick, we will - * perform discard operation(when fop->size is non-zero) else we just - * write zeros. - */ - fop->int32 = ec_adjust_offset_up(ec, &fop->offset, _gf_true); - fop->frag_range.first = fop->offset; - if (fop->size < fop->int32) { - fop->size = 0; - } else { - fop->size -= fop->int32; - ec_adjust_size_down(ec, &fop->size, _gf_true); - } - fop->frag_range.last = fop->offset + fop->size; + fop->user_size = fop->size; + /* If discard length covers at least a fragment on brick, we will + * perform discard operation(when fop->size is non-zero) else we just + * write zeros. + */ + fop->int32 = ec_adjust_offset_up(ec, &fop->offset, _gf_true); + fop->frag_range.first = fop->offset; + if (fop->size < fop->int32) { + fop->size = 0; + } else { + fop->size -= fop->int32; + ec_adjust_size_down(ec, &fop->size, _gf_true); + } + fop->frag_range.last = fop->offset + fop->size; } -int32_t ec_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, struct iatt *prebuf, - struct iatt *postbuf, dict_t *xdata) +int32_t +ec_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iatt *prebuf, + struct iatt *postbuf, dict_t *xdata) { - return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno, - prebuf, postbuf, xdata); + return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prebuf, + postbuf, xdata); } -void ec_wind_discard(ec_t *ec, ec_fop_data_t *fop, int32_t idx) +void +ec_wind_discard(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -1199,146 +1167,144 @@ void ec_wind_discard(ec_t *ec, ec_fop_data_t *fop, int32_t idx) fop->fd, fop->offset, fop->size, fop->xdata); } -int32_t ec_manager_discard(ec_fop_data_t *fop, int32_t state) +int32_t +ec_manager_discard(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t *cbk = NULL; - off_t fl_start = 0; - size_t fl_size = 0; - + ec_cbk_data_t *cbk = NULL; + off_t fl_start = 0; + size_t fl_size = 0; switch (state) { - case EC_STATE_INIT: - if ((fop->size <= 0) || (fop->offset < 0)) { + case EC_STATE_INIT: + if ((fop->size <= 0) || (fop->offset < 0)) { ec_fop_set_error(fop, EINVAL); return EC_STATE_REPORT; - } - /* Because of the head/tail writes, "discard" happens on the remaining - * regions, but we need to compute region including head/tail writes - * so compute them separately*/ - fl_start = fop->offset; - fl_size = fop->size; - fl_size += ec_adjust_offset_down (fop->xl->private, &fl_start, - _gf_true); - ec_adjust_size_up (fop->xl->private, &fl_size, _gf_true); + } + /* Because of the head/tail writes, "discard" happens on the + * remaining regions, but we need to compute region including + * head/tail writes so compute them separately*/ + fl_start = fop->offset; + fl_size = fop->size; + fl_size += ec_adjust_offset_down(fop->xl->private, &fl_start, + _gf_true); + ec_adjust_size_up(fop->xl->private, &fl_size, _gf_true); - ec_discard_adjust_offset_size(fop); + ec_discard_adjust_offset_size(fop); - /* Fall through */ + /* Fall through */ - case EC_STATE_LOCK: - ec_lock_prepare_fd(fop, fop->fd, - EC_UPDATE_DATA | EC_UPDATE_META | - EC_QUERY_INFO, fl_start, fl_size); - ec_lock(fop); + case EC_STATE_LOCK: + ec_lock_prepare_fd(fop, fop->fd, + EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO, + fl_start, fl_size); + ec_lock(fop); - return EC_STATE_DISPATCH; + return EC_STATE_DISPATCH; - case EC_STATE_DISPATCH: + case EC_STATE_DISPATCH: - /* Dispatch discard fop only if we have whole fragment - * to deallocate */ - if (fop->size) { + /* Dispatch discard fop only if we have whole fragment + * to deallocate */ + if (fop->size) { ec_dispatch_all(fop); return EC_STATE_DELAYED_START; - } else { + } else { /*Assume discard to have succeeded on mask*/ fop->good = fop->mask; - } + } - /* Fall through */ + /* Fall through */ - case EC_STATE_DELAYED_START: + case EC_STATE_DELAYED_START: - if (fop->size) { + if (fop->size) { if (fop->answer && fop->answer->op_ret == 0) - ec_update_discard_write (fop, fop->answer->mask); - } else { - ec_update_discard_write (fop, fop->mask); - } + ec_update_discard_write(fop, fop->answer->mask); + } else { + ec_update_discard_write(fop, fop->mask); + } - return EC_STATE_PREPARE_ANSWER; + return EC_STATE_PREPARE_ANSWER; - case EC_STATE_PREPARE_ANSWER: - cbk = ec_fop_prepare_answer(fop, _gf_false); - if (cbk != NULL) { - ec_iatt_rebuild(fop->xl->private, cbk->iatt, 2, - cbk->count); + case EC_STATE_PREPARE_ANSWER: + cbk = ec_fop_prepare_answer(fop, _gf_false); + if (cbk != NULL) { + ec_iatt_rebuild(fop->xl->private, cbk->iatt, 2, cbk->count); /* This shouldn't fail because we have the inode locked. */ GF_ASSERT(ec_get_inode_size(fop, fop->locks[0].lock->loc.inode, &cbk->iatt[0].ia_size)); cbk->iatt[1].ia_size = cbk->iatt[0].ia_size; - } - return EC_STATE_REPORT; + } + return EC_STATE_REPORT; - case EC_STATE_REPORT: - cbk = fop->answer; + case EC_STATE_REPORT: + cbk = fop->answer; - GF_ASSERT(cbk != NULL); + GF_ASSERT(cbk != NULL); - if (fop->cbks.discard != NULL) { + if (fop->cbks.discard != NULL) { fop->cbks.discard(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->iatt[0], &cbk->iatt[1], cbk->xdata); - } + } - return EC_STATE_LOCK_REUSE; + return EC_STATE_LOCK_REUSE; - case -EC_STATE_INIT: - case -EC_STATE_LOCK: - case -EC_STATE_DISPATCH: - case -EC_STATE_DELAYED_START: - case -EC_STATE_PREPARE_ANSWER: - case -EC_STATE_REPORT: - GF_ASSERT(fop->error != 0); + case -EC_STATE_INIT: + case -EC_STATE_LOCK: + case -EC_STATE_DISPATCH: + case -EC_STATE_DELAYED_START: + case -EC_STATE_PREPARE_ANSWER: + case -EC_STATE_REPORT: + GF_ASSERT(fop->error != 0); - if (fop->cbks.discard != NULL) { - fop->cbks.discard(fop->req_frame, fop, fop->xl, -1, - fop->error, NULL, NULL, NULL); - } + if (fop->cbks.discard != NULL) { + fop->cbks.discard(fop->req_frame, fop, fop->xl, -1, fop->error, + NULL, NULL, NULL); + } - return EC_STATE_LOCK_REUSE; + return EC_STATE_LOCK_REUSE; - case -EC_STATE_LOCK_REUSE: - case EC_STATE_LOCK_REUSE: - ec_lock_reuse(fop); + case -EC_STATE_LOCK_REUSE: + case EC_STATE_LOCK_REUSE: + ec_lock_reuse(fop); - return EC_STATE_UNLOCK; + return EC_STATE_UNLOCK; - case -EC_STATE_UNLOCK: - case EC_STATE_UNLOCK: - ec_unlock(fop); + case -EC_STATE_UNLOCK: + case EC_STATE_UNLOCK: + ec_unlock(fop); - return EC_STATE_END; + return EC_STATE_END; - default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, - "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + default: + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); - return EC_STATE_END; + return EC_STATE_END; } } -void ec_discard(call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_discard_cbk_t func, void *data, fd_t *fd, - off_t offset, size_t len, dict_t *xdata) +void +ec_discard(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_discard_cbk_t func, void *data, fd_t *fd, + off_t offset, size_t len, dict_t *xdata) { - ec_cbk_t callback = { .discard = func }; + ec_cbk_t callback = {.discard = func}; ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(DISCARD) %p", frame); + gf_msg_trace("ec", 0, "EC(DISCARD) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate(frame, this, GF_FOP_DISCARD, 0, target, - minimum, ec_wind_discard, ec_manager_discard, - callback, data); + fop = ec_fop_data_allocate(frame, this, GF_FOP_DISCARD, 0, target, minimum, + ec_wind_discard, ec_manager_discard, callback, + data); if (fop == NULL) { goto out; } @@ -1371,33 +1337,35 @@ out: * *********************************************************************/ -int32_t ec_update_truncate_write (ec_fop_data_t *fop, uintptr_t mask) +int32_t +ec_update_truncate_write(ec_fop_data_t *fop, uintptr_t mask) { - ec_t *ec = fop->xl->private; - size_t size = fop->offset * ec->fragments - fop->user_size; - return ec_update_write (fop, mask, fop->user_size, size); + ec_t *ec = fop->xl->private; + size_t size = fop->offset * ec->fragments - fop->user_size; + return ec_update_write(fop, mask, fop->user_size, size); } -int32_t ec_truncate_open_cbk(call_frame_t * frame, void * cookie, - xlator_t * this, int32_t op_ret, int32_t op_errno, - fd_t * fd, dict_t * xdata) +int32_t +ec_truncate_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata) { - ec_fop_data_t * fop = cookie; + ec_fop_data_t *fop = cookie; int32_t err; fop->parent->good &= fop->good; if (op_ret >= 0) { - fd_bind (fd); - err = ec_update_truncate_write (fop->parent, fop->answer->mask); + fd_bind(fd); + err = ec_update_truncate_write(fop->parent, fop->answer->mask); if (err != 0) { - ec_fop_set_error (fop->parent, -err); + ec_fop_set_error(fop->parent, -err); } } return 0; } -int32_t ec_truncate_clean(ec_fop_data_t * fop) +int32_t +ec_truncate_clean(ec_fop_data_t *fop) { if (fop->fd == NULL) { fop->fd = fd_create(fop->loc[0].inode, fop->frame->root->pid); @@ -1406,24 +1374,25 @@ int32_t ec_truncate_clean(ec_fop_data_t * fop) } ec_open(fop->frame, fop->xl, fop->answer->mask, fop->minimum, - ec_truncate_open_cbk, fop, &fop->loc[0], O_RDWR, fop->fd, - NULL); + ec_truncate_open_cbk, fop, &fop->loc[0], O_RDWR, fop->fd, NULL); return 0; } else { - return ec_update_truncate_write (fop, fop->answer->mask); + return ec_update_truncate_write(fop, fop->answer->mask); } } -int32_t ec_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, struct iatt *prestat, - struct iatt *poststat, dict_t *xdata) +int32_t +ec_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iatt *prestat, + struct iatt *poststat, dict_t *xdata) { - return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno, - prestat, poststat, xdata); + return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prestat, + poststat, xdata); } -void ec_wind_truncate(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_truncate(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -1432,29 +1401,31 @@ void ec_wind_truncate(ec_t * ec, ec_fop_data_t * fop, int32_t idx) &fop->loc[0], fop->offset, fop->xdata); } -int32_t ec_manager_truncate(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_truncate(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: fop->user_size = fop->offset; ec_adjust_offset_up(fop->xl->private, &fop->offset, _gf_true); fop->frag_range.first = fop->offset; fop->frag_range.last = UINT64_MAX; - /* Fall through */ + /* Fall through */ case EC_STATE_LOCK: if (fop->id == GF_FOP_TRUNCATE) { - ec_lock_prepare_inode(fop, &fop->loc[0], - EC_UPDATE_DATA | EC_UPDATE_META | - EC_QUERY_INFO, fop->offset, LLONG_MAX); + ec_lock_prepare_inode( + fop, &fop->loc[0], + EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO, + fop->offset, LLONG_MAX); } else { - ec_lock_prepare_fd(fop, fop->fd, - EC_UPDATE_DATA | EC_UPDATE_META | - EC_QUERY_INFO, fop->offset, LLONG_MAX); + ec_lock_prepare_fd( + fop, fop->fd, + EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO, + fop->offset, LLONG_MAX); } ec_lock(fop); @@ -1470,8 +1441,7 @@ int32_t ec_manager_truncate(ec_fop_data_t * fop, int32_t state) if (cbk != NULL) { int32_t err; - ec_iatt_rebuild(fop->xl->private, cbk->iatt, 2, - cbk->count); + ec_iatt_rebuild(fop->xl->private, cbk->iatt, 2, cbk->count); /* This shouldn't fail because we have the inode locked. */ /* Inode size doesn't need to be updated under locks, because @@ -1499,20 +1469,15 @@ int32_t ec_manager_truncate(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->id == GF_FOP_TRUNCATE) - { - if (fop->cbks.truncate != NULL) - { + if (fop->id == GF_FOP_TRUNCATE) { + if (fop->cbks.truncate != NULL) { fop->cbks.truncate(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->iatt[0], &cbk->iatt[1], cbk->xdata); } - } - else - { - if (fop->cbks.ftruncate != NULL) - { + } else { + if (fop->cbks.ftruncate != NULL) { fop->cbks.ftruncate(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->iatt[0], &cbk->iatt[1], @@ -1529,18 +1494,13 @@ int32_t ec_manager_truncate(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->id == GF_FOP_TRUNCATE) - { - if (fop->cbks.truncate != NULL) - { + if (fop->id == GF_FOP_TRUNCATE) { + if (fop->cbks.truncate != NULL) { fop->cbks.truncate(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL); } - } - else - { - if (fop->cbks.ftruncate != NULL) - { + } else { + if (fop->cbks.ftruncate != NULL) { fop->cbks.ftruncate(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL); } @@ -1561,32 +1521,31 @@ int32_t ec_manager_truncate(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, - "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_truncate(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_truncate_cbk_t func, void * data, - loc_t * loc, off_t offset, dict_t * xdata) +void +ec_truncate(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_truncate_cbk_t func, void *data, loc_t *loc, + off_t offset, dict_t *xdata) { - ec_cbk_t callback = { .truncate = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.truncate = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(TRUNCATE) %p", frame); + gf_msg_trace("ec", 0, "EC(TRUNCATE) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate(frame, this, GF_FOP_TRUNCATE, 0, target, - minimum, ec_wind_truncate, ec_manager_truncate, - callback, data); + fop = ec_fop_data_allocate(frame, this, GF_FOP_TRUNCATE, 0, target, minimum, + ec_wind_truncate, ec_manager_truncate, callback, + data); if (fop == NULL) { goto out; } @@ -1595,9 +1554,8 @@ void ec_truncate(call_frame_t * frame, xlator_t * this, uintptr_t target, if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, - "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -1605,10 +1563,9 @@ void ec_truncate(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1626,16 +1583,17 @@ out: /* FOP: ftruncate */ -int32_t ec_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, - struct iatt *prestat, struct iatt *poststat, - dict_t *xdata) +int32_t +ec_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iatt *prestat, + struct iatt *poststat, dict_t *xdata) { - return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno, - prestat, poststat, xdata); + return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prestat, + poststat, xdata); } -void ec_wind_ftruncate(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_ftruncate(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -1644,15 +1602,16 @@ void ec_wind_ftruncate(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->fd, fop->offset, fop->xdata); } -void ec_ftruncate(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_ftruncate_cbk_t func, void * data, - fd_t * fd, off_t offset, dict_t * xdata) +void +ec_ftruncate(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_ftruncate_cbk_t func, void *data, fd_t *fd, + off_t offset, dict_t *xdata) { - ec_cbk_t callback = { .ftruncate = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.ftruncate = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(FTRUNCATE) %p", frame); + gf_msg_trace("ec", 0, "EC(FTRUNCATE) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -1672,10 +1631,9 @@ void ec_ftruncate(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, - "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -1683,10 +1641,9 @@ void ec_ftruncate(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -1704,95 +1661,91 @@ out: /* FOP: writev */ static ec_stripe_t * -ec_allocate_stripe (ec_t *ec, ec_stripe_list_t *stripe_cache) +ec_allocate_stripe(ec_t *ec, ec_stripe_list_t *stripe_cache) { - ec_stripe_t *stripe = NULL; + ec_stripe_t *stripe = NULL; - if (stripe_cache->count >= stripe_cache->max) { - GF_ASSERT (!list_empty(&stripe_cache->lru)); - stripe = list_first_entry(&stripe_cache->lru, ec_stripe_t, lru); - list_move_tail(&stripe->lru, &stripe_cache->lru); - GF_ATOMIC_INC(ec->stats.stripe_cache.evicts); + if (stripe_cache->count >= stripe_cache->max) { + GF_ASSERT(!list_empty(&stripe_cache->lru)); + stripe = list_first_entry(&stripe_cache->lru, ec_stripe_t, lru); + list_move_tail(&stripe->lru, &stripe_cache->lru); + GF_ATOMIC_INC(ec->stats.stripe_cache.evicts); + } else { + stripe = GF_MALLOC(sizeof(ec_stripe_t) + ec->stripe_size, + ec_mt_ec_stripe_t); + if (stripe != NULL) { + stripe_cache->count++; + list_add_tail(&stripe->lru, &stripe_cache->lru); + GF_ATOMIC_INC(ec->stats.stripe_cache.allocs); } else { - stripe = GF_MALLOC (sizeof (ec_stripe_t) + ec->stripe_size, - ec_mt_ec_stripe_t); - if (stripe != NULL) { - stripe_cache->count++; - list_add_tail (&stripe->lru, &stripe_cache->lru); - GF_ATOMIC_INC(ec->stats.stripe_cache.allocs); - } else { - GF_ATOMIC_INC(ec->stats.stripe_cache.errors); - } + GF_ATOMIC_INC(ec->stats.stripe_cache.errors); } + } - return stripe; + return stripe; } static void -ec_write_stripe_data (ec_t *ec, ec_fop_data_t *fop, - ec_stripe_t *stripe) +ec_write_stripe_data(ec_t *ec, ec_fop_data_t *fop, ec_stripe_t *stripe) { - off_t base; + off_t base; - base = fop->size - ec->stripe_size; - memcpy(stripe->data, fop->vector[0].iov_base + base, ec->stripe_size); - stripe->frag_offset = fop->frag_range.last - ec->fragment_size; + base = fop->size - ec->stripe_size; + memcpy(stripe->data, fop->vector[0].iov_base + base, ec->stripe_size); + stripe->frag_offset = fop->frag_range.last - ec->fragment_size; } static void -ec_add_stripe_in_cache (ec_t *ec, ec_fop_data_t *fop) +ec_add_stripe_in_cache(ec_t *ec, ec_fop_data_t *fop) { - ec_inode_t *ctx = NULL; - ec_stripe_t *stripe = NULL; - ec_stripe_list_t *stripe_cache = NULL; - gf_boolean_t failed = _gf_true; - - LOCK(&fop->fd->inode->lock); + ec_inode_t *ctx = NULL; + ec_stripe_t *stripe = NULL; + ec_stripe_list_t *stripe_cache = NULL; + gf_boolean_t failed = _gf_true; - ctx = __ec_inode_get (fop->fd->inode, fop->xl); - if (ctx == NULL) { - goto out; - } + LOCK(&fop->fd->inode->lock); - stripe_cache = &ctx->stripe_cache; - if (stripe_cache->max > 0) { - stripe = ec_allocate_stripe (ec, stripe_cache); - if (stripe == NULL) { - goto out; - } + ctx = __ec_inode_get(fop->fd->inode, fop->xl); + if (ctx == NULL) { + goto out; + } - ec_write_stripe_data (ec, fop, stripe); + stripe_cache = &ctx->stripe_cache; + if (stripe_cache->max > 0) { + stripe = ec_allocate_stripe(ec, stripe_cache); + if (stripe == NULL) { + goto out; } - failed = _gf_false; + ec_write_stripe_data(ec, fop, stripe); + } + + failed = _gf_false; out: - UNLOCK(&fop->fd->inode->lock); + UNLOCK(&fop->fd->inode->lock); - if (failed) { - gf_msg (ec->xl->name, GF_LOG_DEBUG, ENOMEM, - EC_MSG_FILE_DESC_REF_FAIL, - "Failed to create and add stripe in cache"); - } + if (failed) { + gf_msg(ec->xl->name, GF_LOG_DEBUG, ENOMEM, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to create and add stripe in cache"); + } } -int32_t ec_writev_merge_tail(call_frame_t * frame, void * cookie, - xlator_t * this, int32_t op_ret, int32_t op_errno, - struct iovec * vector, int32_t count, - struct iatt * stbuf, struct iobref * iobref, - dict_t * xdata) +int32_t +ec_writev_merge_tail(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iovec *vector, + int32_t count, struct iatt *stbuf, struct iobref *iobref, + dict_t *xdata) { - ec_t * ec = this->private; - ec_fop_data_t * fop = frame->local; + ec_t *ec = this->private; + ec_fop_data_t *fop = frame->local; size_t size, base, tmp; - if (op_ret >= 0) - { + if (op_ret >= 0) { tmp = 0; size = fop->size - fop->user_size - fop->head; base = ec->stripe_size - size; - if (op_ret > base) - { + if (op_ret > base) { tmp = min(op_ret - base, size); ec_iov_copy_to(fop->vector[0].iov_base + fop->size - size, vector, count, base, tmp); @@ -1800,49 +1753,44 @@ int32_t ec_writev_merge_tail(call_frame_t * frame, void * cookie, size -= tmp; } - if (size > 0) - { + if (size > 0) { memset(fop->vector[0].iov_base + fop->size - size, 0, size); } if (ec->stripe_cache) { - ec_add_stripe_in_cache (ec, fop); + ec_add_stripe_in_cache(ec, fop); } } return 0; } -int32_t ec_writev_merge_head(call_frame_t * frame, void * cookie, - xlator_t * this, int32_t op_ret, int32_t op_errno, - struct iovec * vector, int32_t count, - struct iatt * stbuf, struct iobref * iobref, - dict_t * xdata) +int32_t +ec_writev_merge_head(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iovec *vector, + int32_t count, struct iatt *stbuf, struct iobref *iobref, + dict_t *xdata) { - ec_t * ec = this->private; - ec_fop_data_t * fop = frame->local; + ec_t *ec = this->private; + ec_fop_data_t *fop = frame->local; size_t size, base; - if (op_ret >= 0) - { + if (op_ret >= 0) { size = fop->head; base = 0; - if (op_ret > 0) - { + if (op_ret > 0) { base = min(op_ret, size); ec_iov_copy_to(fop->vector[0].iov_base, vector, count, 0, base); size -= base; } - if (size > 0) - { + if (size > 0) { memset(fop->vector[0].iov_base + base, 0, size); } size = fop->size - fop->user_size - fop->head; - if ((size > 0) && (fop->size == ec->stripe_size)) - { + if ((size > 0) && (fop->size == ec->stripe_size)) { ec_writev_merge_tail(frame, cookie, this, op_ret, op_errno, vector, count, stbuf, iobref, xdata); } @@ -1852,7 +1800,7 @@ int32_t ec_writev_merge_head(call_frame_t * frame, void * cookie, } static int -ec_make_internal_fop_xdata (dict_t **xdata) +ec_make_internal_fop_xdata(dict_t **xdata) { dict_t *dict = NULL; @@ -1861,16 +1809,16 @@ ec_make_internal_fop_xdata (dict_t **xdata) dict = dict_new(); if (!dict) - goto out; + goto out; - if (dict_set_str (dict, GLUSTERFS_INTERNAL_FOP_KEY, "yes")) - goto out; + if (dict_set_str(dict, GLUSTERFS_INTERNAL_FOP_KEY, "yes")) + goto out; *xdata = dict; return 0; out: if (dict) - dict_unref (dict); + dict_unref(dict); return -1; } @@ -1889,8 +1837,7 @@ ec_writev_prepare_buffers(ec_t *ec, ec_fop_data_t *fop) ec_adjust_size_up(ec, &fop->size, _gf_false); fop->frag_range.last = fop->frag_range.first + fop->size / ec->fragments; - if ((fop->int32 != 1) || (fop->head != 0) || - (fop->size > fop->user_size) || + if ((fop->int32 != 1) || (fop->head != 0) || (fop->size > fop->user_size) || !EC_ALIGN_CHECK(fop->vector[0].iov_base, EC_METHOD_WORD_SIZE)) { err = ec_buffer_alloc(ec->xl, fop->size, &iobref, &ptr); if (err != 0) { @@ -1935,98 +1882,99 @@ out: } static void -ec_merge_stripe_head_locked (ec_t *ec, ec_fop_data_t *fop, ec_stripe_t *stripe) +ec_merge_stripe_head_locked(ec_t *ec, ec_fop_data_t *fop, ec_stripe_t *stripe) { - size_t head, size; + size_t head, size; - head = fop->head; - memcpy(fop->vector[0].iov_base, stripe->data, head); + head = fop->head; + memcpy(fop->vector[0].iov_base, stripe->data, head); + size = ec->stripe_size - head; + if (size > fop->user_size) { + head += fop->user_size; size = ec->stripe_size - head; - if (size > fop->user_size) { - head += fop->user_size; - size = ec->stripe_size - head; - memcpy(fop->vector[0].iov_base + head, stripe->data + head, - size); - } + memcpy(fop->vector[0].iov_base + head, stripe->data + head, size); + } } static void -ec_merge_stripe_tail_locked (ec_t *ec, ec_fop_data_t *fop, ec_stripe_t *stripe) +ec_merge_stripe_tail_locked(ec_t *ec, ec_fop_data_t *fop, ec_stripe_t *stripe) { - size_t head, tail; - off_t offset; + size_t head, tail; + off_t offset; - offset = fop->user_size + fop->head; - tail = fop->size - offset; - head = ec->stripe_size - tail; + offset = fop->user_size + fop->head; + tail = fop->size - offset; + head = ec->stripe_size - tail; - memcpy(fop->vector[0].iov_base + offset, stripe->data + head, tail); + memcpy(fop->vector[0].iov_base + offset, stripe->data + head, tail); } static ec_stripe_t * -ec_get_stripe_from_cache_locked (ec_t *ec, ec_fop_data_t *fop, - uint64_t frag_offset) +ec_get_stripe_from_cache_locked(ec_t *ec, ec_fop_data_t *fop, + uint64_t frag_offset) { - ec_inode_t *ctx = NULL; - ec_stripe_t *stripe = NULL; - ec_stripe_list_t *stripe_cache = NULL; - - ctx = __ec_inode_get (fop->fd->inode, fop->xl); - if (ctx == NULL) { - GF_ATOMIC_INC(ec->stats.stripe_cache.errors); - return NULL; - } + ec_inode_t *ctx = NULL; + ec_stripe_t *stripe = NULL; + ec_stripe_list_t *stripe_cache = NULL; - stripe_cache = &ctx->stripe_cache; - list_for_each_entry (stripe, &stripe_cache->lru, lru) { - if (stripe->frag_offset == frag_offset) { - list_move_tail (&stripe->lru, &stripe_cache->lru); - GF_ATOMIC_INC(ec->stats.stripe_cache.hits); - return stripe; - } + ctx = __ec_inode_get(fop->fd->inode, fop->xl); + if (ctx == NULL) { + GF_ATOMIC_INC(ec->stats.stripe_cache.errors); + return NULL; + } + + stripe_cache = &ctx->stripe_cache; + list_for_each_entry(stripe, &stripe_cache->lru, lru) + { + if (stripe->frag_offset == frag_offset) { + list_move_tail(&stripe->lru, &stripe_cache->lru); + GF_ATOMIC_INC(ec->stats.stripe_cache.hits); + return stripe; } + } - GF_ATOMIC_INC(ec->stats.stripe_cache.misses); + GF_ATOMIC_INC(ec->stats.stripe_cache.misses); - return NULL; + return NULL; } static gf_boolean_t -ec_get_and_merge_stripe (ec_t *ec, ec_fop_data_t *fop, ec_stripe_part_t which) +ec_get_and_merge_stripe(ec_t *ec, ec_fop_data_t *fop, ec_stripe_part_t which) { - uint64_t frag_offset; - ec_stripe_t *stripe = NULL; - gf_boolean_t found = _gf_false; + uint64_t frag_offset; + ec_stripe_t *stripe = NULL; + gf_boolean_t found = _gf_false; - if (!ec->stripe_cache) { - return found; - } + if (!ec->stripe_cache) { + return found; + } - LOCK(&fop->fd->inode->lock); - if (which == EC_STRIPE_HEAD) { - frag_offset = fop->frag_range.first; - stripe = ec_get_stripe_from_cache_locked(ec, fop, frag_offset); - if (stripe) { - ec_merge_stripe_head_locked (ec, fop, stripe); - found = _gf_true; - } + LOCK(&fop->fd->inode->lock); + if (which == EC_STRIPE_HEAD) { + frag_offset = fop->frag_range.first; + stripe = ec_get_stripe_from_cache_locked(ec, fop, frag_offset); + if (stripe) { + ec_merge_stripe_head_locked(ec, fop, stripe); + found = _gf_true; } + } - if (which == EC_STRIPE_TAIL) { - frag_offset = fop->frag_range.last - ec->fragment_size; - stripe = ec_get_stripe_from_cache_locked(ec, fop, frag_offset); - if (stripe) { - ec_merge_stripe_tail_locked (ec, fop, stripe); - found = _gf_true; - } + if (which == EC_STRIPE_TAIL) { + frag_offset = fop->frag_range.last - ec->fragment_size; + stripe = ec_get_stripe_from_cache_locked(ec, fop, frag_offset); + if (stripe) { + ec_merge_stripe_tail_locked(ec, fop, stripe); + found = _gf_true; } - UNLOCK(&fop->fd->inode->lock); + } + UNLOCK(&fop->fd->inode->lock); - return found; + return found; } -void ec_writev_start(ec_fop_data_t *fop) +void +ec_writev_start(ec_fop_data_t *fop) { ec_t *ec = fop->xl->private; ec_fd_t *ctx; @@ -2062,40 +2010,39 @@ void ec_writev_start(ec_fop_data_t *fop) goto failed_fd; } if (fop->head > 0) { - found_stripe = ec_get_and_merge_stripe (ec, fop, EC_STRIPE_HEAD); + found_stripe = ec_get_and_merge_stripe(ec, fop, EC_STRIPE_HEAD); if (!found_stripe) { - if (ec_make_internal_fop_xdata (&xdata)) { - err = -ENOMEM; - goto failed_xdata; - } - ec_readv(fop->frame, fop->xl, -1, EC_MINIMUM_MIN, - ec_writev_merge_head, - NULL, fd, ec->stripe_size, fop->offset, 0, xdata); + if (ec_make_internal_fop_xdata(&xdata)) { + err = -ENOMEM; + goto failed_xdata; + } + ec_readv(fop->frame, fop->xl, -1, EC_MINIMUM_MIN, + ec_writev_merge_head, NULL, fd, ec->stripe_size, + fop->offset, 0, xdata); } } tail = fop->size - fop->user_size - fop->head; if ((tail > 0) && ((fop->head == 0) || (fop->size > ec->stripe_size))) { - /* Current locking scheme will make sure the 'current' below will - * never decrease while the fop is in progress, so the checks will - * work as expected - */ + /* Current locking scheme will make sure the 'current' below will + * never decrease while the fop is in progress, so the checks will + * work as expected + */ if (current > fop->offset + fop->head + fop->user_size) { - found_stripe = ec_get_and_merge_stripe (ec, fop, EC_STRIPE_TAIL); + found_stripe = ec_get_and_merge_stripe(ec, fop, EC_STRIPE_TAIL); if (!found_stripe) { - if (ec_make_internal_fop_xdata (&xdata)) { - err = -ENOMEM; - goto failed_xdata; - } - ec_readv(fop->frame, fop->xl, -1, EC_MINIMUM_MIN, - ec_writev_merge_tail, NULL, fd, ec->stripe_size, - fop->offset + fop->size - ec->stripe_size, - 0, xdata); + if (ec_make_internal_fop_xdata(&xdata)) { + err = -ENOMEM; + goto failed_xdata; + } + ec_readv(fop->frame, fop->xl, -1, EC_MINIMUM_MIN, + ec_writev_merge_tail, NULL, fd, ec->stripe_size, + fop->offset + fop->size - ec->stripe_size, 0, xdata); } } else { memset(fop->vector[0].iov_base + fop->size - tail, 0, tail); if (ec->stripe_cache) { - ec_add_stripe_in_cache (ec, fop); + ec_add_stripe_in_cache(ec, fop); } } } @@ -2112,23 +2059,25 @@ failed: ec_fop_set_error(fop, -err); } -int32_t ec_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, struct iatt *prestat, - struct iatt *poststat, dict_t *xdata) +int32_t +ec_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, struct iatt *prestat, struct iatt *poststat, + dict_t *xdata) { - ec_t *ec = NULL; - if (this && this->private) { - ec = this->private; - if ((op_ret > 0) && ((op_ret % ec->fragment_size) != 0)) { - op_ret = -1; - op_errno = EIO; - } + ec_t *ec = NULL; + if (this && this->private) { + ec = this->private; + if ((op_ret > 0) && ((op_ret % ec->fragment_size) != 0)) { + op_ret = -1; + op_errno = EIO; } - return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno, - prestat, poststat, xdata); + } + return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prestat, + poststat, xdata); } -void ec_wind_writev(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_writev(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -2141,9 +2090,9 @@ void ec_wind_writev(ec_t * ec, ec_fop_data_t * fop, int32_t idx) vector[0].iov_len = size; STACK_WIND_COOKIE(fop->frame, ec_writev_cbk, (void *)(uintptr_t)idx, - ec->xl_list[idx], ec->xl_list[idx]->fops->writev, - fop->fd, vector, 1, fop->offset / ec->fragments, - fop->uint32, fop->buffers, fop->xdata); + ec->xl_list[idx], ec->xl_list[idx]->fops->writev, fop->fd, + vector, 1, fop->offset / ec->fragments, fop->uint32, + fop->buffers, fop->xdata); } static void @@ -2161,35 +2110,34 @@ ec_writev_encode(ec_fop_data_t *fop) fop->vector[0].iov_base, blocks); } -int32_t ec_manager_writev(ec_fop_data_t *fop, int32_t state) +int32_t +ec_manager_writev(ec_fop_data_t *fop, int32_t state) { ec_cbk_data_t *cbk; ec_fd_t *ctx = NULL; - ec_t *ec = fop->xl->private; + ec_t *ec = fop->xl->private; off_t fl_start = 0; size_t fl_size = LLONG_MAX; - switch (state) - { + switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: - ctx = ec_fd_get(fop->fd, fop->xl); - if (ctx != NULL) { - if ((ctx->flags & O_APPEND) == 0) { - off_t user_size = 0; - off_t head = 0; - - fl_start = fop->offset; - user_size = iov_length(fop->vector, fop->int32); - head = ec_adjust_offset_down(ec, &fl_start, - _gf_true); - fl_size = user_size + head; - ec_adjust_size_up(ec, &fl_size, _gf_true); - } + ctx = ec_fd_get(fop->fd, fop->xl); + if (ctx != NULL) { + if ((ctx->flags & O_APPEND) == 0) { + off_t user_size = 0; + off_t head = 0; + + fl_start = fop->offset; + user_size = iov_length(fop->vector, fop->int32); + head = ec_adjust_offset_down(ec, &fl_start, _gf_true); + fl_size = user_size + head; + ec_adjust_size_up(ec, &fl_size, _gf_true); } + } ec_lock_prepare_fd(fop, fop->fd, - EC_UPDATE_DATA | EC_UPDATE_META | - EC_QUERY_INFO, fl_start, fl_size); + EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO, + fl_start, fl_size); ec_lock(fop); return EC_STATE_DISPATCH; @@ -2217,29 +2165,28 @@ int32_t ec_manager_writev(ec_fop_data_t *fop, int32_t state) ec_t *ec = fop->xl->private; size_t size; - ec_iatt_rebuild(fop->xl->private, cbk->iatt, 2, - cbk->count); + ec_iatt_rebuild(fop->xl->private, cbk->iatt, 2, cbk->count); /* This shouldn't fail because we have the inode locked. */ LOCK(&fop->fd->inode->lock); { - GF_ASSERT(__ec_get_inode_size(fop, fop->fd->inode, - &cbk->iatt[0].ia_size)); - cbk->iatt[1].ia_size = cbk->iatt[0].ia_size; - size = fop->offset + fop->head + fop->user_size; - if (size > cbk->iatt[0].ia_size) { - /* Only update inode size if this is a top level fop. - * Otherwise this is an internal write and the top - * level fop should take care of the real inode size. - */ - if (fop->parent == NULL) { - /* This shouldn't fail because we have the inode - * locked. */ - GF_ASSERT(__ec_set_inode_size(fop, - fop->fd->inode, size)); - } - cbk->iatt[1].ia_size = size; + GF_ASSERT(__ec_get_inode_size(fop, fop->fd->inode, + &cbk->iatt[0].ia_size)); + cbk->iatt[1].ia_size = cbk->iatt[0].ia_size; + size = fop->offset + fop->head + fop->user_size; + if (size > cbk->iatt[0].ia_size) { + /* Only update inode size if this is a top level fop. + * Otherwise this is an internal write and the top + * level fop should take care of the real inode size. + */ + if (fop->parent == NULL) { + /* This shouldn't fail because we have the inode + * locked. */ + GF_ASSERT( + __ec_set_inode_size(fop, fop->fd->inode, size)); } + cbk->iatt[1].ia_size = size; + } } UNLOCK(&fop->fd->inode->lock); @@ -2263,8 +2210,7 @@ int32_t ec_manager_writev(ec_fop_data_t *fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.writev != NULL) - { + if (fop->cbks.writev != NULL) { fop->cbks.writev(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->iatt[0], &cbk->iatt[1], cbk->xdata); @@ -2278,7 +2224,7 @@ int32_t ec_manager_writev(ec_fop_data_t *fop, int32_t state) fop->frame->root->uid = fop->uid; fop->frame->root->gid = fop->gid; - /* Fall through */ + /* Fall through */ case -EC_STATE_INIT: case -EC_STATE_LOCK: @@ -2287,8 +2233,7 @@ int32_t ec_manager_writev(ec_fop_data_t *fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.writev != NULL) - { + if (fop->cbks.writev != NULL) { fop->cbks.writev(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, NULL, NULL); } @@ -2308,25 +2253,24 @@ int32_t ec_manager_writev(ec_fop_data_t *fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, - "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_writev(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_writev_cbk_t func, void * data, fd_t * fd, - struct iovec * vector, int32_t count, off_t offset, - uint32_t flags, struct iobref * iobref, dict_t * xdata) +void +ec_writev(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_writev_cbk_t func, void *data, fd_t *fd, + struct iovec *vector, int32_t count, off_t offset, uint32_t flags, + struct iobref *iobref, dict_t *xdata) { - ec_cbk_t callback = { .writev = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.writev = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(WRITE) %p", frame); + gf_msg_trace("ec", 0, "EC(WRITE) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -2348,10 +2292,9 @@ void ec_writev(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, - "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -2359,10 +2302,9 @@ void ec_writev(call_frame_t * frame, xlator_t * this, uintptr_t target, if (count > 0) { fop->vector = iov_dup(vector, count); if (fop->vector == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, - "Failed to duplicate a " - "vector list."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to duplicate a " + "vector list."); goto out; } @@ -2371,10 +2313,9 @@ void ec_writev(call_frame_t * frame, xlator_t * this, uintptr_t target, if (iobref != NULL) { fop->buffers = iobref_ref(iobref); if (fop->buffers == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_BUF_REF_FAIL, - "Failed to reference a " - "buffer."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_BUF_REF_FAIL, + "Failed to reference a " + "buffer."); goto out; } @@ -2382,10 +2323,9 @@ void ec_writev(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_copy_with_ref(xdata, NULL); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } diff --git a/xlators/cluster/ec/src/ec-locks.c b/xlators/cluster/ec/src/ec-locks.c index d8ad7721f53..47a069b1775 100644 --- a/xlators/cluster/ec/src/ec-locks.c +++ b/xlators/cluster/ec/src/ec-locks.c @@ -19,10 +19,11 @@ #include "ec-messages.h" #define EC_LOCK_MODE_NONE 0 -#define EC_LOCK_MODE_INC 1 -#define EC_LOCK_MODE_ALL 2 +#define EC_LOCK_MODE_INC 1 +#define EC_LOCK_MODE_ALL 2 -int32_t ec_lock_check(ec_fop_data_t *fop, uintptr_t *mask) +int32_t +ec_lock_check(ec_fop_data_t *fop, uintptr_t *mask) { ec_t *ec = fop->xl->private; ec_cbk_data_t *ans = NULL; @@ -30,7 +31,8 @@ int32_t ec_lock_check(ec_fop_data_t *fop, uintptr_t *mask) uintptr_t locked = 0, notlocked = 0; int32_t error = -1; - list_for_each_entry(ans, &fop->cbk_list, list) { + list_for_each_entry(ans, &fop->cbk_list, list) + { if (ans->op_ret >= 0) { if (locked != 0) { error = EIO; @@ -38,16 +40,16 @@ int32_t ec_lock_check(ec_fop_data_t *fop, uintptr_t *mask) locked |= ans->mask; cbk = ans; } else { - if (ans->op_errno == EAGAIN) { - switch (fop->uint32) { - case EC_LOCK_MODE_NONE: - case EC_LOCK_MODE_ALL: - /* Goal is to treat non-blocking lock as failure - * even if there is a single EAGAIN*/ - notlocked |= ans->mask; - break; - } + if (ans->op_errno == EAGAIN) { + switch (fop->uint32) { + case EC_LOCK_MODE_NONE: + case EC_LOCK_MODE_ALL: + /* Goal is to treat non-blocking lock as failure + * even if there is a single EAGAIN*/ + notlocked |= ans->mask; + break; } + } } } @@ -63,24 +65,24 @@ int32_t ec_lock_check(ec_fop_data_t *fop, uintptr_t *mask) error = 0; } else { switch (fop->uint32) { - case EC_LOCK_MODE_NONE: - error = EAGAIN; - break; + case EC_LOCK_MODE_NONE: + error = EAGAIN; + break; - case EC_LOCK_MODE_ALL: - fop->uint32 = EC_LOCK_MODE_INC; - break; + case EC_LOCK_MODE_ALL: + fop->uint32 = EC_LOCK_MODE_INC; + break; - default: - error = EIO; - break; + default: + error = EIO; + break; } } } else { if (fop->answer && fop->answer->op_ret < 0) - error = fop->answer->op_errno; + error = fop->answer->op_errno; else - error = EIO; + error = EIO; } } @@ -89,28 +91,25 @@ int32_t ec_lock_check(ec_fop_data_t *fop, uintptr_t *mask) return error; } -int32_t ec_lock_unlocked(call_frame_t * frame, void * cookie, - xlator_t * this, int32_t op_ret, int32_t op_errno, - dict_t * xdata) +int32_t +ec_lock_unlocked(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - if (op_ret < 0) - { - gf_msg (this->name, GF_LOG_WARNING, op_errno, - EC_MSG_UNLOCK_FAILED, - "Failed to unlock an entry/inode"); + if (op_ret < 0) { + gf_msg(this->name, GF_LOG_WARNING, op_errno, EC_MSG_UNLOCK_FAILED, + "Failed to unlock an entry/inode"); } return 0; } -int32_t ec_lock_lk_unlocked(call_frame_t * frame, void * cookie, - xlator_t * this, int32_t op_ret, int32_t op_errno, - struct gf_flock * flock, dict_t * xdata) +int32_t +ec_lock_lk_unlocked(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct gf_flock *flock, + dict_t *xdata) { - if (op_ret < 0) - { - gf_msg(this->name, GF_LOG_WARNING, op_errno, - EC_MSG_LK_UNLOCK_FAILED, + if (op_ret < 0) { + gf_msg(this->name, GF_LOG_WARNING, op_errno, EC_MSG_LK_UNLOCK_FAILED, "Failed to unlock an lk"); } @@ -119,11 +118,12 @@ int32_t ec_lock_lk_unlocked(call_frame_t * frame, void * cookie, /* FOP: entrylk */ -int32_t ec_entrylk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, dict_t * xdata) +int32_t +ec_entrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -133,20 +133,16 @@ int32_t ec_entrylk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_ENTRYLK, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (xdata != NULL) - { + if (cbk != NULL) { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg(this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, "Failed to reference a " "dictionary."); @@ -158,15 +154,15 @@ int32_t ec_entrylk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_entrylk(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_entrylk(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -176,20 +172,19 @@ void ec_wind_entrylk(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->entrylk_type, fop->xdata); } -int32_t ec_manager_entrylk(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_entrylk(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: - if (fop->entrylk_cmd == ENTRYLK_LOCK) - { + if (fop->entrylk_cmd == ENTRYLK_LOCK) { fop->uint32 = EC_LOCK_MODE_ALL; fop->entrylk_cmd = ENTRYLK_LOCK_NB; } - /* Fall through */ + /* Fall through */ case EC_STATE_DISPATCH: ec_dispatch_all(fop); @@ -201,15 +196,14 @@ int32_t ec_manager_entrylk(ec_fop_data_t * fop, int32_t state) if (fop->entrylk_cmd != ENTRYLK_UNLOCK) { uintptr_t mask; - ec_fop_set_error (fop, ec_lock_check(fop, &mask)); + ec_fop_set_error(fop, ec_lock_check(fop, &mask)); if (fop->error != 0) { if (mask != 0) { if (fop->id == GF_FOP_ENTRYLK) { - ec_entrylk(fop->frame, fop->xl, mask, 1, - ec_lock_unlocked, NULL, fop->str[0], - &fop->loc[0], fop->str[1], - ENTRYLK_UNLOCK, fop->entrylk_type, - fop->xdata); + ec_entrylk( + fop->frame, fop->xl, mask, 1, ec_lock_unlocked, + NULL, fop->str[0], &fop->loc[0], fop->str[1], + ENTRYLK_UNLOCK, fop->entrylk_type, fop->xdata); } else { ec_fentrylk(fop->frame, fop->xl, mask, 1, ec_lock_unlocked, NULL, fop->str[0], @@ -238,18 +232,13 @@ int32_t ec_manager_entrylk(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->id == GF_FOP_ENTRYLK) - { - if (fop->cbks.entrylk != NULL) - { - fop->cbks.entrylk(fop->req_frame, fop, fop->xl, - cbk->op_ret, cbk->op_errno, cbk->xdata); + if (fop->id == GF_FOP_ENTRYLK) { + if (fop->cbks.entrylk != NULL) { + fop->cbks.entrylk(fop->req_frame, fop, fop->xl, cbk->op_ret, + cbk->op_errno, cbk->xdata); } - } - else - { - if (fop->cbks.fentrylk != NULL) - { + } else { + if (fop->cbks.fentrylk != NULL) { fop->cbks.fentrylk(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, cbk->xdata); } @@ -262,18 +251,13 @@ int32_t ec_manager_entrylk(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->id == GF_FOP_ENTRYLK) - { - if (fop->cbks.entrylk != NULL) - { + if (fop->id == GF_FOP_ENTRYLK) { + if (fop->cbks.entrylk != NULL) { fop->cbks.entrylk(fop->req_frame, fop, fop->xl, -1, fop->error, NULL); } - } - else - { - if (fop->cbks.fentrylk != NULL) - { + } else { + if (fop->cbks.fentrylk != NULL) { fop->cbks.fentrylk(fop->req_frame, fop, fop->xl, -1, fop->error, NULL); } @@ -282,25 +266,24 @@ int32_t ec_manager_entrylk(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, - "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_entrylk(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_entrylk_cbk_t func, void * data, - const char * volume, loc_t * loc, const char * basename, - entrylk_cmd cmd, entrylk_type type, dict_t * xdata) +void +ec_entrylk(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_entrylk_cbk_t func, void *data, + const char *volume, loc_t *loc, const char *basename, + entrylk_cmd cmd, entrylk_type type, dict_t *xdata) { - ec_cbk_t callback = { .entrylk = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.entrylk = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(ENTRYLK) %p", frame); + gf_msg_trace("ec", 0, "EC(ENTRYLK) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -319,18 +302,16 @@ void ec_entrylk(call_frame_t * frame, xlator_t * this, uintptr_t target, if (volume != NULL) { fop->str[0] = gf_strdup(volume); if (fop->str[0] == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, - "Failed to duplicate a string."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to duplicate a string."); goto out; } } if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, - "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -338,9 +319,8 @@ void ec_entrylk(call_frame_t * frame, xlator_t * this, uintptr_t target, if (basename != NULL) { fop->str[1] = gf_strdup(basename); if (fop->str[1] == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, - "Failed to duplicate a string."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to duplicate a string."); goto out; } @@ -348,10 +328,9 @@ void ec_entrylk(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -369,11 +348,12 @@ out: /* FOP: fentrylk */ -int32_t ec_fentrylk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, dict_t * xdata) +int32_t +ec_fentrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -383,22 +363,18 @@ int32_t ec_fentrylk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FENTRYLK, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (xdata != NULL) - { + if (cbk != NULL) { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -408,15 +384,15 @@ int32_t ec_fentrylk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_fentrylk(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_fentrylk(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -426,24 +402,25 @@ void ec_wind_fentrylk(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->entrylk_type, fop->xdata); } -void ec_fentrylk(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fentrylk_cbk_t func, void * data, - const char * volume, fd_t * fd, const char * basename, - entrylk_cmd cmd, entrylk_type type, dict_t * xdata) +void +ec_fentrylk(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fentrylk_cbk_t func, void *data, + const char *volume, fd_t *fd, const char *basename, entrylk_cmd cmd, + entrylk_type type, dict_t *xdata) { - ec_cbk_t callback = { .fentrylk = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.fentrylk = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(FENTRYLK) %p", frame); + gf_msg_trace("ec", 0, "EC(FENTRYLK) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate(frame, this, GF_FOP_FENTRYLK, 0, target, - minimum, ec_wind_fentrylk, ec_manager_entrylk, - callback, data); + fop = ec_fop_data_allocate(frame, this, GF_FOP_FENTRYLK, 0, target, minimum, + ec_wind_fentrylk, ec_manager_entrylk, callback, + data); if (fop == NULL) { goto out; } @@ -456,9 +433,8 @@ void ec_fentrylk(call_frame_t * frame, xlator_t * this, uintptr_t target, if (volume != NULL) { fop->str[0] = gf_strdup(volume); if (fop->str[0] == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, - "Failed to duplicate a string."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to duplicate a string."); goto out; } @@ -466,10 +442,9 @@ void ec_fentrylk(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, - "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -477,9 +452,8 @@ void ec_fentrylk(call_frame_t * frame, xlator_t * this, uintptr_t target, if (basename != NULL) { fop->str[1] = gf_strdup(basename); if (fop->str[1] == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, - "Failed to duplicate a string."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to duplicate a string."); goto out; } @@ -487,10 +461,9 @@ void ec_fentrylk(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -508,11 +481,12 @@ out: /* FOP: inodelk */ -int32_t ec_inodelk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, dict_t * xdata) +int32_t +ec_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -522,22 +496,18 @@ int32_t ec_inodelk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_INODELK, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (xdata != NULL) - { + if (cbk != NULL) { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -547,15 +517,15 @@ int32_t ec_inodelk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_inodelk(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_inodelk(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -565,24 +535,22 @@ void ec_wind_inodelk(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->xdata); } -int32_t ec_manager_inodelk(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_inodelk(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: - fop->flock.l_len += ec_adjust_offset_down(fop->xl->private, - &fop->flock.l_start, - _gf_true); + fop->flock.l_len += ec_adjust_offset_down( + fop->xl->private, &fop->flock.l_start, _gf_true); ec_adjust_offset_up(fop->xl->private, &fop->flock.l_len, _gf_true); - if ((fop->int32 == F_SETLKW) && (fop->flock.l_type != F_UNLCK)) - { + if ((fop->int32 == F_SETLKW) && (fop->flock.l_type != F_UNLCK)) { fop->uint32 = EC_LOCK_MODE_ALL; fop->int32 = F_SETLK; } - /* Fall through */ + /* Fall through */ case EC_STATE_DISPATCH: ec_dispatch_all(fop); @@ -594,7 +562,7 @@ int32_t ec_manager_inodelk(ec_fop_data_t * fop, int32_t state) if (fop->flock.l_type != F_UNLCK) { uintptr_t mask; - ec_fop_set_error (fop, ec_lock_check(fop, &mask)); + ec_fop_set_error(fop, ec_lock_check(fop, &mask)); if (fop->error != 0) { if (mask != 0) { ec_t *ec = fop->xl->private; @@ -641,18 +609,13 @@ int32_t ec_manager_inodelk(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->id == GF_FOP_INODELK) - { - if (fop->cbks.inodelk != NULL) - { - fop->cbks.inodelk(fop->req_frame, fop, fop->xl, - cbk->op_ret, cbk->op_errno, cbk->xdata); + if (fop->id == GF_FOP_INODELK) { + if (fop->cbks.inodelk != NULL) { + fop->cbks.inodelk(fop->req_frame, fop, fop->xl, cbk->op_ret, + cbk->op_errno, cbk->xdata); } - } - else - { - if (fop->cbks.finodelk != NULL) - { + } else { + if (fop->cbks.finodelk != NULL) { fop->cbks.finodelk(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, cbk->xdata); } @@ -665,18 +628,13 @@ int32_t ec_manager_inodelk(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->id == GF_FOP_INODELK) - { - if (fop->cbks.inodelk != NULL) - { + if (fop->id == GF_FOP_INODELK) { + if (fop->cbks.inodelk != NULL) { fop->cbks.inodelk(fop->req_frame, fop, fop->xl, -1, fop->error, NULL); } - } - else - { - if (fop->cbks.finodelk != NULL) - { + } else { + if (fop->cbks.finodelk != NULL) { fop->cbks.finodelk(fop->req_frame, fop, fop->xl, -1, fop->error, NULL); } @@ -685,25 +643,24 @@ int32_t ec_manager_inodelk(ec_fop_data_t * fop, int32_t state) return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, - "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_inodelk (call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner, - uintptr_t target, int32_t minimum, fop_inodelk_cbk_t func, - void *data, const char *volume, loc_t *loc, int32_t cmd, - struct gf_flock *flock, dict_t *xdata) +void +ec_inodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner, + uintptr_t target, int32_t minimum, fop_inodelk_cbk_t func, + void *data, const char *volume, loc_t *loc, int32_t cmd, + struct gf_flock *flock, dict_t *xdata) { - ec_cbk_t callback = { .inodelk = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.inodelk = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(INODELK) %p", frame); + gf_msg_trace("ec", 0, "EC(INODELK) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -717,23 +674,21 @@ void ec_inodelk (call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner, } fop->int32 = cmd; - ec_owner_copy (fop->frame, owner); + ec_owner_copy(fop->frame, owner); if (volume != NULL) { fop->str[0] = gf_strdup(volume); if (fop->str[0] == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, - "Failed to duplicate a string."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to duplicate a string."); goto out; } } if (loc != NULL) { if (loc_copy(&fop->loc[0], loc) != 0) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_LOC_COPY_FAIL, - "Failed to copy a location."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL, + "Failed to copy a location."); goto out; } @@ -753,10 +708,9 @@ void ec_inodelk (call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -774,11 +728,12 @@ out: /* FOP: finodelk */ -int32_t ec_finodelk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, dict_t * xdata) +int32_t +ec_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -788,22 +743,18 @@ int32_t ec_finodelk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FINODELK, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (xdata != NULL) - { + if (cbk != NULL) { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -813,15 +764,15 @@ int32_t ec_finodelk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_finodelk(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_finodelk(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -831,24 +782,25 @@ void ec_wind_finodelk(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->xdata); } -void ec_finodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner, - uintptr_t target, int32_t minimum, fop_finodelk_cbk_t func, - void *data, const char *volume, fd_t *fd, int32_t cmd, - struct gf_flock *flock, dict_t *xdata) +void +ec_finodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner, + uintptr_t target, int32_t minimum, fop_finodelk_cbk_t func, + void *data, const char *volume, fd_t *fd, int32_t cmd, + struct gf_flock *flock, dict_t *xdata) { - ec_cbk_t callback = { .finodelk = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.finodelk = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(FINODELK) %p", frame); + gf_msg_trace("ec", 0, "EC(FINODELK) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); - fop = ec_fop_data_allocate(frame, this, GF_FOP_FINODELK, 0, target, - minimum, ec_wind_finodelk, ec_manager_inodelk, - callback, data); + fop = ec_fop_data_allocate(frame, this, GF_FOP_FINODELK, 0, target, minimum, + ec_wind_finodelk, ec_manager_inodelk, callback, + data); if (fop == NULL) { goto out; } @@ -856,14 +808,13 @@ void ec_finodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner, fop->use_fd = 1; fop->int32 = cmd; - ec_owner_copy (fop->frame, owner); + ec_owner_copy(fop->frame, owner); if (volume != NULL) { fop->str[0] = gf_strdup(volume); if (fop->str[0] == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, - "Failed to duplicate a string."); + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to duplicate a string."); goto out; } @@ -871,10 +822,9 @@ void ec_finodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -894,10 +844,9 @@ void ec_finodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -915,15 +864,13 @@ out: /* FOP: lk */ -int32_t ec_combine_lk(ec_fop_data_t * fop, ec_cbk_data_t * dst, - ec_cbk_data_t * src) +int32_t +ec_combine_lk(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src) { - if (!ec_flock_compare(&dst->flock, &src->flock)) - { - gf_msg (fop->xl->name, GF_LOG_NOTICE, 0, - EC_MSG_LOCK_MISMATCH, - "Mismatching lock in " - "answers of 'GF_FOP_LK'"); + if (!ec_flock_compare(&dst->flock, &src->flock)) { + gf_msg(fop->xl->name, GF_LOG_NOTICE, 0, EC_MSG_LOCK_MISMATCH, + "Mismatching lock in " + "answers of 'GF_FOP_LK'"); return 0; } @@ -931,12 +878,12 @@ int32_t ec_combine_lk(ec_fop_data_t * fop, ec_cbk_data_t * dst, return 1; } -int32_t ec_lk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, - int32_t op_ret, int32_t op_errno, struct gf_flock * flock, - dict_t * xdata) +int32_t +ec_lk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, struct gf_flock *flock, dict_t *xdata) { - ec_fop_data_t * fop = NULL; - ec_cbk_data_t * cbk = NULL; + ec_fop_data_t *fop = NULL; + ec_cbk_data_t *cbk = NULL; int32_t idx = (int32_t)(uintptr_t)cookie; VALIDATE_OR_GOTO(this, out); @@ -946,39 +893,32 @@ int32_t ec_lk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, fop = frame->local; - ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, - frame, op_ret, op_errno); + ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame, + op_ret, op_errno); cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_LK, idx, op_ret, op_errno); - if (cbk != NULL) - { - if (op_ret >= 0) - { - if (flock != NULL) - { + if (cbk != NULL) { + if (op_ret >= 0) { + if (flock != NULL) { cbk->flock.l_type = flock->l_type; cbk->flock.l_whence = flock->l_whence; cbk->flock.l_start = flock->l_start; cbk->flock.l_len = flock->l_len; cbk->flock.l_pid = flock->l_pid; cbk->flock.l_owner.len = flock->l_owner.len; - if (flock->l_owner.len > 0) - { + if (flock->l_owner.len > 0) { memcpy(cbk->flock.l_owner.data, flock->l_owner.data, flock->l_owner.len); } } } - if (xdata != NULL) - { + if (xdata != NULL) { cbk->xdata = dict_ref(xdata); - if (cbk->xdata == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + if (cbk->xdata == NULL) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } @@ -988,15 +928,15 @@ int32_t ec_lk_cbk(call_frame_t * frame, void * cookie, xlator_t * this, } out: - if (fop != NULL) - { + if (fop != NULL) { ec_complete(fop); } return 0; } -void ec_wind_lk(ec_t * ec, ec_fop_data_t * fop, int32_t idx) +void +ec_wind_lk(ec_t *ec, ec_fop_data_t *fop, int32_t idx) { ec_trace("WIND", fop, "idx=%d", idx); @@ -1005,20 +945,19 @@ void ec_wind_lk(ec_t * ec, ec_fop_data_t * fop, int32_t idx) fop->int32, &fop->flock, fop->xdata); } -int32_t ec_manager_lk(ec_fop_data_t * fop, int32_t state) +int32_t +ec_manager_lk(ec_fop_data_t *fop, int32_t state) { - ec_cbk_data_t * cbk; + ec_cbk_data_t *cbk; - switch (state) - { + switch (state) { case EC_STATE_INIT: - if ((fop->int32 == F_SETLKW) && (fop->flock.l_type != F_UNLCK)) - { + if ((fop->int32 == F_SETLKW) && (fop->flock.l_type != F_UNLCK)) { fop->uint32 = EC_LOCK_MODE_ALL; fop->int32 = F_SETLK; } - /* Fall through */ + /* Fall through */ case EC_STATE_DISPATCH: ec_dispatch_all(fop); @@ -1030,7 +969,7 @@ int32_t ec_manager_lk(ec_fop_data_t * fop, int32_t state) if (fop->flock.l_type != F_UNLCK) { uintptr_t mask; - ec_fop_set_error (fop, ec_lock_check(fop, &mask)); + ec_fop_set_error(fop, ec_lock_check(fop, &mask)); if (fop->error != 0) { if (mask != 0) { struct gf_flock flock = {0}; @@ -1040,11 +979,10 @@ int32_t ec_manager_lk(ec_fop_data_t * fop, int32_t state) flock.l_start = fop->flock.l_start; flock.l_len = fop->flock.l_len; flock.l_pid = fop->flock.l_pid; - lk_owner_copy (&flock.l_owner, &fop->flock.l_owner); + lk_owner_copy(&flock.l_owner, &fop->flock.l_owner); - ec_lk(fop->frame, fop->xl, mask, 1, - ec_lock_lk_unlocked, NULL, fop->fd, F_SETLK, - &flock, fop->xdata); + ec_lk(fop->frame, fop->xl, mask, 1, ec_lock_lk_unlocked, + NULL, fop->fd, F_SETLK, &flock, fop->xdata); } if (fop->error < 0) { @@ -1068,8 +1006,7 @@ int32_t ec_manager_lk(ec_fop_data_t * fop, int32_t state) GF_ASSERT(cbk != NULL); - if (fop->cbks.lk != NULL) - { + if (fop->cbks.lk != NULL) { fop->cbks.lk(fop->req_frame, fop, fop->xl, cbk->op_ret, cbk->op_errno, &cbk->flock, cbk->xdata); } @@ -1081,34 +1018,31 @@ int32_t ec_manager_lk(ec_fop_data_t * fop, int32_t state) case -EC_STATE_REPORT: GF_ASSERT(fop->error != 0); - if (fop->cbks.lk != NULL) - { - fop->cbks.lk(fop->req_frame, fop, fop->xl, -1, fop->error, - NULL, NULL); + if (fop->cbks.lk != NULL) { + fop->cbks.lk(fop->req_frame, fop, fop->xl, -1, fop->error, NULL, + NULL); } - return EC_STATE_END; default: - gf_msg (fop->xl->name, GF_LOG_ERROR, EINVAL, - EC_MSG_UNHANDLED_STATE, - "Unhandled state %d for %s", - state, ec_fop_name(fop->id)); + gf_msg(fop->xl->name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE, + "Unhandled state %d for %s", state, ec_fop_name(fop->id)); return EC_STATE_END; } } -void ec_lk(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_lk_cbk_t func, void * data, fd_t * fd, - int32_t cmd, struct gf_flock * flock, dict_t * xdata) +void +ec_lk(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_lk_cbk_t func, void *data, fd_t *fd, int32_t cmd, + struct gf_flock *flock, dict_t *xdata) { - ec_cbk_t callback = { .lk = func }; - ec_fop_data_t * fop = NULL; + ec_cbk_t callback = {.lk = func}; + ec_fop_data_t *fop = NULL; int32_t error = ENOMEM; - gf_msg_trace ("ec", 0, "EC(LK) %p", frame); + gf_msg_trace("ec", 0, "EC(LK) %p", frame); VALIDATE_OR_GOTO(this, out); GF_VALIDATE_OR_GOTO(this->name, frame, out); @@ -1127,10 +1061,9 @@ void ec_lk(call_frame_t * frame, xlator_t * this, uintptr_t target, if (fd != NULL) { fop->fd = fd_ref(fd); if (fop->fd == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_FILE_DESC_REF_FAIL, - "Failed to reference a " - "file descriptor."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL, + "Failed to reference a " + "file descriptor."); goto out; } @@ -1150,10 +1083,9 @@ void ec_lk(call_frame_t * frame, xlator_t * this, uintptr_t target, if (xdata != NULL) { fop->xdata = dict_ref(xdata); if (fop->xdata == NULL) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_DICT_REF_FAIL, - "Failed to reference a " - "dictionary."); + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL, + "Failed to reference a " + "dictionary."); goto out; } diff --git a/xlators/cluster/ec/src/ec-method.c b/xlators/cluster/ec/src/ec-method.c index fdc89391bfb..3aff6b096bd 100644 --- a/xlators/cluster/ec/src/ec-method.c +++ b/xlators/cluster/ec/src/ec-method.c @@ -88,11 +88,9 @@ ec_method_matrix_init(ec_matrix_list_t *list, ec_matrix_t *matrix, matrix->rows); for (i = 0; i < matrix->rows; i++) { matrix->row_data[i].values = matrix->values + i * matrix->columns; - matrix->row_data[i].func.interleaved = - ec_code_build_interleaved(matrix->code, - EC_METHOD_WORD_SIZE, - matrix->row_data[i].values, - matrix->columns); + matrix->row_data[i].func.interleaved = ec_code_build_interleaved( + matrix->code, EC_METHOD_WORD_SIZE, matrix->row_data[i].values, + matrix->columns); } } else { matrix->rows = list->rows; @@ -100,10 +98,9 @@ ec_method_matrix_init(ec_matrix_list_t *list, ec_matrix_t *matrix, matrix->columns, rows, matrix->rows); for (i = 0; i < matrix->rows; i++) { matrix->row_data[i].values = matrix->values + i * matrix->columns; - matrix->row_data[i].func.linear = - ec_code_build_linear(matrix->code, EC_METHOD_WORD_SIZE, - matrix->row_data[i].values, - matrix->columns); + matrix->row_data[i].func.linear = ec_code_build_linear( + matrix->code, EC_METHOD_WORD_SIZE, matrix->row_data[i].values, + matrix->columns); } } } @@ -266,8 +263,8 @@ ec_method_setup(xlator_t *xl, ec_matrix_list_t *list, const char *gen) int32_t err; matrix = GF_MALLOC(sizeof(ec_matrix_t) + - sizeof(ec_matrix_row_t) * list->rows + - sizeof(uint32_t) * list->columns * list->rows, + sizeof(ec_matrix_row_t) * list->rows + + sizeof(uint32_t) * list->columns * list->rows, ec_mt_ec_matrix_t); if (matrix == NULL) { err = -ENOMEM; @@ -310,9 +307,10 @@ ec_method_init(xlator_t *xl, ec_matrix_list_t *list, uint32_t columns, INIT_LIST_HEAD(&list->lru); int32_t err; - list->pool = mem_pool_new_fn(xl->ctx, sizeof(ec_matrix_t) + - sizeof(ec_matrix_row_t) * columns + - sizeof(uint32_t) * columns * columns, + list->pool = mem_pool_new_fn(xl->ctx, + sizeof(ec_matrix_t) + + sizeof(ec_matrix_row_t) * columns + + sizeof(uint32_t) * columns * columns, 128, "ec_matrix_t"); if (list->pool == NULL) { err = -ENOMEM; @@ -370,8 +368,8 @@ ec_method_fini(ec_matrix_list_t *list) GF_ASSERT(list->count == 0); - if (list->pool)/*Init was successful*/ - LOCK_DESTROY(&list->lock); + if (list->pool) /*Init was successful*/ + LOCK_DESTROY(&list->lock); ec_method_matrix_release(list->encode); GF_FREE(list->encode); @@ -402,9 +400,8 @@ ec_method_encode(ec_matrix_list_t *list, size_t size, void *in, void **out) matrix = list->encode; for (pos = 0; pos < size; pos += list->stripe) { for (i = 0; i < matrix->rows; i++) { - matrix->row_data[i].func.linear(out[i], in, pos, - matrix->row_data[i].values, - list->columns); + matrix->row_data[i].func.linear( + out[i], in, pos, matrix->row_data[i].values, list->columns); out[i] += EC_METHOD_CHUNK_SIZE; } } @@ -424,9 +421,8 @@ ec_method_decode(ec_matrix_list_t *list, size_t size, uintptr_t mask, } for (pos = 0; pos < size; pos += EC_METHOD_CHUNK_SIZE) { for (i = 0; i < matrix->rows; i++) { - matrix->row_data[i].func.interleaved(out, in, pos, - matrix->row_data[i].values, - list->columns); + matrix->row_data[i].func.interleaved( + out, in, pos, matrix->row_data[i].values, list->columns); out += EC_METHOD_CHUNK_SIZE; } } diff --git a/xlators/cluster/ec/src/ec.c b/xlators/cluster/ec/src/ec.c index a82305104c5..0350325d6fb 100644 --- a/xlators/cluster/ec/src/ec.c +++ b/xlators/cluster/ec/src/ec.c @@ -26,47 +26,45 @@ #include "events.h" static char *ec_read_policies[EC_READ_POLICY_MAX + 1] = { - [EC_ROUND_ROBIN] = "round-robin", - [EC_GFID_HASH] = "gfid-hash", - [EC_READ_POLICY_MAX] = NULL -}; + [EC_ROUND_ROBIN] = "round-robin", + [EC_GFID_HASH] = "gfid-hash", + [EC_READ_POLICY_MAX] = NULL}; #define EC_INTERNAL_XATTR_OR_GOTO(name, xattr, op_errno, label) \ - do { \ - if (ec_is_internal_xattr (NULL, (char *)name, NULL, NULL)) { \ - op_errno = EPERM; \ - goto label; \ - } \ - if (name && (strlen (name) == 0) && xattr) { \ - /* Bulk [f]removexattr/[f]setxattr */ \ - GF_IF_INTERNAL_XATTR_GOTO (EC_XATTR_PREFIX"*", xattr, \ - op_errno, label); \ - } \ - } while (0) - -int32_t ec_parse_options(xlator_t * this) -{ - ec_t * ec = this->private; + do { \ + if (ec_is_internal_xattr(NULL, (char *)name, NULL, NULL)) { \ + op_errno = EPERM; \ + goto label; \ + } \ + if (name && (strlen(name) == 0) && xattr) { \ + /* Bulk [f]removexattr/[f]setxattr */ \ + GF_IF_INTERNAL_XATTR_GOTO(EC_XATTR_PREFIX "*", xattr, op_errno, \ + label); \ + } \ + } while (0) + +int32_t +ec_parse_options(xlator_t *this) +{ + ec_t *ec = this->private; int32_t error = EINVAL; uintptr_t mask; GF_OPTION_INIT("redundancy", ec->redundancy, int32, out); ec->fragments = ec->nodes - ec->redundancy; if ((ec->redundancy < 1) || (ec->redundancy >= ec->fragments) || - (ec->fragments > EC_MAX_FRAGMENTS)) - { - gf_msg (this->name, GF_LOG_ERROR, EINVAL, - EC_MSG_INVALID_REDUNDANCY, - "Invalid redundancy (must be between " - "1 and %d)", (ec->nodes - 1) / 2); + (ec->fragments > EC_MAX_FRAGMENTS)) { + gf_msg(this->name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_REDUNDANCY, + "Invalid redundancy (must be between " + "1 and %d)", + (ec->nodes - 1) / 2); goto out; } ec->bits_for_nodes = 1; mask = 2; - while (ec->nodes > mask) - { + while (ec->nodes > mask) { ec->bits_for_nodes++; mask <<= 1; } @@ -74,9 +72,10 @@ int32_t ec_parse_options(xlator_t * this) ec->fragment_size = EC_METHOD_CHUNK_SIZE; ec->stripe_size = ec->fragment_size * ec->fragments; - gf_msg_debug ("ec", 0, "Initialized with: nodes=%u, fragments=%u, " - "stripe_size=%u, node_mask=%lX", - ec->nodes, ec->fragments, ec->stripe_size, ec->node_mask); + gf_msg_debug("ec", 0, + "Initialized with: nodes=%u, fragments=%u, " + "stripe_size=%u, node_mask=%lX", + ec->nodes, ec->fragments, ec->stripe_size, ec->node_mask); error = 0; @@ -84,30 +83,28 @@ out: return error; } -int32_t ec_prepare_childs(xlator_t * this) +int32_t +ec_prepare_childs(xlator_t *this) { - ec_t * ec = this->private; - xlator_list_t * child = NULL; + ec_t *ec = this->private; + xlator_list_t *child = NULL; int32_t count = 0; - for (child = this->children; child != NULL; child = child->next) - { + for (child = this->children; child != NULL; child = child->next) { count++; } - if (count > EC_MAX_NODES) - { - gf_msg (this->name, GF_LOG_ERROR, EINVAL, - EC_MSG_TOO_MANY_SUBVOLS, "Too many subvolumes"); + if (count > EC_MAX_NODES) { + gf_msg(this->name, GF_LOG_ERROR, EINVAL, EC_MSG_TOO_MANY_SUBVOLS, + "Too many subvolumes"); return EINVAL; } ec->nodes = count; ec->xl_list = GF_CALLOC(count, sizeof(ec->xl_list[0]), ec_mt_xlator_t); - if (ec->xl_list == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, "Allocation of xlator list failed"); + if (ec->xl_list == NULL) { + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Allocation of xlator list failed"); return ENOMEM; } @@ -115,8 +112,7 @@ int32_t ec_prepare_childs(xlator_t * this) ec->xl_up_count = 0; count = 0; - for (child = this->children; child != NULL; child = child->next) - { + for (child = this->children; child != NULL; child = child->next) { ec->xl_list[count++] = child->xlator; } @@ -125,43 +121,42 @@ int32_t ec_prepare_childs(xlator_t * this) /* This function transforms the subvol to subvol-id*/ static int -_subvol_to_subvolid (dict_t *this, char *key, data_t *value, void *data) -{ - ec_t *ec = data; - xlator_t *subvol = NULL; - int i = 0; - int ret = -1; - - subvol = data_to_ptr (value); - for (i = 0; i < ec->nodes; i++) { - if (ec->xl_list[i] == subvol) { - ret = dict_set_int32 (this, key, i); - /* -1 stops dict_foreach and returns -1*/ - if (ret < 0) - ret = -1; - goto out; - } +_subvol_to_subvolid(dict_t *this, char *key, data_t *value, void *data) +{ + ec_t *ec = data; + xlator_t *subvol = NULL; + int i = 0; + int ret = -1; + + subvol = data_to_ptr(value); + for (i = 0; i < ec->nodes; i++) { + if (ec->xl_list[i] == subvol) { + ret = dict_set_int32(this, key, i); + /* -1 stops dict_foreach and returns -1*/ + if (ret < 0) + ret = -1; + goto out; } + } out: - return ret; + return ret; } int -ec_subvol_to_subvol_id_transform (ec_t *ec, dict_t *leaf_to_subvolid) +ec_subvol_to_subvol_id_transform(ec_t *ec, dict_t *leaf_to_subvolid) { - return dict_foreach (leaf_to_subvolid, _subvol_to_subvolid, ec); + return dict_foreach(leaf_to_subvolid, _subvol_to_subvolid, ec); } -void __ec_destroy_private(xlator_t * this) +void +__ec_destroy_private(xlator_t *this) { - ec_t * ec = this->private; + ec_t *ec = this->private; - if (ec != NULL) - { + if (ec != NULL) { LOCK(&ec->lock); - if (ec->timer != NULL) - { + if (ec->timer != NULL) { gf_timer_call_cancel(this->ctx, ec->timer); ec->timer = NULL; } @@ -179,31 +174,27 @@ void __ec_destroy_private(xlator_t * this) sleep(2); this->private = NULL; - if (ec->xl_list != NULL) - { + if (ec->xl_list != NULL) { GF_FREE(ec->xl_list); ec->xl_list = NULL; } - if (ec->fop_pool != NULL) - { + if (ec->fop_pool != NULL) { mem_pool_destroy(ec->fop_pool); } - if (ec->cbk_pool != NULL) - { + if (ec->cbk_pool != NULL) { mem_pool_destroy(ec->cbk_pool); } - if (ec->lock_pool != NULL) - { + if (ec->lock_pool != NULL) { mem_pool_destroy(ec->lock_pool); } LOCK_DESTROY(&ec->lock); if (ec->leaf_to_subvolid) - dict_unref (ec->leaf_to_subvolid); + dict_unref(ec->leaf_to_subvolid); ec_method_fini(&ec->matrix); @@ -211,13 +202,13 @@ void __ec_destroy_private(xlator_t * this) } } -int32_t mem_acct_init(xlator_t * this) +int32_t +mem_acct_init(xlator_t *this) { - if (xlator_mem_acct_init(this, ec_mt_end + 1) != 0) - { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, "Memory accounting initialization " - "failed."); + if (xlator_mem_acct_init(this, ec_mt_end + 1) != 0) { + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Memory accounting initialization " + "failed."); return -1; } @@ -226,442 +217,435 @@ int32_t mem_acct_init(xlator_t * this) } void -ec_configure_background_heal_opts (ec_t *ec, int background_heals, - int heal_wait_qlen) +ec_configure_background_heal_opts(ec_t *ec, int background_heals, + int heal_wait_qlen) { - if (background_heals == 0) { - ec->heal_wait_qlen = 0; - } else { - ec->heal_wait_qlen = heal_wait_qlen; - } - ec->background_heals = background_heals; + if (background_heals == 0) { + ec->heal_wait_qlen = 0; + } else { + ec->heal_wait_qlen = heal_wait_qlen; + } + ec->background_heals = background_heals; } int -ec_assign_read_policy (ec_t *ec, char *read_policy) +ec_assign_read_policy(ec_t *ec, char *read_policy) { - int read_policy_idx = -1; + int read_policy_idx = -1; - read_policy_idx = gf_get_index_by_elem (ec_read_policies, read_policy); - if (read_policy_idx < 0 || read_policy_idx >= EC_READ_POLICY_MAX) - return -1; + read_policy_idx = gf_get_index_by_elem(ec_read_policies, read_policy); + if (read_policy_idx < 0 || read_policy_idx >= EC_READ_POLICY_MAX) + return -1; - ec->read_policy = read_policy_idx; - return 0; + ec->read_policy = read_policy_idx; + return 0; } int32_t -reconfigure (xlator_t *this, dict_t *options) -{ - ec_t *ec = this->private; - char *read_policy = NULL; - char *extensions = NULL; - uint32_t heal_wait_qlen = 0; - uint32_t background_heals = 0; - int32_t ret = -1; - int32_t err; - - GF_OPTION_RECONF ("cpu-extensions", extensions, options, str, failed); - - GF_OPTION_RECONF ("self-heal-daemon", ec->shd.enabled, options, bool, - failed); - GF_OPTION_RECONF ("iam-self-heal-daemon", ec->shd.iamshd, options, - bool, failed); - GF_OPTION_RECONF ("eager-lock", ec->eager_lock, options, - bool, failed); - GF_OPTION_RECONF ("other-eager-lock", ec->other_eager_lock, options, - bool, failed); - GF_OPTION_RECONF ("eager-lock-timeout", ec->eager_lock_timeout, - options, uint32, failed); - GF_OPTION_RECONF ("other-eager-lock-timeout", - ec->other_eager_lock_timeout, options, uint32, - failed); - GF_OPTION_RECONF ("background-heals", background_heals, options, - uint32, failed); - GF_OPTION_RECONF ("heal-wait-qlength", heal_wait_qlen, options, - uint32, failed); - GF_OPTION_RECONF ("self-heal-window-size", ec->self_heal_window_size, - options, uint32, failed); - GF_OPTION_RECONF ("heal-timeout", ec->shd.timeout, options, - int32, failed); - ec_configure_background_heal_opts (ec, background_heals, - heal_wait_qlen); - GF_OPTION_RECONF ("shd-max-threads", ec->shd.max_threads, - options, uint32, failed); - GF_OPTION_RECONF ("shd-wait-qlength", ec->shd.wait_qlength, - options, uint32, failed); - - GF_OPTION_RECONF ("read-policy", read_policy, options, str, failed); - - GF_OPTION_RECONF ("optimistic-change-log", ec->optimistic_changelog, - options, bool, failed); - GF_OPTION_RECONF ("parallel-writes", ec->parallel_writes, - options, bool, failed); - GF_OPTION_RECONF ("stripe-cache", ec->stripe_cache, options, uint32, - failed); - ret = 0; - if (ec_assign_read_policy (ec, read_policy)) { - ret = -1; - } +reconfigure(xlator_t *this, dict_t *options) +{ + ec_t *ec = this->private; + char *read_policy = NULL; + char *extensions = NULL; + uint32_t heal_wait_qlen = 0; + uint32_t background_heals = 0; + int32_t ret = -1; + int32_t err; - err = ec_method_update(this, &ec->matrix, extensions); - if (err != 0) { - ret = -1; - } + GF_OPTION_RECONF("cpu-extensions", extensions, options, str, failed); + + GF_OPTION_RECONF("self-heal-daemon", ec->shd.enabled, options, bool, + failed); + GF_OPTION_RECONF("iam-self-heal-daemon", ec->shd.iamshd, options, bool, + failed); + GF_OPTION_RECONF("eager-lock", ec->eager_lock, options, bool, failed); + GF_OPTION_RECONF("other-eager-lock", ec->other_eager_lock, options, bool, + failed); + GF_OPTION_RECONF("eager-lock-timeout", ec->eager_lock_timeout, options, + uint32, failed); + GF_OPTION_RECONF("other-eager-lock-timeout", ec->other_eager_lock_timeout, + options, uint32, failed); + GF_OPTION_RECONF("background-heals", background_heals, options, uint32, + failed); + GF_OPTION_RECONF("heal-wait-qlength", heal_wait_qlen, options, uint32, + failed); + GF_OPTION_RECONF("self-heal-window-size", ec->self_heal_window_size, + options, uint32, failed); + GF_OPTION_RECONF("heal-timeout", ec->shd.timeout, options, int32, failed); + ec_configure_background_heal_opts(ec, background_heals, heal_wait_qlen); + GF_OPTION_RECONF("shd-max-threads", ec->shd.max_threads, options, uint32, + failed); + GF_OPTION_RECONF("shd-wait-qlength", ec->shd.wait_qlength, options, uint32, + failed); + + GF_OPTION_RECONF("read-policy", read_policy, options, str, failed); + + GF_OPTION_RECONF("optimistic-change-log", ec->optimistic_changelog, options, + bool, failed); + GF_OPTION_RECONF("parallel-writes", ec->parallel_writes, options, bool, + failed); + GF_OPTION_RECONF("stripe-cache", ec->stripe_cache, options, uint32, failed); + ret = 0; + if (ec_assign_read_policy(ec, read_policy)) { + ret = -1; + } + + err = ec_method_update(this, &ec->matrix, extensions); + if (err != 0) { + ret = -1; + } failed: - return ret; + return ret; } glusterfs_event_t -ec_get_event_from_state (ec_t *ec) -{ - int down_count = 0; - - if (ec->xl_up_count >= ec->fragments) { - /* If ec is up but some subvolumes are yet to notify, give - * grace time for other subvols to notify to prevent start of - * I/O which may result in self-heals */ - if (ec->xl_notify_count < ec->nodes) - return GF_EVENT_MAXVAL; - - return GF_EVENT_CHILD_UP; - } else { - down_count = ec->xl_notify_count - ec->xl_up_count; - if (down_count > ec->redundancy) - return GF_EVENT_CHILD_DOWN; - } +ec_get_event_from_state(ec_t *ec) +{ + int down_count = 0; + + if (ec->xl_up_count >= ec->fragments) { + /* If ec is up but some subvolumes are yet to notify, give + * grace time for other subvols to notify to prevent start of + * I/O which may result in self-heals */ + if (ec->xl_notify_count < ec->nodes) + return GF_EVENT_MAXVAL; + + return GF_EVENT_CHILD_UP; + } else { + down_count = ec->xl_notify_count - ec->xl_up_count; + if (down_count > ec->redundancy) + return GF_EVENT_CHILD_DOWN; + } - return GF_EVENT_MAXVAL; + return GF_EVENT_MAXVAL; } void -ec_up (xlator_t *this, ec_t *ec) +ec_up(xlator_t *this, ec_t *ec) { - if (ec->timer != NULL) { - gf_timer_call_cancel (this->ctx, ec->timer); - ec->timer = NULL; - } + if (ec->timer != NULL) { + gf_timer_call_cancel(this->ctx, ec->timer); + ec->timer = NULL; + } - ec->up = 1; - gf_msg (this->name, GF_LOG_INFO, 0, EC_MSG_EC_UP, "Going UP"); + ec->up = 1; + gf_msg(this->name, GF_LOG_INFO, 0, EC_MSG_EC_UP, "Going UP"); - gf_event (EVENT_EC_MIN_BRICKS_UP, "subvol=%s", this->name); + gf_event(EVENT_EC_MIN_BRICKS_UP, "subvol=%s", this->name); } void -ec_down (xlator_t *this, ec_t *ec) +ec_down(xlator_t *this, ec_t *ec) { - if (ec->timer != NULL) { - gf_timer_call_cancel(this->ctx, ec->timer); - ec->timer = NULL; - } + if (ec->timer != NULL) { + gf_timer_call_cancel(this->ctx, ec->timer); + ec->timer = NULL; + } - ec->up = 0; - gf_msg (this->name, GF_LOG_INFO, 0, EC_MSG_EC_DOWN, "Going DOWN"); + ec->up = 0; + gf_msg(this->name, GF_LOG_INFO, 0, EC_MSG_EC_DOWN, "Going DOWN"); - gf_event (EVENT_EC_MIN_BRICKS_NOT_UP, "subvol=%s", this->name); + gf_event(EVENT_EC_MIN_BRICKS_NOT_UP, "subvol=%s", this->name); } void -ec_notify_cbk (void *data) +ec_notify_cbk(void *data) { - ec_t *ec = data; - glusterfs_event_t event = GF_EVENT_MAXVAL; - gf_boolean_t propagate = _gf_false; + ec_t *ec = data; + glusterfs_event_t event = GF_EVENT_MAXVAL; + gf_boolean_t propagate = _gf_false; - LOCK(&ec->lock); - { - if (!ec->timer) { - /* - * Either child_up/child_down is already sent to parent - * This is a spurious wake up. - */ - goto unlock; - } - - gf_timer_call_cancel (ec->xl->ctx, ec->timer); - ec->timer = NULL; - - /* The timeout has expired, so any subvolume that has not - * already reported its state, will be considered to be down. - * We mark as if all bricks had reported. */ - ec->xl_notify = (1ULL << ec->nodes) - 1ULL; - ec->xl_notify_count = ec->nodes; - - /* Since we have marked all subvolumes as notified, it's - * guaranteed that ec_get_event_from_state() will return - * CHILD_UP or CHILD_DOWN, but not MAXVAL. */ - event = ec_get_event_from_state (ec); - if (event == GF_EVENT_CHILD_UP) { - /* We are ready to bring the volume up. If there are - * still bricks DOWN, they will be healed when they - * come up. */ - ec_up (ec->xl, ec); - } - - propagate = _gf_true; + LOCK(&ec->lock); + { + if (!ec->timer) { + /* + * Either child_up/child_down is already sent to parent + * This is a spurious wake up. + */ + goto unlock; + } + + gf_timer_call_cancel(ec->xl->ctx, ec->timer); + ec->timer = NULL; + + /* The timeout has expired, so any subvolume that has not + * already reported its state, will be considered to be down. + * We mark as if all bricks had reported. */ + ec->xl_notify = (1ULL << ec->nodes) - 1ULL; + ec->xl_notify_count = ec->nodes; + + /* Since we have marked all subvolumes as notified, it's + * guaranteed that ec_get_event_from_state() will return + * CHILD_UP or CHILD_DOWN, but not MAXVAL. */ + event = ec_get_event_from_state(ec); + if (event == GF_EVENT_CHILD_UP) { + /* We are ready to bring the volume up. If there are + * still bricks DOWN, they will be healed when they + * come up. */ + ec_up(ec->xl, ec); } -unlock: - UNLOCK(&ec->lock); - if (propagate) { - if ((event == GF_EVENT_CHILD_UP) && ec->shd.iamshd) { - /* We have just brought the volume UP, so we trigger - * a self-heal check on the root directory. */ - ec_launch_replace_heal (ec); - } + propagate = _gf_true; + } +unlock: + UNLOCK(&ec->lock); - default_notify (ec->xl, event, NULL); + if (propagate) { + if ((event == GF_EVENT_CHILD_UP) && ec->shd.iamshd) { + /* We have just brought the volume UP, so we trigger + * a self-heal check on the root directory. */ + ec_launch_replace_heal(ec); } + default_notify(ec->xl, event, NULL); + } } void -ec_launch_notify_timer (xlator_t *this, ec_t *ec) -{ - struct timespec delay = {0, }; - - gf_msg_debug (this->name, 0, "Initiating child-down timer"); - delay.tv_sec = 10; - delay.tv_nsec = 0; - ec->timer = gf_timer_call_after (this->ctx, delay, ec_notify_cbk, ec); - if (ec->timer == NULL) { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_TIMER_CREATE_FAIL, "Cannot create timer " - "for delayed initialization"); - } +ec_launch_notify_timer(xlator_t *this, ec_t *ec) +{ + struct timespec delay = { + 0, + }; + + gf_msg_debug(this->name, 0, "Initiating child-down timer"); + delay.tv_sec = 10; + delay.tv_nsec = 0; + ec->timer = gf_timer_call_after(this->ctx, delay, ec_notify_cbk, ec); + if (ec->timer == NULL) { + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_TIMER_CREATE_FAIL, + "Cannot create timer " + "for delayed initialization"); + } } gf_boolean_t ec_disable_delays(ec_t *ec) { - ec->shutdown = _gf_true; + ec->shutdown = _gf_true; - return list_empty (&ec->pending_fops); + return list_empty(&ec->pending_fops); } void ec_pending_fops_completed(ec_t *ec) { - if (ec->shutdown) { - default_notify (ec->xl, GF_EVENT_PARENT_DOWN, NULL); - } + if (ec->shutdown) { + default_notify(ec->xl, GF_EVENT_PARENT_DOWN, NULL); + } } static gf_boolean_t ec_set_up_state(ec_t *ec, uintptr_t index_mask, uintptr_t new_state) { - uintptr_t current_state = 0; + uintptr_t current_state = 0; - if ((ec->xl_notify & index_mask) == 0) { - ec->xl_notify |= index_mask; - ec->xl_notify_count++; - } - current_state = ec->xl_up & index_mask; - if (current_state != new_state) { - ec->xl_up ^= index_mask; - ec->xl_up_count += (current_state ? -1 : 1); + if ((ec->xl_notify & index_mask) == 0) { + ec->xl_notify |= index_mask; + ec->xl_notify_count++; + } + current_state = ec->xl_up & index_mask; + if (current_state != new_state) { + ec->xl_up ^= index_mask; + ec->xl_up_count += (current_state ? -1 : 1); - return _gf_true; - } + return _gf_true; + } - return _gf_false; + return _gf_false; } static gf_boolean_t ec_upcall(ec_t *ec, struct gf_upcall *upcall) { - struct gf_upcall_cache_invalidation *ci = NULL; - struct gf_upcall_inodelk_contention *lc = NULL; - inode_t *inode; + struct gf_upcall_cache_invalidation *ci = NULL; + struct gf_upcall_inodelk_contention *lc = NULL; + inode_t *inode; - switch (upcall->event_type) { + switch (upcall->event_type) { case GF_UPCALL_CACHE_INVALIDATION: - ci = upcall->data; - ci->flags |= UP_INVAL_ATTR; - return _gf_true; + ci = upcall->data; + ci->flags |= UP_INVAL_ATTR; + return _gf_true; case GF_UPCALL_INODELK_CONTENTION: - lc = upcall->data; - if (strcmp(lc->domain, ec->xl->name) != 0) { - /* The lock is not owned by EC, ignore it. */ - return _gf_true; - } - inode = inode_find(((xlator_t *)ec->xl->graph->top)->itable, - upcall->gfid); - /* If inode is not found, it means that it's already released, - * so we can ignore it. Probably it has been released and - * destroyed while the contention notification was being sent. - */ - if (inode != NULL) { - ec_lock_release(ec, inode); - inode_unref(inode); - } - - return _gf_false; + lc = upcall->data; + if (strcmp(lc->domain, ec->xl->name) != 0) { + /* The lock is not owned by EC, ignore it. */ + return _gf_true; + } + inode = inode_find(((xlator_t *)ec->xl->graph->top)->itable, + upcall->gfid); + /* If inode is not found, it means that it's already released, + * so we can ignore it. Probably it has been released and + * destroyed while the contention notification was being sent. + */ + if (inode != NULL) { + ec_lock_release(ec, inode); + inode_unref(inode); + } + + return _gf_false; default: - return _gf_true; - } + return _gf_true; + } } int32_t -ec_notify (xlator_t *this, int32_t event, void *data, void *data2) -{ - ec_t *ec = this->private; - int32_t idx = 0; - int32_t error = 0; - glusterfs_event_t old_event = GF_EVENT_MAXVAL; - dict_t *input = NULL; - dict_t *output = NULL; - gf_boolean_t propagate = _gf_true; - gf_boolean_t needs_shd_check = _gf_false; - int32_t orig_event = event; - uintptr_t mask = 0; - - gf_msg_trace (this->name, 0, "NOTIFY(%d): %p, %p", - event, data, data2); - - if (event == GF_EVENT_UPCALL) { - propagate = ec_upcall(ec, data); - goto done; +ec_notify(xlator_t *this, int32_t event, void *data, void *data2) +{ + ec_t *ec = this->private; + int32_t idx = 0; + int32_t error = 0; + glusterfs_event_t old_event = GF_EVENT_MAXVAL; + dict_t *input = NULL; + dict_t *output = NULL; + gf_boolean_t propagate = _gf_true; + gf_boolean_t needs_shd_check = _gf_false; + int32_t orig_event = event; + uintptr_t mask = 0; + + gf_msg_trace(this->name, 0, "NOTIFY(%d): %p, %p", event, data, data2); + + if (event == GF_EVENT_UPCALL) { + propagate = ec_upcall(ec, data); + goto done; + } + + if (event == GF_EVENT_TRANSLATOR_OP) { + if (!ec->up) { + error = -1; + } else { + input = data; + output = data2; + error = ec_xl_op(this, input, output); } + goto out; + } - if (event == GF_EVENT_TRANSLATOR_OP) { - if (!ec->up) { - error = -1; - } else { - input = data; - output = data2; - error = ec_xl_op (this, input, output); - } - goto out; + for (idx = 0; idx < ec->nodes; idx++) { + if (ec->xl_list[idx] == data) { + break; } + } - for (idx = 0; idx < ec->nodes; idx++) { - if (ec->xl_list[idx] == data) { - break; - } + LOCK(&ec->lock); + + if (event == GF_EVENT_PARENT_UP) { + /* + * Start a timer which sends appropriate event to parent + * xlator to prevent the 'mount' syscall from hanging. + */ + ec_launch_notify_timer(this, ec); + goto unlock; + } else if (event == GF_EVENT_PARENT_DOWN) { + /* If there aren't pending fops running after we have waken up + * them, we immediately propagate the notification. */ + propagate = ec_disable_delays(ec); + goto unlock; + } + + if (idx < ec->nodes) { /* CHILD_* events */ + old_event = ec_get_event_from_state(ec); + + mask = 1ULL << idx; + if (event == GF_EVENT_CHILD_UP) { + /* We need to trigger a selfheal if a brick changes + * to UP state. */ + needs_shd_check = ec_set_up_state(ec, mask, mask); + } else if (event == GF_EVENT_CHILD_DOWN) { + ec_set_up_state(ec, mask, 0); } - LOCK (&ec->lock); - - if (event == GF_EVENT_PARENT_UP) { - /* - * Start a timer which sends appropriate event to parent - * xlator to prevent the 'mount' syscall from hanging. - */ - ec_launch_notify_timer (this, ec); - goto unlock; - } else if (event == GF_EVENT_PARENT_DOWN) { - /* If there aren't pending fops running after we have waken up - * them, we immediately propagate the notification. */ - propagate = ec_disable_delays(ec); - goto unlock; + event = ec_get_event_from_state(ec); + + if (event == GF_EVENT_CHILD_UP) { + if (!ec->up) { + ec_up(this, ec); + } + } else { + /* If the volume is not UP, it's irrelevant if one + * brick has come up. We cannot heal anything. */ + needs_shd_check = _gf_false; + + if ((event == GF_EVENT_CHILD_DOWN) && ec->up) { + ec_down(this, ec); + } } - if (idx < ec->nodes) { /* CHILD_* events */ - old_event = ec_get_event_from_state (ec); - - mask = 1ULL << idx; - if (event == GF_EVENT_CHILD_UP) { - /* We need to trigger a selfheal if a brick changes - * to UP state. */ - needs_shd_check = ec_set_up_state(ec, mask, mask); - } else if (event == GF_EVENT_CHILD_DOWN) { - ec_set_up_state(ec, mask, 0); - } - - event = ec_get_event_from_state (ec); - - if (event == GF_EVENT_CHILD_UP) { - if (!ec->up) { - ec_up (this, ec); - } - } else { - /* If the volume is not UP, it's irrelevant if one - * brick has come up. We cannot heal anything. */ - needs_shd_check = _gf_false; - - if ((event == GF_EVENT_CHILD_DOWN) && ec->up) { - ec_down (this, ec); - } - } - - if (event != GF_EVENT_MAXVAL) { - if (event == old_event) { - if (orig_event == GF_EVENT_CHILD_UP) - event = GF_EVENT_SOME_DESCENDENT_UP; - else /* orig_event has to be GF_EVENT_CHILD_DOWN */ - event = GF_EVENT_SOME_DESCENDENT_DOWN; - } - } else { - propagate = _gf_false; - } + if (event != GF_EVENT_MAXVAL) { + if (event == old_event) { + if (orig_event == GF_EVENT_CHILD_UP) + event = GF_EVENT_SOME_DESCENDENT_UP; + else /* orig_event has to be GF_EVENT_CHILD_DOWN */ + event = GF_EVENT_SOME_DESCENDENT_DOWN; + } + } else { + propagate = _gf_false; } + } unlock: - UNLOCK (&ec->lock); + UNLOCK(&ec->lock); done: - if (propagate) { - if (needs_shd_check && ec->shd.iamshd) { - ec_launch_replace_heal (ec); - } - - error = default_notify (this, event, data); + if (propagate) { + if (needs_shd_check && ec->shd.iamshd) { + ec_launch_replace_heal(ec); } + error = default_notify(this, event, data); + } + out: - return error; + return error; } int32_t -notify (xlator_t *this, int32_t event, void *data, ...) +notify(xlator_t *this, int32_t event, void *data, ...) { - int ret = -1; - va_list ap; - void *data2 = NULL; + int ret = -1; + va_list ap; + void *data2 = NULL; - va_start (ap, data); - data2 = va_arg (ap, dict_t*); - va_end (ap); - ret = ec_notify (this, event, data, data2); + va_start(ap, data); + data2 = va_arg(ap, dict_t *); + va_end(ap); + ret = ec_notify(this, event, data, data2); - return ret; + return ret; } static void ec_statistics_init(ec_t *ec) { - GF_ATOMIC_INIT(ec->stats.stripe_cache.hits, 0); - GF_ATOMIC_INIT(ec->stats.stripe_cache.misses, 0); - GF_ATOMIC_INIT(ec->stats.stripe_cache.updates, 0); - GF_ATOMIC_INIT(ec->stats.stripe_cache.invals, 0); - GF_ATOMIC_INIT(ec->stats.stripe_cache.evicts, 0); - GF_ATOMIC_INIT(ec->stats.stripe_cache.allocs, 0); - GF_ATOMIC_INIT(ec->stats.stripe_cache.errors, 0); + GF_ATOMIC_INIT(ec->stats.stripe_cache.hits, 0); + GF_ATOMIC_INIT(ec->stats.stripe_cache.misses, 0); + GF_ATOMIC_INIT(ec->stats.stripe_cache.updates, 0); + GF_ATOMIC_INIT(ec->stats.stripe_cache.invals, 0); + GF_ATOMIC_INIT(ec->stats.stripe_cache.evicts, 0); + GF_ATOMIC_INIT(ec->stats.stripe_cache.allocs, 0); + GF_ATOMIC_INIT(ec->stats.stripe_cache.errors, 0); } int32_t -init (xlator_t *this) +init(xlator_t *this) { - ec_t *ec = NULL; + ec_t *ec = NULL; char *read_policy = NULL; - char *extensions = NULL; + char *extensions = NULL; int32_t err; - if (this->parents == NULL) - { - gf_msg (this->name, GF_LOG_WARNING, 0, - EC_MSG_NO_PARENTS, "Volume does not have parents."); + if (this->parents == NULL) { + gf_msg(this->name, GF_LOG_WARNING, 0, EC_MSG_NO_PARENTS, + "Volume does not have parents."); } ec = GF_MALLOC(sizeof(*ec), ec_mt_ec_t); - if (ec == NULL) - { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, "Failed to allocate private memory."); + if (ec == NULL) { + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to allocate private memory."); return -1; } @@ -680,26 +664,23 @@ init (xlator_t *this) ec->cbk_pool = mem_pool_new(ec_cbk_data_t, 4096); ec->lock_pool = mem_pool_new(ec_lock_t, 1024); if ((ec->fop_pool == NULL) || (ec->cbk_pool == NULL) || - (ec->lock_pool == NULL)) - { - gf_msg (this->name, GF_LOG_ERROR, ENOMEM, - EC_MSG_NO_MEMORY, "Failed to create memory pools."); + (ec->lock_pool == NULL)) { + gf_msg(this->name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY, + "Failed to create memory pools."); goto failed; } - if (ec_prepare_childs(this) != 0) - { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_XLATOR_INIT_FAIL, "Failed to initialize xlator"); + if (ec_prepare_childs(this) != 0) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_XLATOR_INIT_FAIL, + "Failed to initialize xlator"); goto failed; } - if (ec_parse_options(this) != 0) - { - gf_msg (this->name, GF_LOG_ERROR, EINVAL, - EC_MSG_XLATOR_PARSE_OPT_FAIL, "Failed to parse xlator options"); + if (ec_parse_options(this) != 0) { + gf_msg(this->name, GF_LOG_ERROR, EINVAL, EC_MSG_XLATOR_PARSE_OPT_FAIL, + "Failed to parse xlator options"); goto failed; } @@ -709,58 +690,59 @@ init (xlator_t *this) err = ec_method_init(this, &ec->matrix, ec->fragments, ec->nodes, ec->nodes * 2, extensions); if (err != 0) { - gf_msg (this->name, GF_LOG_ERROR, -err, EC_MSG_MATRIX_FAILED, - "Failed to initialize matrix management"); + gf_msg(this->name, GF_LOG_ERROR, -err, EC_MSG_MATRIX_FAILED, + "Failed to initialize matrix management"); goto failed; } - GF_OPTION_INIT ("self-heal-daemon", ec->shd.enabled, bool, failed); - GF_OPTION_INIT ("iam-self-heal-daemon", ec->shd.iamshd, bool, failed); - GF_OPTION_INIT ("eager-lock", ec->eager_lock, bool, failed); - GF_OPTION_INIT ("other-eager-lock", ec->other_eager_lock, bool, failed); - GF_OPTION_INIT ("eager-lock-timeout", ec->eager_lock_timeout, uint32, - failed); - GF_OPTION_INIT ("other-eager-lock-timeout", ec->other_eager_lock_timeout, - uint32, failed); - GF_OPTION_INIT ("background-heals", ec->background_heals, uint32, failed); - GF_OPTION_INIT ("heal-wait-qlength", ec->heal_wait_qlen, uint32, failed); - GF_OPTION_INIT ("self-heal-window-size", ec->self_heal_window_size, uint32, - failed); - ec_configure_background_heal_opts (ec, ec->background_heals, - ec->heal_wait_qlen); - GF_OPTION_INIT ("read-policy", read_policy, str, failed); - if (ec_assign_read_policy (ec, read_policy)) - goto failed; - - GF_OPTION_INIT ("shd-max-threads", ec->shd.max_threads, uint32, failed); - GF_OPTION_INIT ("shd-wait-qlength", ec->shd.wait_qlength, uint32, failed); - GF_OPTION_INIT ("optimistic-change-log", ec->optimistic_changelog, bool, failed); - GF_OPTION_INIT ("parallel-writes", ec->parallel_writes, bool, failed); - GF_OPTION_INIT ("stripe-cache", ec->stripe_cache, uint32, failed); - - this->itable = inode_table_new (EC_SHD_INODE_LRU_LIMIT, this); + GF_OPTION_INIT("self-heal-daemon", ec->shd.enabled, bool, failed); + GF_OPTION_INIT("iam-self-heal-daemon", ec->shd.iamshd, bool, failed); + GF_OPTION_INIT("eager-lock", ec->eager_lock, bool, failed); + GF_OPTION_INIT("other-eager-lock", ec->other_eager_lock, bool, failed); + GF_OPTION_INIT("eager-lock-timeout", ec->eager_lock_timeout, uint32, + failed); + GF_OPTION_INIT("other-eager-lock-timeout", ec->other_eager_lock_timeout, + uint32, failed); + GF_OPTION_INIT("background-heals", ec->background_heals, uint32, failed); + GF_OPTION_INIT("heal-wait-qlength", ec->heal_wait_qlen, uint32, failed); + GF_OPTION_INIT("self-heal-window-size", ec->self_heal_window_size, uint32, + failed); + ec_configure_background_heal_opts(ec, ec->background_heals, + ec->heal_wait_qlen); + GF_OPTION_INIT("read-policy", read_policy, str, failed); + if (ec_assign_read_policy(ec, read_policy)) + goto failed; + + GF_OPTION_INIT("shd-max-threads", ec->shd.max_threads, uint32, failed); + GF_OPTION_INIT("shd-wait-qlength", ec->shd.wait_qlength, uint32, failed); + GF_OPTION_INIT("optimistic-change-log", ec->optimistic_changelog, bool, + failed); + GF_OPTION_INIT("parallel-writes", ec->parallel_writes, bool, failed); + GF_OPTION_INIT("stripe-cache", ec->stripe_cache, uint32, failed); + + this->itable = inode_table_new(EC_SHD_INODE_LRU_LIMIT, this); if (!this->itable) - goto failed; + goto failed; if (ec->shd.iamshd) - ec_selfheal_daemon_init (this); - gf_msg_debug (this->name, 0, "Disperse translator initialized."); + ec_selfheal_daemon_init(this); + gf_msg_debug(this->name, 0, "Disperse translator initialized."); - ec->leaf_to_subvolid = dict_new (); + ec->leaf_to_subvolid = dict_new(); if (!ec->leaf_to_subvolid) - goto failed; - if (glusterfs_reachable_leaves (this, ec->leaf_to_subvolid)) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_SUBVOL_BUILD_FAIL, "Failed to build subvol " - "dictionary"); + goto failed; + if (glusterfs_reachable_leaves(this, ec->leaf_to_subvolid)) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_SUBVOL_BUILD_FAIL, + "Failed to build subvol " + "dictionary"); goto failed; } - if (ec_subvol_to_subvol_id_transform (ec, ec->leaf_to_subvolid) < 0) { - gf_msg (this->name, GF_LOG_ERROR, 0, - EC_MSG_SUBVOL_ID_DICT_SET_FAIL, "Failed to build subvol-id " - "dictionary"); + if (ec_subvol_to_subvol_id_transform(ec, ec->leaf_to_subvolid) < 0) { + gf_msg(this->name, GF_LOG_ERROR, 0, EC_MSG_SUBVOL_ID_DICT_SET_FAIL, + "Failed to build subvol-id " + "dictionary"); goto failed; } @@ -774,13 +756,15 @@ failed: return -1; } -void fini(xlator_t * this) +void +fini(xlator_t *this) { __ec_destroy_private(this); } -int32_t ec_gf_access(call_frame_t * frame, xlator_t * this, loc_t * loc, - int32_t mask, dict_t * xdata) +int32_t +ec_gf_access(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask, + dict_t *xdata) { ec_access(frame, this, -1, EC_MINIMUM_ONE, default_access_cbk, NULL, loc, mask, xdata); @@ -788,9 +772,9 @@ int32_t ec_gf_access(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_create(call_frame_t * frame, xlator_t * this, loc_t * loc, - int32_t flags, mode_t mode, mode_t umask, fd_t * fd, - dict_t * xdata) +int32_t +ec_gf_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags, + mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata) { ec_create(frame, this, -1, EC_MINIMUM_MIN, default_create_cbk, NULL, loc, flags, mode, umask, fd, xdata); @@ -798,53 +782,56 @@ int32_t ec_gf_create(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_discard(call_frame_t * frame, xlator_t * this, fd_t * fd, - off_t offset, size_t len, dict_t * xdata) +int32_t +ec_gf_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, + size_t len, dict_t *xdata) { - ec_discard(frame, this, -1, EC_MINIMUM_MIN, default_discard_cbk, - NULL, fd, offset, len, xdata); + ec_discard(frame, this, -1, EC_MINIMUM_MIN, default_discard_cbk, NULL, fd, + offset, len, xdata); return 0; } -int32_t ec_gf_entrylk(call_frame_t * frame, xlator_t * this, - const char * volume, loc_t * loc, const char * basename, - entrylk_cmd cmd, entrylk_type type, dict_t * xdata) +int32_t +ec_gf_entrylk(call_frame_t *frame, xlator_t *this, const char *volume, + loc_t *loc, const char *basename, entrylk_cmd cmd, + entrylk_type type, dict_t *xdata) { int32_t minimum = EC_MINIMUM_ALL; if (cmd == ENTRYLK_UNLOCK) - minimum = EC_MINIMUM_ONE; - ec_entrylk(frame, this, -1, minimum, default_entrylk_cbk, NULL, - volume, loc, basename, cmd, type, xdata); + minimum = EC_MINIMUM_ONE; + ec_entrylk(frame, this, -1, minimum, default_entrylk_cbk, NULL, volume, loc, + basename, cmd, type, xdata); return 0; } -int32_t ec_gf_fentrylk(call_frame_t * frame, xlator_t * this, - const char * volume, fd_t * fd, const char * basename, - entrylk_cmd cmd, entrylk_type type, dict_t * xdata) +int32_t +ec_gf_fentrylk(call_frame_t *frame, xlator_t *this, const char *volume, + fd_t *fd, const char *basename, entrylk_cmd cmd, + entrylk_type type, dict_t *xdata) { int32_t minimum = EC_MINIMUM_ALL; if (cmd == ENTRYLK_UNLOCK) - minimum = EC_MINIMUM_ONE; - ec_fentrylk(frame, this, -1, minimum, default_fentrylk_cbk, NULL, - volume, fd, basename, cmd, type, xdata); + minimum = EC_MINIMUM_ONE; + ec_fentrylk(frame, this, -1, minimum, default_fentrylk_cbk, NULL, volume, + fd, basename, cmd, type, xdata); return 0; } -int32_t ec_gf_fallocate(call_frame_t * frame, xlator_t * this, fd_t * fd, - int32_t mode, off_t offset, size_t len, - dict_t * xdata) +int32_t +ec_gf_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode, + off_t offset, size_t len, dict_t *xdata) { - ec_fallocate(frame, this, -1, EC_MINIMUM_MIN, default_fallocate_cbk, - NULL, fd, mode, offset, len, xdata); + ec_fallocate(frame, this, -1, EC_MINIMUM_MIN, default_fallocate_cbk, NULL, + fd, mode, offset, len, xdata); return 0; } -int32_t ec_gf_flush(call_frame_t * frame, xlator_t * this, fd_t * fd, - dict_t * xdata) +int32_t +ec_gf_flush(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata) { ec_flush(frame, this, -1, EC_MINIMUM_MIN, default_flush_cbk, NULL, fd, xdata); @@ -852,8 +839,9 @@ int32_t ec_gf_flush(call_frame_t * frame, xlator_t * this, fd_t * fd, return 0; } -int32_t ec_gf_fsync(call_frame_t * frame, xlator_t * this, fd_t * fd, - int32_t datasync, dict_t * xdata) +int32_t +ec_gf_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync, + dict_t *xdata) { ec_fsync(frame, this, -1, EC_MINIMUM_MIN, default_fsync_cbk, NULL, fd, datasync, xdata); @@ -861,114 +849,114 @@ int32_t ec_gf_fsync(call_frame_t * frame, xlator_t * this, fd_t * fd, return 0; } -int32_t ec_gf_fsyncdir(call_frame_t * frame, xlator_t * this, fd_t * fd, - int32_t datasync, dict_t * xdata) +int32_t +ec_gf_fsyncdir(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync, + dict_t *xdata) { - ec_fsyncdir(frame, this, -1, EC_MINIMUM_MIN, default_fsyncdir_cbk, NULL, - fd, datasync, xdata); + ec_fsyncdir(frame, this, -1, EC_MINIMUM_MIN, default_fsyncdir_cbk, NULL, fd, + datasync, xdata); return 0; } int -ec_marker_populate_args (call_frame_t *frame, int type, int *gauge, - xlator_t **subvols) +ec_marker_populate_args(call_frame_t *frame, int type, int *gauge, + xlator_t **subvols) { - xlator_t *this = frame->this; - ec_t *ec = this->private; + xlator_t *this = frame->this; + ec_t *ec = this->private; - memcpy (subvols, ec->xl_list, sizeof (*subvols) * ec->nodes); + memcpy(subvols, ec->xl_list, sizeof(*subvols) * ec->nodes); - if (type == MARKER_XTIME_TYPE) { - /*Don't error out on ENOENT/ENOTCONN */ - gauge[MCNT_NOTFOUND] = 0; - gauge[MCNT_ENOTCONN] = 0; - } + if (type == MARKER_XTIME_TYPE) { + /*Don't error out on ENOENT/ENOTCONN */ + gauge[MCNT_NOTFOUND] = 0; + gauge[MCNT_ENOTCONN] = 0; + } - return ec->nodes; + return ec->nodes; } int32_t -ec_handle_heal_commands (call_frame_t *frame, xlator_t *this, loc_t *loc, - const char *name, dict_t *xdata) +ec_handle_heal_commands(call_frame_t *frame, xlator_t *this, loc_t *loc, + const char *name, dict_t *xdata) { - dict_t *dict_rsp = NULL; - int op_ret = -1; - int op_errno = ENOMEM; + dict_t *dict_rsp = NULL; + int op_ret = -1; + int op_errno = ENOMEM; - if (!name || strcmp (name, GF_HEAL_INFO)) - return -1; + if (!name || strcmp(name, GF_HEAL_INFO)) + return -1; - op_errno = -ec_get_heal_info (this, loc, &dict_rsp); - if (op_errno <= 0) { - op_errno = op_ret = 0; - } + op_errno = -ec_get_heal_info(this, loc, &dict_rsp); + if (op_errno <= 0) { + op_errno = op_ret = 0; + } - STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, dict_rsp, NULL); - if (dict_rsp) - dict_unref (dict_rsp); - return 0; + STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, dict_rsp, NULL); + if (dict_rsp) + dict_unref(dict_rsp); + return 0; } int32_t -ec_gf_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, - const char *name, dict_t *xdata) +ec_gf_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, + const char *name, dict_t *xdata) { - int error = 0; - ec_t *ec = this->private; - int32_t minimum = EC_MINIMUM_ONE; + int error = 0; + ec_t *ec = this->private; + int32_t minimum = EC_MINIMUM_ONE; - if (name && strcmp (name, EC_XATTR_HEAL) != 0) { - EC_INTERNAL_XATTR_OR_GOTO(name, NULL, error, out); - } + if (name && strcmp(name, EC_XATTR_HEAL) != 0) { + EC_INTERNAL_XATTR_OR_GOTO(name, NULL, error, out); + } - if (ec_handle_heal_commands (frame, this, loc, name, xdata) == 0) - return 0; + if (ec_handle_heal_commands(frame, this, loc, name, xdata) == 0) + return 0; - if (cluster_handle_marker_getxattr (frame, loc, name, ec->vol_uuid, - NULL, ec_marker_populate_args) == 0) - return 0; + if (cluster_handle_marker_getxattr(frame, loc, name, ec->vol_uuid, NULL, + ec_marker_populate_args) == 0) + return 0; - if (name && - ((fnmatch (GF_XATTR_STIME_PATTERN, name, 0) == 0) || - XATTR_IS_NODE_UUID(name) || XATTR_IS_NODE_UUID_LIST(name))) { - minimum = EC_MINIMUM_ALL; - } + if (name && ((fnmatch(GF_XATTR_STIME_PATTERN, name, 0) == 0) || + XATTR_IS_NODE_UUID(name) || XATTR_IS_NODE_UUID_LIST(name))) { + minimum = EC_MINIMUM_ALL; + } - ec_getxattr (frame, this, -1, minimum, default_getxattr_cbk, - NULL, loc, name, xdata); + ec_getxattr(frame, this, -1, minimum, default_getxattr_cbk, NULL, loc, name, + xdata); - return 0; + return 0; out: - error = ENODATA; - STACK_UNWIND_STRICT (getxattr, frame, -1, error, NULL, NULL); - return 0; + error = ENODATA; + STACK_UNWIND_STRICT(getxattr, frame, -1, error, NULL, NULL); + return 0; } int32_t -ec_gf_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, - const char *name, dict_t *xdata) +ec_gf_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name, + dict_t *xdata) { - int error = 0; + int error = 0; - EC_INTERNAL_XATTR_OR_GOTO(name, NULL, error, out); + EC_INTERNAL_XATTR_OR_GOTO(name, NULL, error, out); - ec_fgetxattr (frame, this, -1, EC_MINIMUM_ONE, default_fgetxattr_cbk, - NULL, fd, name, xdata); - return 0; + ec_fgetxattr(frame, this, -1, EC_MINIMUM_ONE, default_fgetxattr_cbk, NULL, + fd, name, xdata); + return 0; out: - error = ENODATA; - STACK_UNWIND_STRICT (fgetxattr, frame, -1, error, NULL, NULL); - return 0; + error = ENODATA; + STACK_UNWIND_STRICT(fgetxattr, frame, -1, error, NULL, NULL); + return 0; } -int32_t ec_gf_inodelk(call_frame_t * frame, xlator_t * this, - const char * volume, loc_t * loc, int32_t cmd, - struct gf_flock * flock, dict_t * xdata) +int32_t +ec_gf_inodelk(call_frame_t *frame, xlator_t *this, const char *volume, + loc_t *loc, int32_t cmd, struct gf_flock *flock, dict_t *xdata) { int32_t minimum = EC_MINIMUM_ALL; if (flock->l_type == F_UNLCK) - minimum = EC_MINIMUM_ONE; + minimum = EC_MINIMUM_ONE; ec_inodelk(frame, this, &frame->root->lk_owner, -1, minimum, default_inodelk_cbk, NULL, volume, loc, cmd, flock, xdata); @@ -976,21 +964,22 @@ int32_t ec_gf_inodelk(call_frame_t * frame, xlator_t * this, return 0; } -int32_t ec_gf_finodelk(call_frame_t * frame, xlator_t * this, - const char * volume, fd_t * fd, int32_t cmd, - struct gf_flock * flock, dict_t * xdata) +int32_t +ec_gf_finodelk(call_frame_t *frame, xlator_t *this, const char *volume, + fd_t *fd, int32_t cmd, struct gf_flock *flock, dict_t *xdata) { int32_t minimum = EC_MINIMUM_ALL; if (flock->l_type == F_UNLCK) - minimum = EC_MINIMUM_ONE; + minimum = EC_MINIMUM_ONE; ec_finodelk(frame, this, &frame->root->lk_owner, -1, minimum, default_finodelk_cbk, NULL, volume, fd, cmd, flock, xdata); return 0; } -int32_t ec_gf_link(call_frame_t * frame, xlator_t * this, loc_t * oldloc, - loc_t * newloc, dict_t * xdata) +int32_t +ec_gf_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc, + dict_t *xdata) { ec_link(frame, this, -1, EC_MINIMUM_MIN, default_link_cbk, NULL, oldloc, newloc, xdata); @@ -998,20 +987,21 @@ int32_t ec_gf_link(call_frame_t * frame, xlator_t * this, loc_t * oldloc, return 0; } -int32_t ec_gf_lk(call_frame_t * frame, xlator_t * this, fd_t * fd, - int32_t cmd, struct gf_flock * flock, dict_t * xdata) +int32_t +ec_gf_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd, + struct gf_flock *flock, dict_t *xdata) { int32_t minimum = EC_MINIMUM_ALL; if (flock->l_type == F_UNLCK) - minimum = EC_MINIMUM_ONE; - ec_lk(frame, this, -1, minimum, default_lk_cbk, NULL, fd, cmd, - flock, xdata); + minimum = EC_MINIMUM_ONE; + ec_lk(frame, this, -1, minimum, default_lk_cbk, NULL, fd, cmd, flock, + xdata); return 0; } -int32_t ec_gf_lookup(call_frame_t * frame, xlator_t * this, loc_t * loc, - dict_t * xdata) +int32_t +ec_gf_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata) { ec_lookup(frame, this, -1, EC_MINIMUM_MIN, default_lookup_cbk, NULL, loc, xdata); @@ -1019,8 +1009,9 @@ int32_t ec_gf_lookup(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_mkdir(call_frame_t * frame, xlator_t * this, loc_t * loc, - mode_t mode, mode_t umask, dict_t * xdata) +int32_t +ec_gf_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode, + mode_t umask, dict_t *xdata) { ec_mkdir(frame, this, -1, EC_MINIMUM_MIN, default_mkdir_cbk, NULL, loc, mode, umask, xdata); @@ -1028,8 +1019,9 @@ int32_t ec_gf_mkdir(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_mknod(call_frame_t * frame, xlator_t * this, loc_t * loc, - mode_t mode, dev_t rdev, mode_t umask, dict_t * xdata) +int32_t +ec_gf_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode, + dev_t rdev, mode_t umask, dict_t *xdata) { ec_mknod(frame, this, -1, EC_MINIMUM_MIN, default_mknod_cbk, NULL, loc, mode, rdev, umask, xdata); @@ -1037,17 +1029,19 @@ int32_t ec_gf_mknod(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_open(call_frame_t * frame, xlator_t * this, loc_t * loc, - int32_t flags, fd_t * fd, dict_t * xdata) +int32_t +ec_gf_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags, + fd_t *fd, dict_t *xdata) { - ec_open(frame, this, -1, EC_MINIMUM_MIN, default_open_cbk, NULL, loc, - flags, fd, xdata); + ec_open(frame, this, -1, EC_MINIMUM_MIN, default_open_cbk, NULL, loc, flags, + fd, xdata); return 0; } -int32_t ec_gf_opendir(call_frame_t * frame, xlator_t * this, loc_t * loc, - fd_t * fd, dict_t * xdata) +int32_t +ec_gf_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd, + dict_t *xdata) { ec_opendir(frame, this, -1, EC_MINIMUM_MIN, default_opendir_cbk, NULL, loc, fd, xdata); @@ -1055,8 +1049,9 @@ int32_t ec_gf_opendir(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_readdir(call_frame_t * frame, xlator_t * this, fd_t * fd, - size_t size, off_t offset, dict_t * xdata) +int32_t +ec_gf_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, + off_t offset, dict_t *xdata) { ec_readdir(frame, this, -1, EC_MINIMUM_ONE, default_readdir_cbk, NULL, fd, size, offset, xdata); @@ -1064,17 +1059,19 @@ int32_t ec_gf_readdir(call_frame_t * frame, xlator_t * this, fd_t * fd, return 0; } -int32_t ec_gf_readdirp(call_frame_t * frame, xlator_t * this, fd_t * fd, - size_t size, off_t offset, dict_t * xdata) +int32_t +ec_gf_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, + off_t offset, dict_t *xdata) { - ec_readdirp(frame, this, -1, EC_MINIMUM_ONE, default_readdirp_cbk, NULL, - fd, size, offset, xdata); + ec_readdirp(frame, this, -1, EC_MINIMUM_ONE, default_readdirp_cbk, NULL, fd, + size, offset, xdata); return 0; } -int32_t ec_gf_readlink(call_frame_t * frame, xlator_t * this, loc_t * loc, - size_t size, dict_t * xdata) +int32_t +ec_gf_readlink(call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size, + dict_t *xdata) { ec_readlink(frame, this, -1, EC_MINIMUM_ONE, default_readlink_cbk, NULL, loc, size, xdata); @@ -1082,60 +1079,63 @@ int32_t ec_gf_readlink(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_readv(call_frame_t * frame, xlator_t * this, fd_t * fd, - size_t size, off_t offset, uint32_t flags, dict_t * xdata) +int32_t +ec_gf_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, + off_t offset, uint32_t flags, dict_t *xdata) { - ec_readv(frame, this, -1, EC_MINIMUM_MIN, default_readv_cbk, NULL, fd, - size, offset, flags, xdata); + ec_readv(frame, this, -1, EC_MINIMUM_MIN, default_readv_cbk, NULL, fd, size, + offset, flags, xdata); return 0; } int32_t -ec_gf_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc, - const char *name, dict_t *xdata) +ec_gf_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc, + const char *name, dict_t *xdata) { - int error = 0; + int error = 0; - EC_INTERNAL_XATTR_OR_GOTO (name, xdata, error, out); + EC_INTERNAL_XATTR_OR_GOTO(name, xdata, error, out); - ec_removexattr (frame, this, -1, EC_MINIMUM_MIN, - default_removexattr_cbk, NULL, loc, name, xdata); + ec_removexattr(frame, this, -1, EC_MINIMUM_MIN, default_removexattr_cbk, + NULL, loc, name, xdata); - return 0; + return 0; out: - STACK_UNWIND_STRICT (removexattr, frame, -1, error, NULL); - return 0; + STACK_UNWIND_STRICT(removexattr, frame, -1, error, NULL); + return 0; } int32_t -ec_gf_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd, - const char *name, dict_t *xdata) +ec_gf_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd, + const char *name, dict_t *xdata) { - int error = 0; + int error = 0; - EC_INTERNAL_XATTR_OR_GOTO (name, xdata, error, out); + EC_INTERNAL_XATTR_OR_GOTO(name, xdata, error, out); - ec_fremovexattr (frame, this, -1, EC_MINIMUM_MIN, - default_fremovexattr_cbk, NULL, fd, name, xdata); + ec_fremovexattr(frame, this, -1, EC_MINIMUM_MIN, default_fremovexattr_cbk, + NULL, fd, name, xdata); - return 0; + return 0; out: - STACK_UNWIND_STRICT (fremovexattr, frame, -1, error, NULL); - return 0; + STACK_UNWIND_STRICT(fremovexattr, frame, -1, error, NULL); + return 0; } -int32_t ec_gf_rename(call_frame_t * frame, xlator_t * this, loc_t * oldloc, - loc_t * newloc, dict_t * xdata) +int32_t +ec_gf_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc, + dict_t *xdata) { - ec_rename(frame, this, -1, EC_MINIMUM_MIN, default_rename_cbk, NULL, - oldloc, newloc, xdata); + ec_rename(frame, this, -1, EC_MINIMUM_MIN, default_rename_cbk, NULL, oldloc, + newloc, xdata); return 0; } -int32_t ec_gf_rmdir(call_frame_t * frame, xlator_t * this, loc_t * loc, - int xflags, dict_t * xdata) +int32_t +ec_gf_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags, + dict_t *xdata) { ec_rmdir(frame, this, -1, EC_MINIMUM_MIN, default_rmdir_cbk, NULL, loc, xflags, xdata); @@ -1143,8 +1143,9 @@ int32_t ec_gf_rmdir(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_setattr(call_frame_t * frame, xlator_t * this, loc_t * loc, - struct iatt * stbuf, int32_t valid, dict_t * xdata) +int32_t +ec_gf_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc, + struct iatt *stbuf, int32_t valid, dict_t *xdata) { ec_setattr(frame, this, -1, EC_MINIMUM_MIN, default_setattr_cbk, NULL, loc, stbuf, valid, xdata); @@ -1152,51 +1153,52 @@ int32_t ec_gf_setattr(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_fsetattr(call_frame_t * frame, xlator_t * this, fd_t * fd, - struct iatt * stbuf, int32_t valid, dict_t * xdata) +int32_t +ec_gf_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd, + struct iatt *stbuf, int32_t valid, dict_t *xdata) { - ec_fsetattr(frame, this, -1, EC_MINIMUM_MIN, default_fsetattr_cbk, NULL, - fd, stbuf, valid, xdata); + ec_fsetattr(frame, this, -1, EC_MINIMUM_MIN, default_fsetattr_cbk, NULL, fd, + stbuf, valid, xdata); return 0; } int32_t -ec_gf_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, - dict_t *dict, int32_t flags, dict_t *xdata) +ec_gf_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict, + int32_t flags, dict_t *xdata) { - int error = 0; + int error = 0; - EC_INTERNAL_XATTR_OR_GOTO ("", dict, error, out); + EC_INTERNAL_XATTR_OR_GOTO("", dict, error, out); - ec_setxattr (frame, this, -1, EC_MINIMUM_MIN, default_setxattr_cbk, - NULL, loc, dict, flags, xdata); + ec_setxattr(frame, this, -1, EC_MINIMUM_MIN, default_setxattr_cbk, NULL, + loc, dict, flags, xdata); - return 0; + return 0; out: - STACK_UNWIND_STRICT (setxattr, frame, -1, error, NULL); - return 0; + STACK_UNWIND_STRICT(setxattr, frame, -1, error, NULL); + return 0; } int32_t -ec_gf_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, - dict_t *dict, int32_t flags, dict_t *xdata) +ec_gf_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict, + int32_t flags, dict_t *xdata) { - int error = 0; + int error = 0; - EC_INTERNAL_XATTR_OR_GOTO ("", dict, error, out); + EC_INTERNAL_XATTR_OR_GOTO("", dict, error, out); - ec_fsetxattr (frame, this, -1, EC_MINIMUM_MIN, default_fsetxattr_cbk, - NULL, fd, dict, flags, xdata); + ec_fsetxattr(frame, this, -1, EC_MINIMUM_MIN, default_fsetxattr_cbk, NULL, + fd, dict, flags, xdata); - return 0; + return 0; out: - STACK_UNWIND_STRICT (fsetxattr, frame, -1, error, NULL); - return 0; + STACK_UNWIND_STRICT(fsetxattr, frame, -1, error, NULL); + return 0; } -int32_t ec_gf_stat(call_frame_t * frame, xlator_t * this, loc_t * loc, - dict_t * xdata) +int32_t +ec_gf_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata) { ec_stat(frame, this, -1, EC_MINIMUM_MIN, default_stat_cbk, NULL, loc, xdata); @@ -1204,8 +1206,8 @@ int32_t ec_gf_stat(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_fstat(call_frame_t * frame, xlator_t * this, fd_t * fd, - dict_t * xdata) +int32_t +ec_gf_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata) { ec_fstat(frame, this, -1, EC_MINIMUM_MIN, default_fstat_cbk, NULL, fd, xdata); @@ -1213,8 +1215,8 @@ int32_t ec_gf_fstat(call_frame_t * frame, xlator_t * this, fd_t * fd, return 0; } -int32_t ec_gf_statfs(call_frame_t * frame, xlator_t * this, loc_t * loc, - dict_t * xdata) +int32_t +ec_gf_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata) { ec_statfs(frame, this, -1, EC_MINIMUM_MIN, default_statfs_cbk, NULL, loc, xdata); @@ -1222,9 +1224,9 @@ int32_t ec_gf_statfs(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_symlink(call_frame_t * frame, xlator_t * this, - const char * linkname, loc_t * loc, mode_t umask, - dict_t * xdata) +int32_t +ec_gf_symlink(call_frame_t *frame, xlator_t *this, const char *linkname, + loc_t *loc, mode_t umask, dict_t *xdata) { ec_symlink(frame, this, -1, EC_MINIMUM_MIN, default_symlink_cbk, NULL, linkname, loc, umask, xdata); @@ -1232,8 +1234,9 @@ int32_t ec_gf_symlink(call_frame_t * frame, xlator_t * this, return 0; } -int32_t ec_gf_truncate(call_frame_t * frame, xlator_t * this, loc_t * loc, - off_t offset, dict_t * xdata) +int32_t +ec_gf_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset, + dict_t *xdata) { ec_truncate(frame, this, -1, EC_MINIMUM_MIN, default_truncate_cbk, NULL, loc, offset, xdata); @@ -1241,8 +1244,9 @@ int32_t ec_gf_truncate(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_ftruncate(call_frame_t * frame, xlator_t * this, fd_t * fd, - off_t offset, dict_t * xdata) +int32_t +ec_gf_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, + dict_t *xdata) { ec_ftruncate(frame, this, -1, EC_MINIMUM_MIN, default_ftruncate_cbk, NULL, fd, offset, xdata); @@ -1250,8 +1254,9 @@ int32_t ec_gf_ftruncate(call_frame_t * frame, xlator_t * this, fd_t * fd, return 0; } -int32_t ec_gf_unlink(call_frame_t * frame, xlator_t * this, loc_t * loc, - int xflags, dict_t * xdata) +int32_t +ec_gf_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags, + dict_t *xdata) { ec_unlink(frame, this, -1, EC_MINIMUM_MIN, default_unlink_cbk, NULL, loc, xflags, xdata); @@ -1259,9 +1264,10 @@ int32_t ec_gf_unlink(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_writev(call_frame_t * frame, xlator_t * this, fd_t * fd, - struct iovec * vector, int32_t count, off_t offset, - uint32_t flags, struct iobref * iobref, dict_t * xdata) +int32_t +ec_gf_writev(call_frame_t *frame, xlator_t *this, fd_t *fd, + struct iovec *vector, int32_t count, off_t offset, uint32_t flags, + struct iobref *iobref, dict_t *xdata) { ec_writev(frame, this, -1, EC_MINIMUM_MIN, default_writev_cbk, NULL, fd, vector, count, offset, flags, iobref, xdata); @@ -1269,9 +1275,9 @@ int32_t ec_gf_writev(call_frame_t * frame, xlator_t * this, fd_t * fd, return 0; } -int32_t ec_gf_xattrop(call_frame_t * frame, xlator_t * this, loc_t * loc, - gf_xattrop_flags_t optype, dict_t * xattr, - dict_t * xdata) +int32_t +ec_gf_xattrop(call_frame_t *frame, xlator_t *this, loc_t *loc, + gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata) { ec_xattrop(frame, this, -1, EC_MINIMUM_MIN, default_xattrop_cbk, NULL, loc, optype, xattr, xdata); @@ -1279,47 +1285,49 @@ int32_t ec_gf_xattrop(call_frame_t * frame, xlator_t * this, loc_t * loc, return 0; } -int32_t ec_gf_fxattrop(call_frame_t * frame, xlator_t * this, fd_t * fd, - gf_xattrop_flags_t optype, dict_t * xattr, - dict_t * xdata) +int32_t +ec_gf_fxattrop(call_frame_t *frame, xlator_t *this, fd_t *fd, + gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata) { - ec_fxattrop(frame, this, -1, EC_MINIMUM_MIN, default_fxattrop_cbk, NULL, - fd, optype, xattr, xdata); + ec_fxattrop(frame, this, -1, EC_MINIMUM_MIN, default_fxattrop_cbk, NULL, fd, + optype, xattr, xdata); return 0; } -int32_t ec_gf_zerofill(call_frame_t * frame, xlator_t * this, fd_t * fd, - off_t offset, off_t len, dict_t * xdata) +int32_t +ec_gf_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, + off_t len, dict_t *xdata) { default_zerofill_failure_cbk(frame, ENOTSUP); return 0; } -int32_t ec_gf_seek(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, - gf_seek_what_t what, dict_t *xdata) +int32_t +ec_gf_seek(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, + gf_seek_what_t what, dict_t *xdata) { - ec_seek(frame, this, -1, EC_MINIMUM_ONE, default_seek_cbk, NULL, fd, - offset, what, xdata); + ec_seek(frame, this, -1, EC_MINIMUM_ONE, default_seek_cbk, NULL, fd, offset, + what, xdata); return 0; } -int32_t ec_gf_ipc(call_frame_t *frame, xlator_t *this, int32_t op, - dict_t *xdata) +int32_t +ec_gf_ipc(call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata) { ec_ipc(frame, this, -1, EC_MINIMUM_MIN, default_ipc_cbk, NULL, op, xdata); return 0; } -int32_t ec_gf_forget(xlator_t * this, inode_t * inode) +int32_t +ec_gf_forget(xlator_t *this, inode_t *inode) { uint64_t value = 0; - ec_inode_t * ctx = NULL; + ec_inode_t *ctx = NULL; - if ((inode_ctx_del(inode, this, &value) == 0) && (value != 0)) - { + if ((inode_ctx_del(inode, this, &value) == 0) && (value != 0)) { ctx = (ec_inode_t *)(uintptr_t)value; /* We can only forget an inode if it has been unlocked, so the stripe * cache should also be empty. */ @@ -1330,38 +1338,41 @@ int32_t ec_gf_forget(xlator_t * this, inode_t * inode) return 0; } -void ec_gf_release_fd(xlator_t * this, fd_t * fd) +void +ec_gf_release_fd(xlator_t *this, fd_t *fd) { uint64_t value = 0; - ec_fd_t * ctx = NULL; + ec_fd_t *ctx = NULL; - if ((fd_ctx_del(fd, this, &value) == 0) && (value != 0)) - { + if ((fd_ctx_del(fd, this, &value) == 0) && (value != 0)) { ctx = (ec_fd_t *)(uintptr_t)value; loc_wipe(&ctx->loc); GF_FREE(ctx); } } -int32_t ec_gf_release(xlator_t * this, fd_t * fd) +int32_t +ec_gf_release(xlator_t *this, fd_t *fd) { ec_gf_release_fd(this, fd); return 0; } -int32_t ec_gf_releasedir(xlator_t * this, fd_t * fd) +int32_t +ec_gf_releasedir(xlator_t *this, fd_t *fd) { ec_gf_release_fd(this, fd); return 0; } -int32_t ec_dump_private(xlator_t *this) +int32_t +ec_dump_private(xlator_t *this) { ec_t *ec = NULL; - char key_prefix[GF_DUMP_MAX_BUF_LEN]; - char tmp[65]; + char key_prefix[GF_DUMP_MAX_BUF_LEN]; + char tmp[65]; GF_ASSERT(this); @@ -1380,7 +1391,7 @@ int32_t ec_dump_private(xlator_t *this) ec_bin(tmp, sizeof(tmp), ec->xl_up, ec->nodes)); gf_proc_dump_write("background-heals", "%d", ec->background_heals); gf_proc_dump_write("heal-wait-qlength", "%d", ec->heal_wait_qlen); - gf_proc_dump_write("self-heal-window-size", "%"PRIu32, + gf_proc_dump_write("self-heal-window-size", "%" PRIu32, ec->self_heal_window_size); gf_proc_dump_write("healers", "%d", ec->healers); gf_proc_dump_write("heal-waiters", "%d", ec->heal_waiters); @@ -1409,77 +1420,66 @@ int32_t ec_dump_private(xlator_t *this) return 0; } -struct xlator_fops fops = -{ - .lookup = ec_gf_lookup, - .stat = ec_gf_stat, - .fstat = ec_gf_fstat, - .truncate = ec_gf_truncate, - .ftruncate = ec_gf_ftruncate, - .access = ec_gf_access, - .readlink = ec_gf_readlink, - .mknod = ec_gf_mknod, - .mkdir = ec_gf_mkdir, - .unlink = ec_gf_unlink, - .rmdir = ec_gf_rmdir, - .symlink = ec_gf_symlink, - .rename = ec_gf_rename, - .link = ec_gf_link, - .create = ec_gf_create, - .open = ec_gf_open, - .readv = ec_gf_readv, - .writev = ec_gf_writev, - .flush = ec_gf_flush, - .fsync = ec_gf_fsync, - .opendir = ec_gf_opendir, - .readdir = ec_gf_readdir, - .readdirp = ec_gf_readdirp, - .fsyncdir = ec_gf_fsyncdir, - .statfs = ec_gf_statfs, - .setxattr = ec_gf_setxattr, - .getxattr = ec_gf_getxattr, - .fsetxattr = ec_gf_fsetxattr, - .fgetxattr = ec_gf_fgetxattr, - .removexattr = ec_gf_removexattr, - .fremovexattr = ec_gf_fremovexattr, - .lk = ec_gf_lk, - .inodelk = ec_gf_inodelk, - .finodelk = ec_gf_finodelk, - .entrylk = ec_gf_entrylk, - .fentrylk = ec_gf_fentrylk, - .xattrop = ec_gf_xattrop, - .fxattrop = ec_gf_fxattrop, - .setattr = ec_gf_setattr, - .fsetattr = ec_gf_fsetattr, - .fallocate = ec_gf_fallocate, - .discard = ec_gf_discard, - .zerofill = ec_gf_zerofill, - .seek = ec_gf_seek, - .ipc = ec_gf_ipc -}; - -struct xlator_cbks cbks = -{ - .forget = ec_gf_forget, - .release = ec_gf_release, - .releasedir = ec_gf_releasedir -}; - -struct xlator_dumpops dumpops = { - .priv = ec_dump_private -}; - -struct volume_options options[] = -{ - { - .key = { "redundancy" }, - .type = GF_OPTION_TYPE_INT, - .default_value = "{{ volume.redundancy }}", - .description = "Maximum number of bricks that can fail " - "simultaneously without losing data." - }, +struct xlator_fops fops = {.lookup = ec_gf_lookup, + .stat = ec_gf_stat, + .fstat = ec_gf_fstat, + .truncate = ec_gf_truncate, + .ftruncate = ec_gf_ftruncate, + .access = ec_gf_access, + .readlink = ec_gf_readlink, + .mknod = ec_gf_mknod, + .mkdir = ec_gf_mkdir, + .unlink = ec_gf_unlink, + .rmdir = ec_gf_rmdir, + .symlink = ec_gf_symlink, + .rename = ec_gf_rename, + .link = ec_gf_link, + .create = ec_gf_create, + .open = ec_gf_open, + .readv = ec_gf_readv, + .writev = ec_gf_writev, + .flush = ec_gf_flush, + .fsync = ec_gf_fsync, + .opendir = ec_gf_opendir, + .readdir = ec_gf_readdir, + .readdirp = ec_gf_readdirp, + .fsyncdir = ec_gf_fsyncdir, + .statfs = ec_gf_statfs, + .setxattr = ec_gf_setxattr, + .getxattr = ec_gf_getxattr, + .fsetxattr = ec_gf_fsetxattr, + .fgetxattr = ec_gf_fgetxattr, + .removexattr = ec_gf_removexattr, + .fremovexattr = ec_gf_fremovexattr, + .lk = ec_gf_lk, + .inodelk = ec_gf_inodelk, + .finodelk = ec_gf_finodelk, + .entrylk = ec_gf_entrylk, + .fentrylk = ec_gf_fentrylk, + .xattrop = ec_gf_xattrop, + .fxattrop = ec_gf_fxattrop, + .setattr = ec_gf_setattr, + .fsetattr = ec_gf_fsetattr, + .fallocate = ec_gf_fallocate, + .discard = ec_gf_discard, + .zerofill = ec_gf_zerofill, + .seek = ec_gf_seek, + .ipc = ec_gf_ipc}; + +struct xlator_cbks cbks = {.forget = ec_gf_forget, + .release = ec_gf_release, + .releasedir = ec_gf_releasedir}; + +struct xlator_dumpops dumpops = {.priv = ec_dump_private}; + +struct volume_options options[] = { + {.key = {"redundancy"}, + .type = GF_OPTION_TYPE_INT, + .default_value = "{{ volume.redundancy }}", + .description = "Maximum number of bricks that can fail " + "simultaneously without losing data."}, { - .key = { "self-heal-daemon" }, + .key = {"self-heal-daemon"}, .type = GF_OPTION_TYPE_BOOL, .description = "self-heal daemon enable/disable", .default_value = "enable", @@ -1487,193 +1487,183 @@ struct volume_options options[] = .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC, .tags = {"disperse"}, }, - { .key = {"iam-self-heal-daemon"}, - .type = GF_OPTION_TYPE_BOOL, - .default_value = "off", - .description = "This option differentiates if the disperse " - "translator is running as part of self-heal-daemon " - "or not." - }, - { .key = {"eager-lock"}, - .type = GF_OPTION_TYPE_BOOL, - .default_value = "on", - .op_version = {GD_OP_VERSION_3_7_10}, - .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, - .tags = {"disperse"}, - .description = "Enable/Disable eager lock for regular files on a " - "disperse volume. If a fop takes a lock and completes " - "its operation, it waits for next 1 second before " - "releasing the lock, to see if the lock can be reused " - "for next fop from the same client. If ec finds any lock " - "contention within 1 second it releases the lock " - "immediately before time expires. This improves the " - "performance of file operations. However, as it takes " - "lock on first brick, for few operations like read, " - "discovery of lock contention might take long time and " - "can actually degrade the performance. If eager lock is " - "disabled, lock will be released as soon as fop " - "completes." - }, - { .key = {"other-eager-lock"}, - .type = GF_OPTION_TYPE_BOOL, - .default_value = "on", - .op_version = { GD_OP_VERSION_3_13_0 }, - .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, - .tags = { "disperse" }, - .description = "It's equivalent to the eager-lock option but for non " - "regular files." - }, - { .key = {"eager-lock-timeout"}, - .type = GF_OPTION_TYPE_INT, - .min = 1, - .max = 60, - .default_value = "1", - .op_version = { GD_OP_VERSION_4_0_0 }, - .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, - .tags = { "disperse", "locks", "timeout" }, - .description = "Maximum time (in seconds) that a lock on an inode is " - "kept held if no new operations on the inode are " - "received." - }, - { .key = {"other-eager-lock-timeout"}, - .type = GF_OPTION_TYPE_INT, - .min = 1, - .max = 60, - .default_value = "1", - .op_version = { GD_OP_VERSION_4_0_0 }, - .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, - .tags = { "disperse", "locks", "timeout" }, - .description = "It's equivalent to eager-lock-timeout option but for " - "non regular files." - }, - { .key = {"background-heals"}, - .type = GF_OPTION_TYPE_INT, - .min = 0,/*Disabling background heals*/ - .max = 256, - .default_value = "8", - .op_version = {GD_OP_VERSION_3_7_3}, - .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, - .tags = {"disperse"}, - .description = "This option can be used to control number of parallel" - " heals", - }, - { .key = {"heal-wait-qlength"}, - .type = GF_OPTION_TYPE_INT, - .min = 0, - .max = 65536, /*Around 100MB as of now with sizeof(ec_fop_data_t) at 1800*/ - .default_value = "128", - .op_version = {GD_OP_VERSION_3_7_3}, - .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, - .tags = {"disperse"}, - .description = "This option can be used to control number of heals" - " that can wait", - }, - { .key = {"heal-timeout"}, - .type = GF_OPTION_TYPE_INT, - .min = 60, - .max = INT_MAX, - .default_value = "600", - .op_version = {GD_OP_VERSION_3_7_3}, - .flags = OPT_FLAG_SETTABLE, - .tags = {"disperse"}, - .description = "time interval for checking the need to self-heal " - "in self-heal-daemon" - }, - { .key = {"read-policy" }, - .type = GF_OPTION_TYPE_STR, - .value = {"round-robin", "gfid-hash"}, - .default_value = "gfid-hash", - .op_version = {GD_OP_VERSION_3_7_6}, - .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, - .tags = {"disperse"}, - .description = "inode-read fops happen only on 'k' number of bricks in" - " n=k+m disperse subvolume. 'round-robin' selects the read" - " subvolume using round-robin algo. 'gfid-hash' selects read" - " subvolume based on hash of the gfid of that file/directory.", - }, - { .key = {"shd-max-threads"}, - .type = GF_OPTION_TYPE_INT, - .min = 1, - .max = 64, - .default_value = "1", - .op_version = {GD_OP_VERSION_3_9_0}, - .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC, - .tags = {"disperse"}, - .description = "Maximum number of parallel heals SHD can do per local " - "brick. This can substantially lower heal times, " - "but can also crush your bricks if you don't have " - "the storage hardware to support this." + {.key = {"iam-self-heal-daemon"}, + .type = GF_OPTION_TYPE_BOOL, + .default_value = "off", + .description = "This option differentiates if the disperse " + "translator is running as part of self-heal-daemon " + "or not."}, + {.key = {"eager-lock"}, + .type = GF_OPTION_TYPE_BOOL, + .default_value = "on", + .op_version = {GD_OP_VERSION_3_7_10}, + .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, + .tags = {"disperse"}, + .description = "Enable/Disable eager lock for regular files on a " + "disperse volume. If a fop takes a lock and completes " + "its operation, it waits for next 1 second before " + "releasing the lock, to see if the lock can be reused " + "for next fop from the same client. If ec finds any lock " + "contention within 1 second it releases the lock " + "immediately before time expires. This improves the " + "performance of file operations. However, as it takes " + "lock on first brick, for few operations like read, " + "discovery of lock contention might take long time and " + "can actually degrade the performance. If eager lock is " + "disabled, lock will be released as soon as fop " + "completes."}, + {.key = {"other-eager-lock"}, + .type = GF_OPTION_TYPE_BOOL, + .default_value = "on", + .op_version = {GD_OP_VERSION_3_13_0}, + .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, + .tags = {"disperse"}, + .description = "It's equivalent to the eager-lock option but for non " + "regular files."}, + {.key = {"eager-lock-timeout"}, + .type = GF_OPTION_TYPE_INT, + .min = 1, + .max = 60, + .default_value = "1", + .op_version = {GD_OP_VERSION_4_0_0}, + .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, + .tags = {"disperse", "locks", "timeout"}, + .description = "Maximum time (in seconds) that a lock on an inode is " + "kept held if no new operations on the inode are " + "received."}, + {.key = {"other-eager-lock-timeout"}, + .type = GF_OPTION_TYPE_INT, + .min = 1, + .max = 60, + .default_value = "1", + .op_version = {GD_OP_VERSION_4_0_0}, + .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, + .tags = {"disperse", "locks", "timeout"}, + .description = "It's equivalent to eager-lock-timeout option but for " + "non regular files."}, + { + .key = {"background-heals"}, + .type = GF_OPTION_TYPE_INT, + .min = 0, /*Disabling background heals*/ + .max = 256, + .default_value = "8", + .op_version = {GD_OP_VERSION_3_7_3}, + .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, + .tags = {"disperse"}, + .description = "This option can be used to control number of parallel" + " heals", }, - { .key = {"shd-wait-qlength"}, - .type = GF_OPTION_TYPE_INT, - .min = 1, - .max = 65536, - .default_value = "1024", - .op_version = {GD_OP_VERSION_3_9_0}, - .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC, - .tags = {"disperse"}, - .description = "This option can be used to control number of heals" - " that can wait in SHD per subvolume" + { + .key = {"heal-wait-qlength"}, + .type = GF_OPTION_TYPE_INT, + .min = 0, + .max = + 65536, /*Around 100MB as of now with sizeof(ec_fop_data_t) at 1800*/ + .default_value = "128", + .op_version = {GD_OP_VERSION_3_7_3}, + .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, + .tags = {"disperse"}, + .description = "This option can be used to control number of heals" + " that can wait", }, + {.key = {"heal-timeout"}, + .type = GF_OPTION_TYPE_INT, + .min = 60, + .max = INT_MAX, + .default_value = "600", + .op_version = {GD_OP_VERSION_3_7_3}, + .flags = OPT_FLAG_SETTABLE, + .tags = {"disperse"}, + .description = "time interval for checking the need to self-heal " + "in self-heal-daemon"}, { - .key = { "cpu-extensions" }, + .key = {"read-policy"}, .type = GF_OPTION_TYPE_STR, - .value = { "none", "auto", "x64", "sse", "avx" }, - .default_value = "auto", - .op_version = {GD_OP_VERSION_3_9_0}, + .value = {"round-robin", "gfid-hash"}, + .default_value = "gfid-hash", + .op_version = {GD_OP_VERSION_3_7_6}, .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, .tags = {"disperse"}, - .description = "force the cpu extensions to be used to accelerate the " - "galois field computations." - }, - { .key = {"self-heal-window-size"}, - .type = GF_OPTION_TYPE_INT, - .min = 1, - .max = 1024, - .default_value = "1", - .op_version = {GD_OP_VERSION_3_11_0}, - .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, - .tags = {"disperse"}, - .description = "Maximum number blocks(128KB) per file for which " - "self-heal process would be applied simultaneously." - }, - { .key = {"optimistic-change-log"}, - .type = GF_OPTION_TYPE_BOOL, - .default_value = "on", - .op_version = {GD_OP_VERSION_3_10_1}, - .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT, - .tags = {"disperse"}, - .description = "Set/Unset dirty flag for every update fop at the start" - "of the fop. If OFF, this option impacts performance of" - "entry operations or metadata operations as it will" - "set dirty flag at the start and unset it at the end of" - "ALL update fop. If ON and all the bricks are good," - "dirty flag will be set at the start only for file fops" - "For metadata and entry fops dirty flag will not be set" - "at the start, if all the bricks are good. This does" - "not impact performance for metadata operations and" - "entry operation but has a very small window to miss" - "marking entry as dirty in case it is required to be" - "healed" - }, - { .key = {"parallel-writes"}, - .type = GF_OPTION_TYPE_BOOL, - .default_value = "on", - .description = "This controls if writes can be wound in parallel as long" - "as it doesn't modify same stripes" - }, - { .key = {"stripe-cache"}, - .type = GF_OPTION_TYPE_INT, - .min = 0,/*Disabling stripe_cache*/ - .max = EC_STRIPE_CACHE_MAX_SIZE, - .default_value = "4", - .description = "This option will keep the last stripe of write fop" - "in memory. If next write falls in this stripe, we need" - "not to read it again from backend and we can save READ" - "fop going over the network. This will improve performance," - "specially for sequential writes. However, this will also" - "lead to extra memory consumption, maximum " - "(cache size * stripe size) Bytes per open file." + .description = + "inode-read fops happen only on 'k' number of bricks in" + " n=k+m disperse subvolume. 'round-robin' selects the read" + " subvolume using round-robin algo. 'gfid-hash' selects read" + " subvolume based on hash of the gfid of that file/directory.", }, - { .key = {NULL} } -}; + {.key = {"shd-max-threads"}, + .type = GF_OPTION_TYPE_INT, + .min = 1, + .max = 64, + .default_value = "1", + .op_version = {GD_OP_VERSION_3_9_0}, + .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC, + .tags = {"disperse"}, + .description = "Maximum number of parallel heals SHD can do per local " + "brick. This can substantially lower heal times, " + "but can also crush your bricks if you don't have " + "the storage hardware to support this."}, + {.key = {"shd-wait-qlength"}, + .type = GF_OPTION_TYPE_INT, + .min = 1, + .max = 65536, + .default_value = "1024", + .op_version = {GD_OP_VERSION_3_9_0}, + .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC, + .tags = {"disperse"}, + .description = "This option can be used to control number of heals" + " that can wait in SHD per subvolume"}, + {.key = {"cpu-extensions"}, + .type = GF_OPTION_TYPE_STR, + .value = {"none", "auto", "x64", "sse", "avx"}, + .default_value = "auto", + .op_version = {GD_OP_VERSION_3_9_0}, + .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, + .tags = {"disperse"}, + .description = "force the cpu extensions to be used to accelerate the " + "galois field computations."}, + {.key = {"self-heal-window-size"}, + .type = GF_OPTION_TYPE_INT, + .min = 1, + .max = 1024, + .default_value = "1", + .op_version = {GD_OP_VERSION_3_11_0}, + .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC, + .tags = {"disperse"}, + .description = "Maximum number blocks(128KB) per file for which " + "self-heal process would be applied simultaneously."}, + {.key = {"optimistic-change-log"}, + .type = GF_OPTION_TYPE_BOOL, + .default_value = "on", + .op_version = {GD_OP_VERSION_3_10_1}, + .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT, + .tags = {"disperse"}, + .description = "Set/Unset dirty flag for every update fop at the start" + "of the fop. If OFF, this option impacts performance of" + "entry operations or metadata operations as it will" + "set dirty flag at the start and unset it at the end of" + "ALL update fop. If ON and all the bricks are good," + "dirty flag will be set at the start only for file fops" + "For metadata and entry fops dirty flag will not be set" + "at the start, if all the bricks are good. This does" + "not impact performance for metadata operations and" + "entry operation but has a very small window to miss" + "marking entry as dirty in case it is required to be" + "healed"}, + {.key = {"parallel-writes"}, + .type = GF_OPTION_TYPE_BOOL, + .default_value = "on", + .description = "This controls if writes can be wound in parallel as long" + "as it doesn't modify same stripes"}, + {.key = {"stripe-cache"}, + .type = GF_OPTION_TYPE_INT, + .min = 0, /*Disabling stripe_cache*/ + .max = EC_STRIPE_CACHE_MAX_SIZE, + .default_value = "4", + .description = "This option will keep the last stripe of write fop" + "in memory. If next write falls in this stripe, we need" + "not to read it again from backend and we can save READ" + "fop going over the network. This will improve performance," + "specially for sequential writes. However, this will also" + "lead to extra memory consumption, maximum " + "(cache size * stripe size) Bytes per open file."}, + {.key = {NULL}}}; |