From d6c6b0bce5f2e65cdbe67ce3c582a7d71e15c563 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Sun, 18 Nov 2018 03:55:01 +0100 Subject: [PATCH] ec: lrc doesn't depend on crosstalks between bufferlists anymore. Signed-off-by: Radoslaw Zarzynski --- src/erasure-code/lrc/ErasureCodeLrc.cc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/erasure-code/lrc/ErasureCodeLrc.cc b/src/erasure-code/lrc/ErasureCodeLrc.cc index 77e1eb98ff9f..c882f868fc1e 100644 --- a/src/erasure-code/lrc/ErasureCodeLrc.cc +++ b/src/erasure-code/lrc/ErasureCodeLrc.cc @@ -754,16 +754,18 @@ int ErasureCodeLrc::encode_chunks(const set &want_to_encode, set layer_want_to_encode; map layer_encoded; int j = 0; - for (vector::const_iterator c = layer.chunks.begin(); - c != layer.chunks.end(); - ++c) { - layer_encoded[j] = (*encoded)[*c]; - if (want_to_encode.find(*c) != want_to_encode.end()) + for (const auto& c : layer.chunks) { + std::swap(layer_encoded[j], (*encoded)[c]); + if (want_to_encode.find(c) != want_to_encode.end()) layer_want_to_encode.insert(j); j++; } int err = layer.erasure_code->encode_chunks(layer_want_to_encode, &layer_encoded); + j = 0; + for (const auto& c : layer.chunks) { + std::swap(layer_encoded[j++], (*encoded)[c]); + } if (err) { derr << __func__ << " layer " << layer.chunks_map << " failed with " << err << " trying to encode " -- 2.47.3