diff mbox

[2/4] block/null-{co, aio}: Return zeros when read

Message ID 1455989993-1917-3-git-send-email-mreitz@redhat.com
State New
Headers show

Commit Message

Max Reitz Feb. 20, 2016, 5:39 p.m. UTC
Currently, we do not define exactly what is returned when read, but
having a reliable source of zeros is always nice.

Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 block/null.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Eric Blake Feb. 22, 2016, 4:31 p.m. UTC | #1
On 02/20/2016 10:39 AM, Max Reitz wrote:
> Currently, we do not define exactly what is returned when read, but
> having a reliable source of zeros is always nice.
> 
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
>  block/null.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/block/null.c b/block/null.c
> index d90165d..ad883d9 100644
> --- a/block/null.c
> +++ b/block/null.c
> @@ -90,6 +90,7 @@ static coroutine_fn int null_co_readv(BlockDriverState *bs,
>                                        int64_t sector_num, int nb_sectors,
>                                        QEMUIOVector *qiov)
>  {
> +    qemu_iovec_memset(qiov, 0, 0, nb_sectors * BDRV_SECTOR_SIZE);
>      return null_co_common(bs);
>  }

Shouldn't this be made optional?  That is, one of the points of null-co
was to be as fast as possible, and the memset will slow us down.  So
having an optional bool as part of the null-co setup, which defaults off
for back-compat but can be turned on for guaranteed all-zero reads,
sounds like it would be nicer than forcing all-zero reads.
Max Reitz Feb. 22, 2016, 4:45 p.m. UTC | #2
On 22.02.2016 17:31, Eric Blake wrote:
> On 02/20/2016 10:39 AM, Max Reitz wrote:
>> Currently, we do not define exactly what is returned when read, but
>> having a reliable source of zeros is always nice.
>>
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>>  block/null.c | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/block/null.c b/block/null.c
>> index d90165d..ad883d9 100644
>> --- a/block/null.c
>> +++ b/block/null.c
>> @@ -90,6 +90,7 @@ static coroutine_fn int null_co_readv(BlockDriverState *bs,
>>                                        int64_t sector_num, int nb_sectors,
>>                                        QEMUIOVector *qiov)
>>  {
>> +    qemu_iovec_memset(qiov, 0, 0, nb_sectors * BDRV_SECTOR_SIZE);
>>      return null_co_common(bs);
>>  }
> 
> Shouldn't this be made optional?  That is, one of the points of null-co
> was to be as fast as possible, and the memset will slow us down.  So
> having an optional bool as part of the null-co setup, which defaults off
> for back-compat but can be turned on for guaranteed all-zero reads,
> sounds like it would be nicer than forcing all-zero reads.

Can do, will do, thanks.

Max
diff mbox

Patch

diff --git a/block/null.c b/block/null.c
index d90165d..ad883d9 100644
--- a/block/null.c
+++ b/block/null.c
@@ -90,6 +90,7 @@  static coroutine_fn int null_co_readv(BlockDriverState *bs,
                                       int64_t sector_num, int nb_sectors,
                                       QEMUIOVector *qiov)
 {
+    qemu_iovec_memset(qiov, 0, 0, nb_sectors * BDRV_SECTOR_SIZE);
     return null_co_common(bs);
 }
 
@@ -159,6 +160,7 @@  static BlockAIOCB *null_aio_readv(BlockDriverState *bs,
                                   BlockCompletionFunc *cb,
                                   void *opaque)
 {
+    qemu_iovec_memset(qiov, 0, 0, nb_sectors * BDRV_SECTOR_SIZE);
     return null_aio_common(bs, cb, opaque);
 }