From: Anthony Liguori <anthony@codemonkey.ws>
To: Michael Tokarev <mjt@tls.msk.ru>
Cc: Kevin Wolf <kwolf@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
qemu-devel@nongnu.org,
Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCHv4 04/11] consolidate qemu_iovec_memset{, _skip}() into single function and use existing iov_memset()
Date: Fri, 16 Mar 2012 11:19:03 -0500 [thread overview]
Message-ID: <4F6367F7.7040506@redhat.com> (raw)
In-Reply-To: <1331845217-21705-5-git-send-email-mjt@msgid.tls.msk.ru>
On 03/15/2012 04:00 PM, Michael Tokarev wrote:
> This patch combines two functions into one, and replaces
> the implementation with already existing iov_memset() from
> iov.c.
>
> The new prototype of qemu_iovec_memset():
> size_t qemu_iovec_memset(qiov, size_t offset, int fillc, size_t bytes)
> It is different from former qemu_iovec_memset_skip(), and
> I want to make other functions to be consistent with it
> too: first how much to skip, second what, and 3rd how many
> of it. It also returns actual number of bytes filled in,
> which may be less than the requested `bytes' if qiov is
> smaller than offset+bytes, in the same way iov_memset()
> does.
>
> While at it, use utility function iov_memset() from
> iov.h in posix-aio-compat.c, where qiov was used.
>
> Signed-off-by: Michael Tokarev<mjt@tls.msk.ru>
Please CC Kevin at least when making block changes.
It looks fine to me but would appreciate Kevin/Stefan taking a look too.
Regards,
Anthony Liguori
> ---
> block/qcow2.c | 4 ++--
> block/qed.c | 4 ++--
> cutils.c | 44 ++++----------------------------------------
> linux-aio.c | 4 ++--
> posix-aio-compat.c | 8 +++-----
> qemu-common.h | 5 ++---
> 6 files changed, 15 insertions(+), 54 deletions(-)
>
> diff --git a/block/qcow2.c b/block/qcow2.c
> index 7aece65..941a6a9 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -407,7 +407,7 @@ int qcow2_backing_read1(BlockDriverState *bs, QEMUIOVector *qiov,
> else
> n1 = bs->total_sectors - sector_num;
>
> - qemu_iovec_memset_skip(qiov, 0, 512 * (nb_sectors - n1), 512 * n1);
> + qemu_iovec_memset(qiov, 512 * n1, 0, 512 * (nb_sectors - n1));
>
> return n1;
> }
> @@ -467,7 +467,7 @@ static coroutine_fn int qcow2_co_readv(BlockDriverState *bs, int64_t sector_num,
> }
> } else {
> /* Note: in this case, no need to wait */
> - qemu_iovec_memset(&hd_qiov, 0, 512 * cur_nr_sectors);
> + qemu_iovec_memset(&hd_qiov, 0, 0, 512 * cur_nr_sectors);
> }
> } else if (cluster_offset& QCOW_OFLAG_COMPRESSED) {
> /* add AIO support for compressed blocks ? */
> diff --git a/block/qed.c b/block/qed.c
> index a041d31..6f9325b 100644
> --- a/block/qed.c
> +++ b/block/qed.c
> @@ -738,7 +738,7 @@ static void qed_read_backing_file(BDRVQEDState *s, uint64_t pos,
> /* Zero all sectors if reading beyond the end of the backing file */
> if (pos>= backing_length ||
> pos + qiov->size> backing_length) {
> - qemu_iovec_memset(qiov, 0, qiov->size);
> + qemu_iovec_memset(qiov, 0, 0, qiov->size);
> }
>
> /* Complete now if there are no backing file sectors to read */
> @@ -1253,7 +1253,7 @@ static void qed_aio_read_data(void *opaque, int ret,
>
> /* Handle zero cluster and backing file reads */
> if (ret == QED_CLUSTER_ZERO) {
> - qemu_iovec_memset(&acb->cur_qiov, 0, acb->cur_qiov.size);
> + qemu_iovec_memset(&acb->cur_qiov, 0, 0, acb->cur_qiov.size);
> qed_aio_next_io(acb, 0);
> return;
> } else if (ret != QED_CLUSTER_FOUND) {
> diff --git a/cutils.c b/cutils.c
> index af308cd..0ddf4c7 100644
> --- a/cutils.c
> +++ b/cutils.c
> @@ -26,6 +26,7 @@
> #include<math.h>
>
> #include "qemu_socket.h"
> +#include "iov.h"
>
> void pstrcpy(char *buf, int buf_size, const char *str)
> {
> @@ -260,47 +261,10 @@ void qemu_iovec_from_buffer(QEMUIOVector *qiov, const void *buf, size_t count)
> }
> }
>
> -void qemu_iovec_memset(QEMUIOVector *qiov, int c, size_t count)
> +size_t qemu_iovec_memset(QEMUIOVector *qiov, size_t offset,
> + int fillc, size_t bytes)
> {
> - size_t n;
> - int i;
> -
> - for (i = 0; i< qiov->niov&& count; ++i) {
> - n = MIN(count, qiov->iov[i].iov_len);
> - memset(qiov->iov[i].iov_base, c, n);
> - count -= n;
> - }
> -}
> -
> -void qemu_iovec_memset_skip(QEMUIOVector *qiov, int c, size_t count,
> - size_t skip)
> -{
> - int i;
> - size_t done;
> - void *iov_base;
> - uint64_t iov_len;
> -
> - done = 0;
> - for (i = 0; (i< qiov->niov)&& (done != count); i++) {
> - if (skip>= qiov->iov[i].iov_len) {
> - /* Skip the whole iov */
> - skip -= qiov->iov[i].iov_len;
> - continue;
> - } else {
> - /* Skip only part (or nothing) of the iov */
> - iov_base = (uint8_t*) qiov->iov[i].iov_base + skip;
> - iov_len = qiov->iov[i].iov_len - skip;
> - skip = 0;
> - }
> -
> - if (done + iov_len> count) {
> - memset(iov_base, c, count - done);
> - break;
> - } else {
> - memset(iov_base, c, iov_len);
> - }
> - done += iov_len;
> - }
> + return iov_memset(qiov->iov, qiov->niov, offset, fillc, bytes);
> }
>
> /*
> diff --git a/linux-aio.c b/linux-aio.c
> index d2fc2e7..5a46c13 100644
> --- a/linux-aio.c
> +++ b/linux-aio.c
> @@ -64,8 +64,8 @@ static void qemu_laio_process_completion(struct qemu_laio_state *s,
> } else if (ret>= 0) {
> /* Short reads mean EOF, pad with zeros. */
> if (laiocb->is_read) {
> - qemu_iovec_memset_skip(laiocb->qiov, 0,
> - laiocb->qiov->size - ret, ret);
> + qemu_iovec_memset(laiocb->qiov, ret, 0,
> + laiocb->qiov->size - ret);
> } else {
> ret = -EINVAL;
> }
> diff --git a/posix-aio-compat.c b/posix-aio-compat.c
> index d311d13..1ab4a18 100644
> --- a/posix-aio-compat.c
> +++ b/posix-aio-compat.c
> @@ -29,6 +29,7 @@
> #include "qemu-common.h"
> #include "trace.h"
> #include "block_int.h"
> +#include "iov.h"
>
> #include "block/raw-posix-aio.h"
>
> @@ -351,11 +352,8 @@ static void *aio_thread(void *unused)
> if (ret>= 0&& ret< aiocb->aio_nbytes&& aiocb->common.bs->growable) {
> /* A short read means that we have reached EOF. Pad the buffer
> * with zeros for bytes after EOF. */
> - QEMUIOVector qiov;
> -
> - qemu_iovec_init_external(&qiov, aiocb->aio_iov,
> - aiocb->aio_niov);
> - qemu_iovec_memset_skip(&qiov, 0, aiocb->aio_nbytes - ret, ret);
> + iov_memset(aiocb->aio_iov, aiocb->aio_niov, ret,
> + 0, aiocb->aio_nbytes - ret);
>
> ret = aiocb->aio_nbytes;
> }
> diff --git a/qemu-common.h b/qemu-common.h
> index b0fdf5c..3c556c8 100644
> --- a/qemu-common.h
> +++ b/qemu-common.h
> @@ -344,9 +344,8 @@ void qemu_iovec_destroy(QEMUIOVector *qiov);
> void qemu_iovec_reset(QEMUIOVector *qiov);
> void qemu_iovec_to_buffer(QEMUIOVector *qiov, void *buf);
> void qemu_iovec_from_buffer(QEMUIOVector *qiov, const void *buf, size_t count);
> -void qemu_iovec_memset(QEMUIOVector *qiov, int c, size_t count);
> -void qemu_iovec_memset_skip(QEMUIOVector *qiov, int c, size_t count,
> - size_t skip);
> +size_t qemu_iovec_memset(QEMUIOVector *qiov, size_t offset,
> + int fillc, size_t bytes);
>
> bool buffer_is_zero(const void *buf, size_t len);
>
next prev parent reply other threads:[~2012-03-16 16:19 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-15 21:00 [Qemu-devel] [PATCHv4 00/11] cleanup/consolidate iovec functions Michael Tokarev
2012-03-15 21:00 ` [Qemu-devel] [PATCHv4 01/11] virtio-serial-bus: use correct lengths in control_out() message Michael Tokarev
2012-03-16 16:12 ` Anthony Liguori
2012-03-16 16:34 ` Michael Tokarev
2012-03-15 21:00 ` [Qemu-devel] [PATCHv4 02/11] change iov_* function prototypes to be more appropriate Michael Tokarev
2012-03-16 16:14 ` Anthony Liguori
2012-03-16 16:28 ` Michael Tokarev
2012-03-15 21:00 ` [Qemu-devel] [PATCHv4 03/11] rewrite iov_* functions Michael Tokarev
2012-03-16 16:17 ` Anthony Liguori
2012-03-16 19:30 ` Michael Tokarev
2012-03-16 16:17 ` Anthony Liguori
2012-03-15 21:00 ` [Qemu-devel] [PATCHv4 04/11] consolidate qemu_iovec_memset{, _skip}() into single function and use existing iov_memset() Michael Tokarev
2012-03-16 16:19 ` Anthony Liguori [this message]
2012-03-19 14:36 ` Stefan Hajnoczi
2012-03-19 20:04 ` Michael Tokarev
2012-03-19 20:10 ` Anthony Liguori
2012-03-20 9:30 ` Stefan Hajnoczi
2012-03-15 21:00 ` [Qemu-devel] [PATCHv4 05/11] allow qemu_iovec_from_buffer() to specify offset from which to start copying Michael Tokarev
2012-03-16 16:19 ` Anthony Liguori
2012-03-16 19:35 ` Michael Tokarev
2012-03-15 21:00 ` [Qemu-devel] [PATCHv4 06/11] consolidate qemu_iovec_copy() and qemu_iovec_concat() and make them consistent Michael Tokarev
2012-03-15 21:00 ` [Qemu-devel] [PATCHv4 07/11] change qemu_iovec_to_buf() to match other to, from_buf functions Michael Tokarev
2012-03-15 21:00 ` [Qemu-devel] [PATCHv4 08/11] rename qemu_sendv to iov_send, change proto and move declarations to iov.h Michael Tokarev
2012-03-15 21:00 ` [Qemu-devel] [PATCHv4 09/11] export iov_send_recv() and use it in iov_send() and iov_recv() Michael Tokarev
2012-03-16 16:21 ` Anthony Liguori
2012-03-16 16:43 ` Michael Tokarev
2012-03-15 21:00 ` [Qemu-devel] [PATCHv4 10/11] cleanup qemu_co_sendv(), qemu_co_recvv() and friends Michael Tokarev
2012-03-16 16:22 ` Anthony Liguori
2012-03-16 19:37 ` Michael Tokarev
2012-03-15 21:00 ` [Qemu-devel] [PATCHv4 11/11] rewrite iov_send_recv() and move it to iov.c Michael Tokarev
2012-03-16 16:23 ` Anthony Liguori
2012-03-16 11:36 ` [Qemu-devel] [PATCHv4 00/11] cleanup/consolidate iovec functions Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F6367F7.7040506@redhat.com \
--to=anthony@codemonkey.ws \
--cc=kwolf@redhat.com \
--cc=mjt@tls.msk.ru \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.