Hi, everyone. I'm trying to read the source code of ceph, and I found that some code seems strange. In ReplicatedBackend::sub_op_modify_reply, there is the following code: if (r->ack_type & CEPH_OSD_FLAG_ONDISK) { assert(ip_op.waiting_for_commit.count(from)); ip_op.waiting_for_commit.erase(from); if (ip_op.op) { ostringstream ss; ss << "sub_op_commit_rec_from_osd." << from.osd; ip_op.op->mark_event(ss.str()); } } else { assert(ip_op.waiting_for_applied.count(from)); if (ip_op.op) { ostringstream ss; ss << "sub_op_applied_rec_from_osd." << from.osd; ip_op.op->mark_event(ss.str()); } } ip_op.waiting_for_applied.erase(from); It seems that the statement "ip_op.waiting_for_applied.erase(from)" should be in the "else" clause, otherwise items in waiting_for_applied could be errorly erased when ack_type is CEPH_OSD_FLAG_ONDISK. Why put it outside the "else" clause? Thank you:-)?韬{.n?壏煯壄?%娝?檩?w?{.n?壏渮?u朕楕Ф洝塄}财爖?j:+v墾畐娻2娹櫒璀??摺玜囤?z夸z罐楘+凒殠娸?w棹f