Message ID | 1455989993-1917-3-git-send-email-mreitz@redhat.com |
---|---|
State | New |
Headers | show |
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.
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 --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); }
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(+)