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

Reply via email to