Current behavior of the loop that commits dirty items is:
- If the last object is not full, it will be chosen for new item.
- If the last object becomes full, a new object is allocated, which
becomes the new last object.
Above logical can make object count increase even there is free object.
Fixes: https://tracker.ceph.com/issues/36094
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
(cherry picked from commit
21b1069eab43fdc2c91915d22f45802d017702fc)
assert(it.second == DIRTY_NEW);
// find omap object to store the key
for (unsigned i = first_free_idx; i < omap_num_objs; i++) {
- if (omap_num_items[i] < MAX_ITEMS_PER_OBJ)
+ if (omap_num_items[i] < MAX_ITEMS_PER_OBJ) {
omap_idx = i;
+ break;
+ }
}
if (omap_idx < 0) {
++omap_num_objs;