OSD was crashing due to a race condition while IO was going on and
user wants to dump in flight ops. This was happening because Message
data and payloads are removed before the op itself is removed from
the in flight list. Calling op->_unregistered() after removing
the op from the in flight list fixes the issue.
Fixes: #9384
Signed-off-by: Somnath Roy <somnath.roy@sandisk.com>
assert(i->xitem.get_list() == &sdata->ops_in_flight_sharded);
i->xitem.remove_myself();
}
+ i->_unregistered();
utime_t now = ceph_clock_now(cct);
history.insert(now, TrackedOpRef(i));
}
void OpTracker::RemoveOnDelete::operator()(TrackedOp *op) {
op->mark_event("done");
- op->_unregistered();
if (!tracker->tracking_enabled) {
+ op->_unregistered();
delete op;
return;
}