From: Greg Kurz <groug@kaod.org>
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: aneesh.kumar@linux.vnet.ibm.com, xen-devel@lists.xensource.com,
wei.liu2@citrix.com, qemu-devel@nongnu.org,
anthony.perard@citrix.com
Subject: Re: [Qemu-devel] [PATCH 3/4] 9pfs: use v9fs_init_qiov_from_pdu instead of v9fs_pack
Date: Thu, 24 Nov 2016 15:48:11 +0100 [thread overview]
Message-ID: <20161124154811.3a52d44c@bahia> (raw)
In-Reply-To: <1479764372-29470-3-git-send-email-sstabellini@kernel.org>
On Mon, 21 Nov 2016 13:39:31 -0800
Stefano Stabellini <sstabellini@kernel.org> wrote:
> v9fs_xattr_read should not access VirtQueueElement elems directly.
> Move v9fs_init_qiov_from_pdu up in the file and call
> v9fs_init_qiov_from_pdu instead of v9fs_pack.
>
instead of ? I see v9fs_init_qiov_from_pdu() gets called before calling v9fs_pack().
Also, I don't see the corresponding call to qemu_iovec_destroy() to free the
allocated iovec.
> Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
> ---
> hw/9pfs/9p.c | 58 +++++++++++++++++++++++++++++-----------------------------
> 1 file changed, 29 insertions(+), 29 deletions(-)
>
> diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
> index 5a20a13..b6ec042 100644
> --- a/hw/9pfs/9p.c
> +++ b/hw/9pfs/9p.c
> @@ -1633,14 +1633,39 @@ out_nofid:
> pdu_complete(pdu, err);
> }
>
> +/*
> + * Create a QEMUIOVector for a sub-region of PDU iovecs
> + *
> + * @qiov: uninitialized QEMUIOVector
> + * @skip: number of bytes to skip from beginning of PDU
> + * @size: number of bytes to include
> + * @is_write: true - write, false - read
> + *
> + * The resulting QEMUIOVector has heap-allocated iovecs and must be cleaned up
> + * with qemu_iovec_destroy().
> + */
> +static void v9fs_init_qiov_from_pdu(QEMUIOVector *qiov, V9fsPDU *pdu,
> + size_t skip, size_t size,
> + bool is_write)
> +{
> + QEMUIOVector elem;
> + struct iovec *iov;
> + unsigned int niov;
> +
> + pdu->s->transport->init_iov_from_pdu(pdu, &iov, &niov, is_write);
> +
> + qemu_iovec_init_external(&elem, iov, niov);
> + qemu_iovec_init(qiov, niov);
> + qemu_iovec_concat(qiov, &elem, skip, size);
> +}
> +
> static int v9fs_xattr_read(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp,
> uint64_t off, uint32_t max_count)
> {
> ssize_t err;
> size_t offset = 7;
> uint64_t read_count;
> - V9fsVirtioState *v = container_of(s, V9fsVirtioState, state);
> - VirtQueueElement *elem = v->elems[pdu->idx];
> + QEMUIOVector qiov_full;
>
> if (fidp->fs.xattr.len < off) {
> read_count = 0;
> @@ -1656,7 +1681,8 @@ static int v9fs_xattr_read(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp,
> }
> offset += err;
>
> - err = v9fs_pack(elem->in_sg, elem->in_num, offset,
> + v9fs_init_qiov_from_pdu(&qiov_full, pdu, 0, read_count, false);
> + err = v9fs_pack(qiov_full.iov, qiov_full.niov, offset,
> ((char *)fidp->fs.xattr.value) + off,
> read_count);
> if (err < 0) {
> @@ -1732,32 +1758,6 @@ static int coroutine_fn v9fs_do_readdir_with_stat(V9fsPDU *pdu,
> return count;
> }
>
> -/*
> - * Create a QEMUIOVector for a sub-region of PDU iovecs
> - *
> - * @qiov: uninitialized QEMUIOVector
> - * @skip: number of bytes to skip from beginning of PDU
> - * @size: number of bytes to include
> - * @is_write: true - write, false - read
> - *
> - * The resulting QEMUIOVector has heap-allocated iovecs and must be cleaned up
> - * with qemu_iovec_destroy().
> - */
> -static void v9fs_init_qiov_from_pdu(QEMUIOVector *qiov, V9fsPDU *pdu,
> - size_t skip, size_t size,
> - bool is_write)
> -{
> - QEMUIOVector elem;
> - struct iovec *iov;
> - unsigned int niov;
> -
> - pdu->s->transport->init_iov_from_pdu(pdu, &iov, &niov, is_write);
> -
> - qemu_iovec_init_external(&elem, iov, niov);
> - qemu_iovec_init(qiov, niov);
> - qemu_iovec_concat(qiov, &elem, skip, size);
> -}
> -
> static void coroutine_fn v9fs_read(void *opaque)
> {
> int32_t fid;
WARNING: multiple messages have this Message-ID (diff)
From: Greg Kurz <groug@kaod.org>
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: anthony.perard@citrix.com, xen-devel@lists.xensource.com,
wei.liu2@citrix.com, aneesh.kumar@linux.vnet.ibm.com,
qemu-devel@nongnu.org
Subject: Re: [PATCH 3/4] 9pfs: use v9fs_init_qiov_from_pdu instead of v9fs_pack
Date: Thu, 24 Nov 2016 15:48:11 +0100 [thread overview]
Message-ID: <20161124154811.3a52d44c@bahia> (raw)
In-Reply-To: <1479764372-29470-3-git-send-email-sstabellini@kernel.org>
On Mon, 21 Nov 2016 13:39:31 -0800
Stefano Stabellini <sstabellini@kernel.org> wrote:
> v9fs_xattr_read should not access VirtQueueElement elems directly.
> Move v9fs_init_qiov_from_pdu up in the file and call
> v9fs_init_qiov_from_pdu instead of v9fs_pack.
>
instead of ? I see v9fs_init_qiov_from_pdu() gets called before calling v9fs_pack().
Also, I don't see the corresponding call to qemu_iovec_destroy() to free the
allocated iovec.
> Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
> ---
> hw/9pfs/9p.c | 58 +++++++++++++++++++++++++++++-----------------------------
> 1 file changed, 29 insertions(+), 29 deletions(-)
>
> diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
> index 5a20a13..b6ec042 100644
> --- a/hw/9pfs/9p.c
> +++ b/hw/9pfs/9p.c
> @@ -1633,14 +1633,39 @@ out_nofid:
> pdu_complete(pdu, err);
> }
>
> +/*
> + * Create a QEMUIOVector for a sub-region of PDU iovecs
> + *
> + * @qiov: uninitialized QEMUIOVector
> + * @skip: number of bytes to skip from beginning of PDU
> + * @size: number of bytes to include
> + * @is_write: true - write, false - read
> + *
> + * The resulting QEMUIOVector has heap-allocated iovecs and must be cleaned up
> + * with qemu_iovec_destroy().
> + */
> +static void v9fs_init_qiov_from_pdu(QEMUIOVector *qiov, V9fsPDU *pdu,
> + size_t skip, size_t size,
> + bool is_write)
> +{
> + QEMUIOVector elem;
> + struct iovec *iov;
> + unsigned int niov;
> +
> + pdu->s->transport->init_iov_from_pdu(pdu, &iov, &niov, is_write);
> +
> + qemu_iovec_init_external(&elem, iov, niov);
> + qemu_iovec_init(qiov, niov);
> + qemu_iovec_concat(qiov, &elem, skip, size);
> +}
> +
> static int v9fs_xattr_read(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp,
> uint64_t off, uint32_t max_count)
> {
> ssize_t err;
> size_t offset = 7;
> uint64_t read_count;
> - V9fsVirtioState *v = container_of(s, V9fsVirtioState, state);
> - VirtQueueElement *elem = v->elems[pdu->idx];
> + QEMUIOVector qiov_full;
>
> if (fidp->fs.xattr.len < off) {
> read_count = 0;
> @@ -1656,7 +1681,8 @@ static int v9fs_xattr_read(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp,
> }
> offset += err;
>
> - err = v9fs_pack(elem->in_sg, elem->in_num, offset,
> + v9fs_init_qiov_from_pdu(&qiov_full, pdu, 0, read_count, false);
> + err = v9fs_pack(qiov_full.iov, qiov_full.niov, offset,
> ((char *)fidp->fs.xattr.value) + off,
> read_count);
> if (err < 0) {
> @@ -1732,32 +1758,6 @@ static int coroutine_fn v9fs_do_readdir_with_stat(V9fsPDU *pdu,
> return count;
> }
>
> -/*
> - * Create a QEMUIOVector for a sub-region of PDU iovecs
> - *
> - * @qiov: uninitialized QEMUIOVector
> - * @skip: number of bytes to skip from beginning of PDU
> - * @size: number of bytes to include
> - * @is_write: true - write, false - read
> - *
> - * The resulting QEMUIOVector has heap-allocated iovecs and must be cleaned up
> - * with qemu_iovec_destroy().
> - */
> -static void v9fs_init_qiov_from_pdu(QEMUIOVector *qiov, V9fsPDU *pdu,
> - size_t skip, size_t size,
> - bool is_write)
> -{
> - QEMUIOVector elem;
> - struct iovec *iov;
> - unsigned int niov;
> -
> - pdu->s->transport->init_iov_from_pdu(pdu, &iov, &niov, is_write);
> -
> - qemu_iovec_init_external(&elem, iov, niov);
> - qemu_iovec_init(qiov, niov);
> - qemu_iovec_concat(qiov, &elem, skip, size);
> -}
> -
> static void coroutine_fn v9fs_read(void *opaque)
> {
> int32_t fid;
next prev parent reply other threads:[~2016-11-24 14:48 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-21 21:39 [Qemu-devel] [PATCH 0/4] 9pfs: clean-up for multiple transports Stefano Stabellini
2016-11-21 21:39 ` Stefano Stabellini
2016-11-21 21:39 ` [Qemu-devel] [PATCH 1/4] 9pfs: move pdus to V9fsState Stefano Stabellini
2016-11-21 21:39 ` Stefano Stabellini
2016-11-21 21:39 ` [Qemu-devel] [PATCH 2/4] 9pfs: introduce transport specific callbacks Stefano Stabellini
2016-11-21 21:39 ` Stefano Stabellini
2016-11-24 8:31 ` [Qemu-devel] " Greg Kurz
2016-11-24 8:31 ` Greg Kurz
2016-11-24 14:23 ` [Qemu-devel] " Greg Kurz
2016-11-24 14:23 ` Greg Kurz
2016-11-24 14:43 ` Greg Kurz
2016-11-24 14:43 ` Greg Kurz
2016-11-28 20:12 ` [Qemu-devel] [Xen-devel] " Stefano Stabellini
2016-11-28 20:12 ` [Qemu-devel] " Stefano Stabellini
2016-11-28 20:11 ` [Qemu-devel] [Xen-devel] " Stefano Stabellini
2016-11-28 20:11 ` [Qemu-devel] " Stefano Stabellini
2016-11-21 21:39 ` [Qemu-devel] [PATCH 3/4] 9pfs: use v9fs_init_qiov_from_pdu instead of v9fs_pack Stefano Stabellini
2016-11-21 21:39 ` Stefano Stabellini
2016-11-24 14:48 ` Greg Kurz [this message]
2016-11-24 14:48 ` Greg Kurz
2016-11-28 20:35 ` [Qemu-devel] " Stefano Stabellini
2016-11-28 20:35 ` Stefano Stabellini
2016-11-21 21:39 ` [Qemu-devel] [PATCH 4/4] 9pfs: add a size parameter to init_iov_from_pdu Stefano Stabellini
2016-11-21 21:39 ` Stefano Stabellini
2016-11-24 16:17 ` [Qemu-devel] " Greg Kurz
2016-11-24 16:17 ` Greg Kurz
2016-11-28 21:21 ` [Qemu-devel] " Stefano Stabellini
2016-11-28 21:21 ` Stefano Stabellini
2016-11-24 8:30 ` [Qemu-devel] [PATCH 1/4] 9pfs: move pdus to V9fsState Greg Kurz
2016-11-24 8:30 ` Greg Kurz
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=20161124154811.3a52d44c@bahia \
--to=groug@kaod.org \
--cc=aneesh.kumar@linux.vnet.ibm.com \
--cc=anthony.perard@citrix.com \
--cc=qemu-devel@nongnu.org \
--cc=sstabellini@kernel.org \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xensource.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.