[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] block-raw: Allow pread beyond the end of growab
From: |
Kevin Wolf |
Subject: |
Re: [Qemu-devel] [PATCH] block-raw: Allow pread beyond the end of growable images |
Date: |
Wed, 01 Jul 2009 09:37:28 +0200 |
User-agent: |
Thunderbird 2.0.0.21 (X11/20090320) |
Christoph Hellwig schrieb:
> On Fri, Jun 26, 2009 at 07:51:24PM +0200, Kevin Wolf wrote:
>> diff --git a/block/raw-posix.c b/block/raw-posix.c
>> index fa1a394..985bf69 100644
>> --- a/block/raw-posix.c
>> +++ b/block/raw-posix.c
>> @@ -117,6 +117,7 @@ typedef struct BDRVRawState {
>> static int posix_aio_init(void);
>>
>> static int fd_open(BlockDriverState *bs);
>> +static int64_t raw_getlength(BlockDriverState *bs);
>>
>> #if defined(__FreeBSD__)
>> static int cdrom_reopen(BlockDriverState *bs);
>> @@ -231,6 +232,16 @@ static int raw_pread_aligned(BlockDriverState *bs,
>> int64_t offset,
>> if (ret == count)
>> goto label__raw_read__success;
>>
>> + /* Allow reads beyond the end (needed for pwrite) */
>> + if ((ret == 0) && bs->growable) {
>> + int64_t size = raw_getlength(bs);
>> + if (offset >= size) {
>> + memset(buf, 0, count);
>> + ret = count;
>> + goto label__raw_read__success;
>> + }
>> + }
>
> I really don't like doing this inside the lowelevel read handler. If
> this is indeed only needed for pwrite we might be better off doing
> the right thing in the place that needs it, bdrv_pwrite.
If you feel like posting a better patch, go ahead. I'm feeling that it's
going to be a whole lot uglier in bdrv_pwrite, but that might prove
wrong. And after all it is a problem with raw and not with the generic
block code - qcow2 for example was already reading zeros.
For the time being, this patch fixes a bug and should stay.
Kevin
- Re: [Qemu-devel] [PATCH] block-raw: Allow pread beyond the end of growable images,
Kevin Wolf <=