Skip to content

Commit ca65e85

Browse files
librbd: avoid decrementing iterator before first element
While trying to merge delayed requests, SimpleSchedulerObjectDispatch can end up iterating before the first element. With llvm, this leads to a crash: https://paste.opendev.org/raw/bxnQqqDtIrkOfVvRfkZ6/ This change adds a check, ensuring that we won't decrement the iterator before the first map element. Fixes: https://tracker.ceph.com/issues/61503 Signed-off-by: Lucian Petrut <[email protected]>
1 parent d2205f5 commit ca65e85

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

src/librbd/io/SimpleSchedulerObjectDispatch.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ bool SimpleSchedulerObjectDispatch<I>::ObjectRequests::try_delay_request(
105105

106106
// try to merge back to an existing request
107107
iter = m_delayed_requests.lower_bound(object_off);
108-
if (iter == m_delayed_requests.end() || iter->first > object_off) {
108+
if (iter != m_delayed_requests.begin() &&
109+
(iter == m_delayed_requests.end() || iter->first > object_off)) {
109110
iter--;
110111
}
111112
if (iter != m_delayed_requests.end() &&

0 commit comments

Comments
 (0)