]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: Don't segfault on datalog trim 42336/head
authorAdam C. Emerson <aemerson@redhat.com>
Tue, 13 Jul 2021 20:05:47 +0000 (16:05 -0400)
committerAdam C. Emerson <aemerson@redhat.com>
Wed, 14 Jul 2021 15:07:21 +0000 (11:07 -0400)
Synchronous (or yielded, basically other-than AioCompletion trim)
would try to dereference the past-the-end iterator if we were trimming
to a point in the most recent generation.

https://tracker.ceph.com/issues/51661
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
(cherry picked from commit 97305f03c16db1cfaceef04a74ee510bc1fc1e80)
https://tracker.ceph.com/issues/51675
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
src/rgw/rgw_datalog.cc

index 64d13270ac0492234ef726ce8730ae7b755d35f0..fbfcf087922e91412803e2c70181c79ab2da3944 100644 (file)
@@ -805,6 +805,8 @@ int DataLogBackends::trim_entries(const DoutPrefixProvider *dpp, int shard_id, s
       r = -ENODATA;
     if (r == -ENODATA && be->gen_id < target_gen)
       r = 0;
+    if (be->gen_id == target_gen)
+      break;
     l.lock();
   };
   return r;