From: Yan, Zheng Date: Tue, 27 Nov 2018 08:15:21 +0000 (+0800) Subject: osdc/Journaler: make try_read_entry store data in contiguous memory X-Git-Tag: v12.2.11~84^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6faa2391976c1ba0cbe0f36482f80094c86148a6;p=ceph.git osdc/Journaler: make try_read_entry store data in contiguous memory If bufferlist consists of discontiguous memory, decoding types whose denc_traits needs contiguous memory is inefficient. The bufferlist may get copied to temporary memory multiple times. (copy_shallow() in src/include/denc.h actually does deep copy) Signed-off-by: "Yan, Zheng" Fixes: http://tracker.ceph.com/issues/37399 (cherry picked from commit 39d044be3c8c29941443afd7daaf61603efec2c9) --- diff --git a/src/osdc/Journaler.cc b/src/osdc/Journaler.cc index 8ca0c4b27188..79b1524a7382 100644 --- a/src/osdc/Journaler.cc +++ b/src/osdc/Journaler.cc @@ -1267,6 +1267,13 @@ bool Journaler::try_read_entry(bufferlist& bl) // prefetch? _prefetch(); + + // If bufferlist consists of discontiguous memory, decoding types whose + // denc_traits needs contiguous memory is inefficient. The bufferlist may + // get copied to temporary memory multiple times (copy_shallow() in + // src/include/denc.h actually does deep copy) + if (bl.get_num_buffers() > 1) + bl.rebuild(); return true; }