On 18/09/2023 22:42, Markus Armbruster wrote: > Functions that use an Error **errp parameter to return errors should > not also report them to the user, because reporting is the caller's > job. When the caller does, the error is reported twice. When it > doesn't (because it recovered from the error), there is no error to > report, i.e. the report is bogus. > > qemu_rdma_source_init(), qemu_rdma_connect(), > rdma_start_incoming_migration(), and rdma_start_outgoing_migration() > violate this principle: they call error_report() via > qemu_rdma_cleanup(). > > Moreover, qemu_rdma_cleanup() can't fail. It is called on error > paths, and QIOChannel close and finalization. Are the conditions it > reports really errors? I doubt it.
I'm not very sure, it's fine if it's call from the error path. but when the caller is migration_cancle from HMP/QMP, shall we report something more though we know QEMU can recover. maybe change to warning etc... > > Clean this up: silence qemu_rdma_cleanup(). I believe that's fine for > all these callers. If it isn't, we need to convert to Error instead. > > Signed-off-by: Markus Armbruster <arm...@redhat.com> > --- > migration/rdma.c | 6 +----- > 1 file changed, 1 insertion(+), 5 deletions(-) > > diff --git a/migration/rdma.c b/migration/rdma.c > index d9f80ef390..be2db7946d 100644 > --- a/migration/rdma.c > +++ b/migration/rdma.c > @@ -2330,7 +2330,6 @@ static int qemu_rdma_write(QEMUFile *f, RDMAContext > *rdma, > > static void qemu_rdma_cleanup(RDMAContext *rdma) > { > - Error *err = NULL; > int idx; > > if (rdma->cm_id && rdma->connected) { > @@ -2341,10 +2340,7 @@ static void qemu_rdma_cleanup(RDMAContext *rdma) > .type = RDMA_CONTROL_ERROR, > .repeat = 1, > }; > - error_report("Early error. Sending error."); > - if (qemu_rdma_post_send_control(rdma, NULL, &head, &err) < 0) { > - error_report_err(err); > - } > + qemu_rdma_post_send_control(rdma, NULL, &head, NULL); > } > > rdma_disconnect(rdma->cm_id);