diff --git a/src/osd/osd_primary_write.cpp b/src/osd/osd_primary_write.cpp index 0de47940..2139034c 100644 --- a/src/osd/osd_primary_write.cpp +++ b/src/osd/osd_primary_write.cpp @@ -339,7 +339,6 @@ resume_12: } resume_6: resume_7: - op_data->n_subops = 0; if (!remember_unstable_write(cur_op, pg, pg.cur_loc_set, 6)) { return; @@ -375,16 +374,21 @@ resume_7: ); recovery_stat[recovery_type].usec += usec; } - if (immediate_commit == IMMEDIATE_ALL) + if (immediate_commit != IMMEDIATE_ALL) + { + // Do not delete anything, it will be deleted as part of copies_to_delete_after_sync + deref_object_state(pg, &op_data->object_state, true); + } + else { submit_primary_del_subops(cur_op, pg.cur_set.data(), pg.pg_size, op_data->object_state->osd_set); - } - deref_object_state(pg, &op_data->object_state, true); - if (op_data->n_subops > 0) - { + deref_object_state(pg, &op_data->object_state, true); + if (op_data->n_subops > 0) + { resume_8: - op_data->st = 8; - return; + op_data->st = 8; + return; + } resume_9: if (op_data->errors > 0) {