[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-trivial] [Qemu-devel] [PATCH] pflash: Avoid warnings from cove
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-trivial] [Qemu-devel] [PATCH] pflash: Avoid warnings from coverity |
Date: |
Mon, 24 Sep 2012 10:41:20 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux) |
Kevin Wolf <address@hidden> writes:
> Am 22.09.2012 20:53, schrieb Stefan Weil:
>> Am 22.09.2012 18:29, schrieb Stefan Hajnoczi:
>>> On Wed, Sep 19, 2012 at 06:41:14PM +0200, Stefan Weil wrote:
>> [snip]
>>>> offset_end = (offset_end + 511) >> 9;
>>>> - bdrv_write(pfl->bs, offset, pfl->storage + (offset << 9),
>>>> - offset_end - offset);
>>>> + if (bdrv_write(pfl->bs, offset, pfl->storage + (offset << 9),
>>>> + offset_end - offset) == -1) {
>>> bdrv_write() returns -errno, not -1.
>>
>> Thanks. It looks like we have more code which uses the wrong check
>> (and which I copied). So more patches are needed.
>>
>> Should we also replace code which does bdrv_write() != 0 or !bdrv_write()
>> by bdrv_write() < 0 to get more uniform code (and the same for bdrv_read*),
>> even it is not strictly wrong?
>>
>> Maybe Kevin as block maintainer should decide that.
>
> Yes, I very much prefer ret < 0 checks for all block layer functions.
>
>>>> + fprintf(stderr, "pflash: Error writing to flash storage\n");
>>>> + }
>>> Please report the errno and possibly bdrv_get_device_name() to uniquely
>>> identify this block device.
>>
>> That would be overkill here: writing flash memory is not used very
>> often (even on real hardware it is typically only used for firmware
>> updates). I expect that anyone who does a firmware update in a
>> QEMU guest will know the name of the flash image file.
>>
>> Usually I replace the flash image file on the QEMU host when I want
>> to exchange the firmware (much easier than flashing in the guest).
>>
>> Reporting errno might be more reasonable.Are there other values than
>> EIO (e.g. defective media) and ENOSPC (disk full) which could occur?
>
> Basically anything that the OS can return. The block layer may
> internally generate things like -EACCES for writing to read-only images,
> or -ENOMEDIUM (not sure if it's possible for pflash).
>
>> A common solution for all users of bdrv_write in the block layer
>> would be even better. VirtualBox for example stops the guest when
>> ENOSPC (disk full) occurs, so it's possible for users to fix that
>> and resume the emulation.
>
> virtio-blk/IDE/scsi-disk do that.
Doing it in the block layer for all devices would be cleaner
conceptually. If I remember correctly, we did it in devices instead,
because that was much simpler.
>>> Peter's comments about reporting errors to the guest make sense to me.
>>> I'm not sure how much work that involves, printing the error is a step
>>> in the right direction but we shouldn't forget the TODO.
>
> Shouldn't we avoid fprintfs that can be triggered by the guest?
Yes, we should.
Besides, mumbling to stderr is no excuse for a device model to behave
incorrectly. Adding a print is a step in the right direction only
insofar as it makes the brokenness of the device model more obvious.