From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48107) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ajH3y-0000Se-J0 for qemu-devel@nongnu.org; Thu, 24 Mar 2016 22:01:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ajH3x-0005FN-MX for qemu-devel@nongnu.org; Thu, 24 Mar 2016 22:01:22 -0400 Date: Fri, 25 Mar 2016 10:01:15 +0800 From: Fam Zheng Message-ID: <20160325020115.GA29171@ad.usersys.redhat.com> References: <1458858840-3859-1-git-send-email-mreitz@redhat.com> <1458858840-3859-3-git-send-email-mreitz@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1458858840-3859-3-git-send-email-mreitz@redhat.com> Subject: Re: [Qemu-devel] [PATCH v2 2/4] block/null-{co, aio}: Allow reading zeroes List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Max Reitz Cc: Kevin Wolf , qemu-devel@nongnu.org, qemu-block@nongnu.org On Thu, 03/24 23:33, Max Reitz wrote: > This is optional so that it does not impede the null block driver's > performance unless this behavior is desired. > > Signed-off-by: Max Reitz > --- > block/null.c | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/block/null.c b/block/null.c > index d90165d..a7df386 100644 > --- a/block/null.c > +++ b/block/null.c > @@ -14,10 +14,12 @@ > #include "block/block_int.h" > > #define NULL_OPT_LATENCY "latency-ns" > +#define NULL_OPT_ZEROES "read-zeroes" > > typedef struct { > int64_t length; > int64_t latency_ns; > + bool read_zeroes; > } BDRVNullState; > > static QemuOptsList runtime_opts = { > @@ -40,6 +42,11 @@ static QemuOptsList runtime_opts = { > .help = "nanoseconds (approximated) to wait " > "before completing request", > }, > + { > + .name = NULL_OPT_ZEROES, > + .type = QEMU_OPT_BOOL, > + .help = "return zeroes when read", > + }, > { /* end of list */ } > }, > }; > @@ -61,6 +68,7 @@ static int null_file_open(BlockDriverState *bs, QDict *options, int flags, > error_setg(errp, "latency-ns is invalid"); > ret = -EINVAL; > } > + s->read_zeroes = qemu_opt_get_bool(opts, NULL_OPT_ZEROES, false); > qemu_opts_del(opts); > return ret; > } > @@ -90,6 +98,12 @@ static coroutine_fn int null_co_readv(BlockDriverState *bs, > int64_t sector_num, int nb_sectors, > QEMUIOVector *qiov) > { > + BDRVNullState *s = bs->opaque; > + > + if (s->read_zeroes) { > + qemu_iovec_memset(qiov, 0, 0, nb_sectors * BDRV_SECTOR_SIZE); > + } > + > return null_co_common(bs); > } > > @@ -159,6 +173,12 @@ static BlockAIOCB *null_aio_readv(BlockDriverState *bs, > BlockCompletionFunc *cb, > void *opaque) > { > + BDRVNullState *s = bs->opaque; > + > + if (s->read_zeroes) { > + qemu_iovec_memset(qiov, 0, 0, nb_sectors * BDRV_SECTOR_SIZE); > + } > + > return null_aio_common(bs, cb, opaque); > } > > -- > 2.7.4 > Acked-by: Fam Zheng