]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/ECOmapJournal: bind by reference when clearing omap keys
authorSun Yuechi <sunyuechi@iscas.ac.cn>
Fri, 26 Jun 2026 12:28:31 +0000 (20:28 +0800)
committerSun Yuechi <sunyuechi@iscas.ac.cn>
Sat, 27 Jun 2026 07:44:06 +0000 (15:44 +0800)
The clear_omap loop bound each key_map entry by value, so
update_value() mutated a copy and cached keys were never marked
removed.

As a result, clear_omap had no effect on already-cached keys: cleared
omap keys retained stale values and were returned on read.

Introduced-by: 7289e4d2ece ("osd: Add ECOmapJournal class and relocate OmapUpdateType enum class")
Fixes: https://tracker.ceph.com/issues/77750
Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
src/osd/ECOmapJournal.cc

index c33af5ed70a75998c01c8c32f01a1203ef520875..fef196713377026059d81cd726b8bbdc14b8a9c0 100644 (file)
@@ -234,7 +234,7 @@ void ECOmapJournal::process_entries(const hobject_t &hoid) {
     // Clear omap if specified
     if (entry_iter->clear_omap) {
       // Mark all keys as removed
-      for (auto [_, value] : key_map[hoid]) {
+      for (auto &[_, value] : key_map[hoid]) {
         value.update_value(entry_iter->version, std::nullopt);
       }