]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ec: lrc doesn't depend on crosstalks between bufferlists anymore. 25595/head
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Sun, 18 Nov 2018 02:55:01 +0000 (03:55 +0100)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 5 Dec 2018 15:27:20 +0000 (16:27 +0100)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/erasure-code/lrc/ErasureCodeLrc.cc

index 77e1eb98ff9f725bca5a8c90ab6609f8871ac9fc..c882f868fc1eeb6a725cf7c18dc5d7d81bf49cf7 100644 (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 "