On Thu, Jan 30, 2014 at 10:35 PM, Peter Lieven <p...@kamp.de> wrote: > > Am 30.01.2014 um 15:22 schrieb Stefan Hajnoczi <stefa...@gmail.com>: > >> On Wed, Jan 29, 2014 at 05:19:59PM +0100, Benoît Canet wrote: >>> Le Wednesday 29 Jan 2014 à 09:50:21 (+0100), Peter Lieven a écrit : >>>> +static int nfs_file_open(BlockDriverState *bs, QDict *options, int flags, >>>> + Error **errp) { >>>> + NFSClient *client = bs->opaque; >>>> + int64_t ret; >>>> + QemuOpts *opts; >>>> + Error *local_err = NULL; >>>> + >>>> + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort); >>>> + qemu_opts_absorb_qdict(opts, options, &local_err); >>>> + if (error_is_set(&local_err)) { >>>> + qerror_report_err(local_err); >>> I have seen more usage of error_propagate(errp, local_err); in QEMU code. >>> Maybe I am missing the point. >> >> Yes, I think you are right. The Error should be propagated to the >> caller. It's not clear to me whether we can ever get an error from >> qemu_opts_absorb_qdict() in this call site though. > > Is there any action I should take here? If yes, can you advise what > to do please.
The issue is that nfs_file_open() takes an Error **errp argument. This means the function should report detailed errors using the Error object. The patch prints and then discards the local_error instead of propagating it to the caller's errp. We should just propagate the error instead of printing it: if (error_is_set(&local_err)) { error_propagate(errp, local_err); goto ...; } Stefan