From: Matan Breizman Date: Wed, 31 Aug 2022 08:08:27 +0000 (+0000) Subject: SimpleRADOSStriper: Avoid moving bufferlists by using deque X-Git-Tag: v16.2.11~226^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c8a9281cc126631b3e975d28aff06c1575505bc2;p=ceph.git SimpleRADOSStriper: Avoid moving bufferlists by using deque Fixes: https://tracker.ceph.com/issues/57152 Signed-off-by: Matan Breizman (cherry picked from commit 410f8c74f43caee179379a4ba02b475c51ed6af4) --- diff --git a/src/SimpleRADOSStriper.cc b/src/SimpleRADOSStriper.cc index d6fe101f9e9..66bc653fb7c 100644 --- a/src/SimpleRADOSStriper.cc +++ b/src/SimpleRADOSStriper.cc @@ -488,7 +488,10 @@ ssize_t SimpleRADOSStriper::read(void* data, size_t len, uint64_t off) } size_t r = 0; - std::vector> reads; + // Don't use std::vector to store bufferlists (e.g for parallelizing aio_reads), + // as they are being moved whenever the vector resizes + // and will cause invalidated references. + std::deque> reads; while ((len-r) > 0) { auto ext = get_next_extent(off+r, len-r); auto& [bl, aiocp] = reads.emplace_back();