From: Radoslaw Zarzynski Date: Sun, 18 Nov 2018 02:55:01 +0000 (+0100) Subject: ec: lrc doesn't depend on crosstalks between bufferlists anymore. X-Git-Tag: v14.1.0~568^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d6c6b0bce5f2e65cdbe67ce3c582a7d71e15c563;p=ceph.git ec: lrc doesn't depend on crosstalks between bufferlists anymore. Signed-off-by: Radoslaw Zarzynski --- 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 "