From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org,
Stefan Hajnoczi <stefanha@redhat.com>,
Hailiang Zhang <zhang.zhanghailiang@huawei.com>,
Juan Quintela <quintela@redhat.com>, Fam Zheng <fam@euphon.net>
Subject: Re: [PATCH 11/20] migration: hardcode assumption that QEMUFile is backed with QIOChannel
Date: Thu, 9 Jun 2022 16:01:46 +0100 [thread overview]
Message-ID: <YqILWrfAPkfr2VuZ@work-vm> (raw)
In-Reply-To: <20220524110235.145079-12-berrange@redhat.com>
* Daniel P. Berrangé (berrange@redhat.com) wrote:
> The only callers of qemu_fopen_ops pass 'true' for the 'has_ioc'
> parameter, so hardcode this assumption in QEMUFile, by passing in
> the QIOChannel object as a non-opaque parameter.
>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> migration/qemu-file-channel.c | 4 ++--
> migration/qemu-file.c | 35 +++++++++++++++++------------------
> migration/qemu-file.h | 2 +-
> 3 files changed, 20 insertions(+), 21 deletions(-)
>
> diff --git a/migration/qemu-file-channel.c b/migration/qemu-file-channel.c
> index bb5a5752df..ce8eced417 100644
> --- a/migration/qemu-file-channel.c
> +++ b/migration/qemu-file-channel.c
> @@ -184,11 +184,11 @@ static const QEMUFileOps channel_output_ops = {
> QEMUFile *qemu_fopen_channel_input(QIOChannel *ioc)
> {
> object_ref(OBJECT(ioc));
> - return qemu_fopen_ops(ioc, &channel_input_ops, true);
> + return qemu_fopen_ops(ioc, &channel_input_ops);
> }
>
> QEMUFile *qemu_fopen_channel_output(QIOChannel *ioc)
> {
> object_ref(OBJECT(ioc));
> - return qemu_fopen_ops(ioc, &channel_output_ops, true);
> + return qemu_fopen_ops(ioc, &channel_output_ops);
> }
> diff --git a/migration/qemu-file.c b/migration/qemu-file.c
> index 6badc8b0ec..ea1e8da0cb 100644
> --- a/migration/qemu-file.c
> +++ b/migration/qemu-file.c
> @@ -37,7 +37,7 @@
> struct QEMUFile {
> const QEMUFileOps *ops;
> const QEMUFileHooks *hooks;
> - void *opaque;
> + QIOChannel *ioc;
>
> /*
> * Maximum amount of data in bytes to transfer during one
> @@ -65,8 +65,6 @@ struct QEMUFile {
> Error *last_error_obj;
> /* has the file has been shutdown */
> bool shutdown;
> - /* Whether opaque points to a QIOChannel */
> - bool has_ioc;
> };
>
> /*
> @@ -81,7 +79,7 @@ int qemu_file_shutdown(QEMUFile *f)
> if (!f->ops->shut_down) {
> return -ENOSYS;
> }
> - ret = f->ops->shut_down(f->opaque, true, true, NULL);
> + ret = f->ops->shut_down(f->ioc, true, true, NULL);
>
> if (!f->last_error) {
> qemu_file_set_error(f, -EIO);
> @@ -98,7 +96,7 @@ QEMUFile *qemu_file_get_return_path(QEMUFile *f)
> if (!f->ops->get_return_path) {
> return NULL;
> }
> - return f->ops->get_return_path(f->opaque);
> + return f->ops->get_return_path(f->ioc);
> }
>
> bool qemu_file_mode_is_not_valid(const char *mode)
> @@ -113,15 +111,15 @@ bool qemu_file_mode_is_not_valid(const char *mode)
> return false;
> }
>
> -QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops, bool has_ioc)
> +QEMUFile *qemu_fopen_ops(QIOChannel *ioc, const QEMUFileOps *ops)
> {
> QEMUFile *f;
>
> f = g_new0(QEMUFile, 1);
>
> - f->opaque = opaque;
> + f->ioc = ioc;
> f->ops = ops;
> - f->has_ioc = has_ioc;
> +
> return f;
> }
>
> @@ -242,7 +240,7 @@ void qemu_fflush(QEMUFile *f)
> }
> if (f->iovcnt > 0) {
> expect = iov_size(f->iov, f->iovcnt);
> - ret = f->ops->writev_buffer(f->opaque, f->iov, f->iovcnt, f->total_transferred,
> + ret = f->ops->writev_buffer(f->ioc, f->iov, f->iovcnt, f->total_transferred,
> &local_error);
>
> qemu_iovec_release_ram(f);
> @@ -358,7 +356,7 @@ static ssize_t qemu_fill_buffer(QEMUFile *f)
> return 0;
> }
>
> - len = f->ops->get_buffer(f->opaque, f->buf + pending, f->total_transferred,
> + len = f->ops->get_buffer(f->ioc, f->buf + pending, f->total_transferred,
> IO_BUF_SIZE - pending, &local_error);
> if (len > 0) {
> f->buf_size += len;
> @@ -394,7 +392,7 @@ int qemu_fclose(QEMUFile *f)
> ret = qemu_file_get_error(f);
>
> if (f->ops->close) {
> - int ret2 = f->ops->close(f->opaque, NULL);
> + int ret2 = f->ops->close(f->ioc, NULL);
> if (ret >= 0) {
> ret = ret2;
> }
> @@ -861,18 +859,19 @@ void qemu_put_counted_string(QEMUFile *f, const char *str)
> void qemu_file_set_blocking(QEMUFile *f, bool block)
> {
> if (f->ops->set_blocking) {
> - f->ops->set_blocking(f->opaque, block, NULL);
> + f->ops->set_blocking(f->ioc, block, NULL);
> }
> }
>
> /*
> - * Return the ioc object if it's a migration channel. Note: it can return NULL
> - * for callers passing in a non-migration qemufile. E.g. see qemu_fopen_bdrv()
> - * and its usage in e.g. load_snapshot(). So we need to check against NULL
> - * before using it. If without the check, migration_incoming_state_destroy()
> - * could fail for load_snapshot().
> + * qemu_file_get_ioc:
> + *
> + * Get the ioc object for the file, without incrementing
> + * the reference count.
> + *
> + * Returns: the ioc object
> */
> QIOChannel *qemu_file_get_ioc(QEMUFile *file)
> {
> - return file->has_ioc ? QIO_CHANNEL(file->opaque) : NULL;
> + return file->ioc;
> }
> diff --git a/migration/qemu-file.h b/migration/qemu-file.h
> index 6310071f90..0458b1d3b6 100644
> --- a/migration/qemu-file.h
> +++ b/migration/qemu-file.h
> @@ -118,7 +118,7 @@ typedef struct QEMUFileHooks {
> QEMURamSaveFunc *save_page;
> } QEMUFileHooks;
>
> -QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops, bool has_ioc);
> +QEMUFile *qemu_fopen_ops(QIOChannel *ioc, const QEMUFileOps *ops);
> void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks *hooks);
> int qemu_get_fd(QEMUFile *f);
> int qemu_fclose(QEMUFile *f);
> --
> 2.36.1
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2022-06-09 16:20 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-24 11:02 [PATCH 00/20] migration: remove QEMUFileOps concept and assume use of QIOChannel Daniel P. Berrangé
2022-05-24 11:02 ` [PATCH 01/20] io: add a QIOChannelNull equivalent to /dev/null Daniel P. Berrangé
2022-05-24 21:14 ` Eric Blake
2022-06-16 16:26 ` Daniel P. Berrangé
2022-05-24 11:02 ` [PATCH 02/20] migration: switch to use QIOChannelNull for dummy channel Daniel P. Berrangé
2022-05-24 21:15 ` Eric Blake
2022-05-24 11:02 ` [PATCH 03/20] migration: remove unreachble RDMA code in save_hook impl Daniel P. Berrangé
2022-05-25 12:29 ` Eric Blake
2022-06-08 17:59 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 04/20] migration: rename rate limiting fields in QEMUFile Daniel P. Berrangé
2022-06-09 9:29 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 05/20] migration: rename 'pos' field in QEMUFile to 'bytes_processed' Daniel P. Berrangé
2022-06-09 9:51 ` Dr. David Alan Gilbert
2022-06-09 9:57 ` Daniel P. Berrangé
2022-06-09 9:59 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 06/20] migration: rename qemu_ftell to qemu_file_total_transferred Daniel P. Berrangé
2022-06-09 10:23 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 07/20] migration: rename qemu_update_position to qemu_file_credit_transfer Daniel P. Berrangé
2022-06-09 10:29 ` Dr. David Alan Gilbert
2022-06-09 12:56 ` Peter Maydell
2022-06-09 13:02 ` Daniel P. Berrangé
2022-06-09 13:15 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 08/20] migration: introduce a QIOChannel impl for BlockDriverState VMState Daniel P. Berrangé
2022-05-24 11:02 ` [PATCH 09/20] migration: convert savevm to use QIOChannelBlock for VMState Daniel P. Berrangé
2022-06-09 14:57 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 10/20] migration: stop passing 'opaque' parameter to QEMUFile hooks Daniel P. Berrangé
2022-06-09 15:00 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 11/20] migration: hardcode assumption that QEMUFile is backed with QIOChannel Daniel P. Berrangé
2022-06-09 15:01 ` Dr. David Alan Gilbert [this message]
2022-05-24 11:02 ` [PATCH 12/20] migration: introduce new constructors for QEMUFile Daniel P. Berrangé
2022-06-09 15:33 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 13/20] migration: remove unused QEMUFileGetFD typedef Daniel P. Berrangé
2022-06-09 16:03 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 14/20] migration: remove the QEMUFileOps 'shut_down' callback Daniel P. Berrangé
2022-06-09 16:12 ` Dr. David Alan Gilbert
2022-06-09 16:14 ` Daniel P. Berrangé
2022-06-09 16:17 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 15/20] migration: remove the QEMUFileOps 'set_blocking' callback Daniel P. Berrangé
2022-06-09 16:21 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 16/20] migration: remove the QEMUFileOps 'close' callback Daniel P. Berrangé
2022-06-09 16:40 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 17/20] migration: remove the QEMUFileOps 'get_buffer' callback Daniel P. Berrangé
2022-06-09 16:46 ` Dr. David Alan Gilbert
2022-06-09 17:09 ` Daniel P. Berrangé
2022-05-24 11:02 ` [PATCH 18/20] migration: remove the QEMUFileOps 'writev_buffer' callback Daniel P. Berrangé
2022-06-09 16:51 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 19/20] migration: remove the QEMUFileOps 'get_return_path' callback Daniel P. Berrangé
2022-06-09 16:54 ` Dr. David Alan Gilbert
2022-05-24 11:02 ` [PATCH 20/20] migration: remove the QEMUFileOps abstraction Daniel P. Berrangé
2022-06-09 16:59 ` Dr. David Alan Gilbert
2022-06-09 17:10 ` Daniel P. Berrangé
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=YqILWrfAPkfr2VuZ@work-vm \
--to=dgilbert@redhat.com \
--cc=berrange@redhat.com \
--cc=fam@euphon.net \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=stefanha@redhat.com \
--cc=zhang.zhanghailiang@huawei.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.