get_rollback_snap_id() did not check if the snapshot it was
accessing was a mirror snapshot, causing it to crash if it wasn't.
Fixes: https://tracker.ceph.com/issues/70075
Signed-off-by: N Balachandran <nithya.balachandran@ibm.com>
(cherry picked from commit
7d75161051dad8047925259555d7ddd1a3e98de2)
uint64_t *rollback_snap_id) {
for (; it != end; it++) {
- auto mirror_ns = std::get<cls::rbd::MirrorSnapshotNamespace>(
- it->second.snap_namespace);
- if (mirror_ns.state != cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY) {
+ auto mirror_ns = std::get_if<cls::rbd::MirrorSnapshotNamespace>(
+ &it->second.snap_namespace);
+ if (mirror_ns == nullptr) {
+ continue;
+ }
+ if (mirror_ns->state != cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY) {
break;
}
- if (mirror_ns.complete) {
+ if (mirror_ns->complete) {
break;
}
}