diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 64430dc552933..d7aa48b03dc38 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2542,16 +2542,22 @@ class C_AckMarkedDown : public C_MonOp { MonOpRequestRef op) : C_MonOp(op), osdmon(osdmon) {} - void _finish(int) override { - MOSDMarkMeDown *m = static_cast(op->get_req()); - osdmon->mon->send_reply( - op, - new MOSDMarkMeDown( - m->fsid, - m->target_osd, - m->target_addrs, - m->get_epoch(), - false)); // ACK itself does not request an ack + void _finish(int r) override { + if (r == 0) { + MOSDMarkMeDown *m = static_cast(op->get_req()); + osdmon->mon->send_reply( + op, + new MOSDMarkMeDown( + m->fsid, + m->target_osd, + m->target_addrs, + m->get_epoch(), + false)); // ACK itself does not request an ack + } else if (r == -EAGAIN) { + osdmon->dispatch(op); + } else { + ceph_abort_msgf("C_AckMarkedDown: unknown result %d", r); + } } ~C_AckMarkedDown() override { }