diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 2cc01a6d411..80eec2e16fc 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -5561,10 +5561,15 @@ int ReplicatedPG::send_push(int prio, int peer, for (iter->lower_bound(progress.omap_recovered_to); iter->valid(); iter->next()) { - if (available < (iter->key().size() + iter->value().length())) + if (!subop->omap_entries.empty() && + available <= (iter->key().size() + iter->value().length())) break; subop->omap_entries.insert(make_pair(iter->key(), iter->value())); - available -= (iter->key().size() + iter->value().length()); + + if ((iter->key().size() + iter->value().length()) <= available) + available -= (iter->key().size() + iter->value().length()); + else + available = 0; } if (!iter->valid()) new_progress.omap_complete = true;