]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix osd_reqid_t comparison strict weak ordering 69746/head
authorSun Yuechi <sunyuechi@iscas.ac.cn>
Thu, 25 Jun 2026 14:15:46 +0000 (22:15 +0800)
committerSun Yuechi <sunyuechi@iscas.ac.cn>
Fri, 26 Jun 2026 11:42:06 +0000 (19:42 +0800)
The 'l.inc < r.inc' term in operator< lacked an 'l.name == r.name' guard,
breaking antisymmetry, so it was not a valid strict weak ordering.
Replace it with std::tie.

The only ordered container keyed on osd_reqid_t is
ECInject::write_failures0_reqid (QA/debug error injection), so no
production code path is affected and no backport is needed.

Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
src/osd/osd_types.h

index 1065066948ee555f6003266447fb60c9fd933be5..977af60bed37485133c5ade6568c825ed62d10a7 100644 (file)
@@ -28,6 +28,7 @@
 #include <set>
 #include <string>
 #include <string_view>
+#include <tuple>
 #include <variant>
 
 #ifdef WITH_CRIMSON
@@ -240,12 +241,10 @@ inline bool operator!=(const osd_reqid_t& l, const osd_reqid_t& r) {
   return (l.name != r.name) || (l.inc != r.inc) || (l.tid != r.tid);
 }
 inline bool operator<(const osd_reqid_t& l, const osd_reqid_t& r) {
-  return (l.name < r.name) || (l.inc < r.inc) || 
-    (l.name == r.name && l.inc == r.inc && l.tid < r.tid);
+  return std::tie(l.name, l.inc, l.tid) < std::tie(r.name, r.inc, r.tid);
 }
 inline bool operator<=(const osd_reqid_t& l, const osd_reqid_t& r) {
-  return (l.name < r.name) || (l.inc < r.inc) ||
-    (l.name == r.name && l.inc == r.inc && l.tid <= r.tid);
+  return std::tie(l.name, l.inc, l.tid) <= std::tie(r.name, r.inc, r.tid);
 }
 inline bool operator>(const osd_reqid_t& l, const osd_reqid_t& r) { return !(l <= r); }
 inline bool operator>=(const osd_reqid_t& l, const osd_reqid_t& r) { return !(l < r); }