From 2e1ee1f18dc670c56c8aaf4ee35e233e85e232d1 Mon Sep 17 00:00:00 2001 From: Venky Shankar Date: Mon, 22 Jan 2024 01:02:11 -0500 Subject: [PATCH] osdc/Journaler: derr log and abort when header update get (possibly) overwritten out-of-order See: https://tracker.ceph.com/issues/58878#note-4 Signed-off-by: Venky Shankar --- src/osdc/Journaler.cc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/osdc/Journaler.cc b/src/osdc/Journaler.cc index 04b90fb5952aa..c1c1178bd7f69 100644 --- a/src/osdc/Journaler.cc +++ b/src/osdc/Journaler.cc @@ -493,7 +493,21 @@ void Journaler::_finish_write_head(int r, Header &wrote, } ceph_assert(!readonly); ldout(cct, 10) << "_finish_write_head " << wrote << dendl; - last_committed = wrote; + if (wrote.write_pos < last_committed.write_pos || + wrote.expire_pos < last_committed.expire_pos || + wrote.trimmed_pos < last_committed.trimmed_pos) { + lderr(cct) << __func__ << ": not updating last_committed: " + << "(wrote.write_pos/last_committed.write_pos=" + << wrote.write_pos << "," << last_committed.write_pos << "), " + << "(wrote.expire_pos/last_committed.expire_pos=" + << wrote.expire_pos << "," << last_committed.expire_pos << "), " + << "(wrote.trimmed_pos/last_committed.trimmed_pos=" + << wrote.trimmed_pos << "," << last_committed.trimmed_pos << ")" + << dendl; + ceph_abort(); + } else { + last_committed = wrote; + } if (oncommit) { oncommit->complete(r); } -- 2.39.5