Merge pull request #25595 from rzarzynski/wip-ec-drop_bl_crosstalk_dependency

ec: lrc doesn't depend on crosstalks between bufferlists anymore.

Reviewed-by: Sage Weil <sage@redhat.com>
This commit is contained in:
Kefu Chai 2018-12-21 14:06:08 +08:00 committed by GitHub
commit b5cb2115ba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -754,16 +754,18 @@ int ErasureCodeLrc::encode_chunks(const set<int> &want_to_encode,
set<int> layer_want_to_encode;
map<int, bufferlist> layer_encoded;
int j = 0;
for (vector<int>::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 "