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 20/20] migration: remove the QEMUFileOps abstraction
Date: Thu, 9 Jun 2022 17:59:00 +0100 [thread overview]
Message-ID: <YqIm1EtrZXSiWX7Z@work-vm> (raw)
In-Reply-To: <20220524110235.145079-21-berrange@redhat.com>
* Daniel P. Berrangé (berrange@redhat.com) wrote:
> Now that all QEMUFile callbacks are removed, the entire concept can be
> deleted.
>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
I think that's OK, there's one nit - you remove qemu_get_fd from one of
the headers; I think that probably belongs in an earlier patch.
Other than that,
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> migration/channel.c | 4 +--
> migration/colo.c | 5 ++--
> migration/meson.build | 1 -
> migration/migration.c | 7 ++---
> migration/qemu-file-channel.c | 53 -----------------------------------
> migration/qemu-file-channel.h | 32 ---------------------
> migration/qemu-file.c | 20 ++++++-------
> migration/qemu-file.h | 8 ++----
> migration/ram.c | 3 +-
> migration/rdma.c | 5 ++--
> migration/savevm.c | 11 ++++----
> tests/unit/test-vmstate.c | 5 ++--
> 12 files changed, 27 insertions(+), 127 deletions(-)
> delete mode 100644 migration/qemu-file-channel.c
> delete mode 100644 migration/qemu-file-channel.h
>
> diff --git a/migration/channel.c b/migration/channel.c
> index a162d00fea..90087d8986 100644
> --- a/migration/channel.c
> +++ b/migration/channel.c
> @@ -14,7 +14,7 @@
> #include "channel.h"
> #include "tls.h"
> #include "migration.h"
> -#include "qemu-file-channel.h"
> +#include "qemu-file.h"
> #include "trace.h"
> #include "qapi/error.h"
> #include "io/channel-tls.h"
> @@ -85,7 +85,7 @@ void migration_channel_connect(MigrationState *s,
> return;
> }
> } else {
> - QEMUFile *f = qemu_fopen_channel_output(ioc);
> + QEMUFile *f = qemu_file_new_output(ioc);
>
> migration_ioc_register_yank(ioc);
>
> diff --git a/migration/colo.c b/migration/colo.c
> index 5f7071b3cd..2b71722fd6 100644
> --- a/migration/colo.c
> +++ b/migration/colo.c
> @@ -14,7 +14,6 @@
> #include "sysemu/sysemu.h"
> #include "qapi/error.h"
> #include "qapi/qapi-commands-migration.h"
> -#include "qemu-file-channel.h"
> #include "migration.h"
> #include "qemu-file.h"
> #include "savevm.h"
> @@ -559,7 +558,7 @@ static void colo_process_checkpoint(MigrationState *s)
> goto out;
> }
> bioc = qio_channel_buffer_new(COLO_BUFFER_BASE_SIZE);
> - fb = qemu_fopen_channel_output(QIO_CHANNEL(bioc));
> + fb = qemu_file_new_output(QIO_CHANNEL(bioc));
> object_unref(OBJECT(bioc));
>
> qemu_mutex_lock_iothread();
> @@ -873,7 +872,7 @@ void *colo_process_incoming_thread(void *opaque)
> colo_incoming_start_dirty_log();
>
> bioc = qio_channel_buffer_new(COLO_BUFFER_BASE_SIZE);
> - fb = qemu_fopen_channel_input(QIO_CHANNEL(bioc));
> + fb = qemu_file_new_input(QIO_CHANNEL(bioc));
> object_unref(OBJECT(bioc));
>
> qemu_mutex_lock_iothread();
> diff --git a/migration/meson.build b/migration/meson.build
> index 8d309f5849..690487cf1a 100644
> --- a/migration/meson.build
> +++ b/migration/meson.build
> @@ -4,7 +4,6 @@ migration_files = files(
> 'xbzrle.c',
> 'vmstate-types.c',
> 'vmstate.c',
> - 'qemu-file-channel.c',
> 'qemu-file.c',
> 'yank_functions.c',
> )
> diff --git a/migration/migration.c b/migration/migration.c
> index ab1e9610ef..8a30ef17d9 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -30,7 +30,6 @@
> #include "migration/misc.h"
> #include "migration.h"
> #include "savevm.h"
> -#include "qemu-file-channel.h"
> #include "qemu-file.h"
> #include "migration/vmstate.h"
> #include "block/block.h"
> @@ -722,7 +721,7 @@ void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp)
>
> if (!mis->from_src_file) {
> /* The first connection (multifd may have multiple) */
> - QEMUFile *f = qemu_fopen_channel_input(ioc);
> + QEMUFile *f = qemu_file_new_input(ioc);
>
> if (!migration_incoming_setup(f, errp)) {
> return;
> @@ -3081,7 +3080,7 @@ static int postcopy_start(MigrationState *ms)
> */
> bioc = qio_channel_buffer_new(4096);
> qio_channel_set_name(QIO_CHANNEL(bioc), "migration-postcopy-buffer");
> - fb = qemu_fopen_channel_output(QIO_CHANNEL(bioc));
> + fb = qemu_file_new_output(QIO_CHANNEL(bioc));
> object_unref(OBJECT(bioc));
>
> /*
> @@ -3970,7 +3969,7 @@ static void *bg_migration_thread(void *opaque)
> */
> s->bioc = qio_channel_buffer_new(512 * 1024);
> qio_channel_set_name(QIO_CHANNEL(s->bioc), "vmstate-buffer");
> - fb = qemu_fopen_channel_output(QIO_CHANNEL(s->bioc));
> + fb = qemu_file_new_output(QIO_CHANNEL(s->bioc));
> object_unref(OBJECT(s->bioc));
>
> update_iteration_initial_status(s);
> diff --git a/migration/qemu-file-channel.c b/migration/qemu-file-channel.c
> deleted file mode 100644
> index 51717c1137..0000000000
> --- a/migration/qemu-file-channel.c
> +++ /dev/null
> @@ -1,53 +0,0 @@
> -/*
> - * QEMUFile backend for QIOChannel objects
> - *
> - * Copyright (c) 2015-2016 Red Hat, Inc
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a copy
> - * of this software and associated documentation files (the "Software"), to deal
> - * in the Software without restriction, including without limitation the rights
> - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> - * copies of the Software, and to permit persons to whom the Software is
> - * furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice shall be included in
> - * all copies or substantial portions of the Software.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> - * THE SOFTWARE.
> - */
> -
> -#include "qemu/osdep.h"
> -#include "qemu-file-channel.h"
> -#include "qemu-file.h"
> -#include "io/channel-socket.h"
> -#include "io/channel-tls.h"
> -#include "qemu/iov.h"
> -#include "qemu/yank.h"
> -#include "yank_functions.h"
> -
> -
> -static const QEMUFileOps channel_input_ops = {
> -};
> -
> -
> -static const QEMUFileOps channel_output_ops = {
> -};
> -
> -
> -QEMUFile *qemu_fopen_channel_input(QIOChannel *ioc)
> -{
> - object_ref(OBJECT(ioc));
> - return qemu_file_new_input(ioc, &channel_input_ops);
> -}
> -
> -QEMUFile *qemu_fopen_channel_output(QIOChannel *ioc)
> -{
> - object_ref(OBJECT(ioc));
> - return qemu_file_new_output(ioc, &channel_output_ops);
> -}
> diff --git a/migration/qemu-file-channel.h b/migration/qemu-file-channel.h
> deleted file mode 100644
> index 0028a09eb6..0000000000
> --- a/migration/qemu-file-channel.h
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -/*
> - * QEMUFile backend for QIOChannel objects
> - *
> - * Copyright (c) 2015-2016 Red Hat, Inc
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a copy
> - * of this software and associated documentation files (the "Software"), to deal
> - * in the Software without restriction, including without limitation the rights
> - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> - * copies of the Software, and to permit persons to whom the Software is
> - * furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice shall be included in
> - * all copies or substantial portions of the Software.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> - * THE SOFTWARE.
> - */
> -
> -#ifndef QEMU_FILE_CHANNEL_H
> -#define QEMU_FILE_CHANNEL_H
> -
> -#include "io/channel.h"
> -
> -QEMUFile *qemu_fopen_channel_input(QIOChannel *ioc);
> -QEMUFile *qemu_fopen_channel_output(QIOChannel *ioc);
> -#endif
> diff --git a/migration/qemu-file.c b/migration/qemu-file.c
> index dfee808924..81688b7a23 100644
> --- a/migration/qemu-file.c
> +++ b/migration/qemu-file.c
> @@ -35,7 +35,6 @@
> #define MAX_IOV_SIZE MIN_CONST(IOV_MAX, 64)
>
> struct QEMUFile {
> - const QEMUFileOps *ops;
> const QEMUFileHooks *hooks;
> QIOChannel *ioc;
> bool is_writable;
> @@ -104,16 +103,14 @@ bool qemu_file_mode_is_not_valid(const char *mode)
> return false;
> }
>
> -static QEMUFile *qemu_file_new_impl(QIOChannel *ioc,
> - const QEMUFileOps *ops,
> - bool is_writable)
> +static QEMUFile *qemu_file_new_impl(QIOChannel *ioc, bool is_writable)
> {
> QEMUFile *f;
>
> f = g_new0(QEMUFile, 1);
>
> + object_ref(ioc);
> f->ioc = ioc;
> - f->ops = ops;
> f->is_writable = is_writable;
>
> return f;
> @@ -125,21 +122,19 @@ static QEMUFile *qemu_file_new_impl(QIOChannel *ioc,
> */
> QEMUFile *qemu_file_get_return_path(QEMUFile *f)
> {
> - object_ref(f->ioc);
> - return qemu_file_new_impl(f->ioc, f->ops, !f->is_writable);
> + return qemu_file_new_impl(f->ioc, !f->is_writable);
> }
>
> -QEMUFile *qemu_file_new_output(QIOChannel *ioc, const QEMUFileOps *ops)
> +QEMUFile *qemu_file_new_output(QIOChannel *ioc)
> {
> - return qemu_file_new_impl(ioc, ops, true);
> + return qemu_file_new_impl(ioc, true);
> }
>
> -QEMUFile *qemu_file_new_input(QIOChannel *ioc, const QEMUFileOps *ops)
> +QEMUFile *qemu_file_new_input(QIOChannel *ioc)
> {
> - return qemu_file_new_impl(ioc, ops, false);
> + return qemu_file_new_impl(ioc, false);
> }
>
> -
> void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks *hooks)
> {
> f->hooks = hooks;
> @@ -235,6 +230,7 @@ static void qemu_iovec_release_ram(QEMUFile *f)
> memset(f->may_free, 0, sizeof(f->may_free));
> }
>
> +
> /**
> * Flushes QEMUFile buffer
> *
> diff --git a/migration/qemu-file.h b/migration/qemu-file.h
> index 5370e4e5ec..12e625f96a 100644
> --- a/migration/qemu-file.h
> +++ b/migration/qemu-file.h
> @@ -55,9 +55,6 @@ typedef size_t (QEMURamSaveFunc)(QEMUFile *f,
> size_t size,
> uint64_t *bytes_sent);
>
> -typedef struct QEMUFileOps {
> -} QEMUFileOps;
> -
> typedef struct QEMUFileHooks {
> QEMURamHookFunc *before_ram_iterate;
> QEMURamHookFunc *after_ram_iterate;
> @@ -65,10 +62,9 @@ typedef struct QEMUFileHooks {
> QEMURamSaveFunc *save_page;
> } QEMUFileHooks;
>
> -QEMUFile *qemu_file_new_input(QIOChannel *ioc, const QEMUFileOps *ops);
> -QEMUFile *qemu_file_new_output(QIOChannel *ioc, const QEMUFileOps *ops);
> +QEMUFile *qemu_file_new_input(QIOChannel *ioc);
> +QEMUFile *qemu_file_new_output(QIOChannel *ioc);
> void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks *hooks);
> -int qemu_get_fd(QEMUFile *f);
> int qemu_fclose(QEMUFile *f);
>
> /*
> diff --git a/migration/ram.c b/migration/ram.c
> index bf321e1e72..01f9cc1d72 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -38,7 +38,6 @@
> #include "migration.h"
> #include "migration/register.h"
> #include "migration/misc.h"
> -#include "migration/qemu-file-channel.h"
> #include "qemu-file.h"
> #include "postcopy-ram.h"
> #include "page_cache.h"
> @@ -569,7 +568,7 @@ static int compress_threads_save_setup(void)
> /* comp_param[i].file is just used as a dummy buffer to save data,
> * set its ops to empty.
> */
> - comp_param[i].file = qemu_fopen_channel_output(
> + comp_param[i].file = qemu_file_new_output(
> QIO_CHANNEL(qio_channel_null_new()));
> comp_param[i].done = true;
> comp_param[i].quit = false;
> diff --git a/migration/rdma.c b/migration/rdma.c
> index 83265513d9..49e6dba323 100644
> --- a/migration/rdma.c
> +++ b/migration/rdma.c
> @@ -21,7 +21,6 @@
> #include "migration.h"
> #include "qemu-file.h"
> #include "ram.h"
> -#include "qemu-file-channel.h"
> #include "qemu/error-report.h"
> #include "qemu/main-loop.h"
> #include "qemu/module.h"
> @@ -4093,12 +4092,12 @@ static QEMUFile *qemu_fopen_rdma(RDMAContext *rdma, const char *mode)
> rioc = QIO_CHANNEL_RDMA(object_new(TYPE_QIO_CHANNEL_RDMA));
>
> if (mode[0] == 'w') {
> - rioc->file = qemu_fopen_channel_output(QIO_CHANNEL(rioc));
> + rioc->file = qemu_file_new_output(QIO_CHANNEL(rioc));
> rioc->rdmaout = rdma;
> rioc->rdmain = rdma->return_path;
> qemu_file_set_hooks(rioc->file, &rdma_write_hooks);
> } else {
> - rioc->file = qemu_fopen_channel_input(QIO_CHANNEL(rioc));
> + rioc->file = qemu_file_new_input(QIO_CHANNEL(rioc));
> rioc->rdmain = rdma;
> rioc->rdmaout = rdma->return_path;
> qemu_file_set_hooks(rioc->file, &rdma_read_hooks);
> diff --git a/migration/savevm.c b/migration/savevm.c
> index 24a50376dc..e8a1b96fcd 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -37,7 +37,6 @@
> #include "migration/global_state.h"
> #include "migration/channel-block.h"
> #include "ram.h"
> -#include "qemu-file-channel.h"
> #include "qemu-file.h"
> #include "savevm.h"
> #include "postcopy-ram.h"
> @@ -134,9 +133,9 @@ static struct mig_cmd_args {
> static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int is_writable)
> {
> if (is_writable) {
> - return qemu_fopen_channel_output(QIO_CHANNEL(qio_channel_block_new(bs)));
> + return qemu_file_new_output(QIO_CHANNEL(qio_channel_block_new(bs)));
> } else {
> - return qemu_fopen_channel_input(QIO_CHANNEL(qio_channel_block_new(bs)));
> + return qemu_file_new_input(QIO_CHANNEL(qio_channel_block_new(bs)));
> }
> }
>
> @@ -2159,7 +2158,7 @@ static int loadvm_handle_cmd_packaged(MigrationIncomingState *mis)
> bioc->usage += length;
> trace_loadvm_handle_cmd_packaged_received(ret);
>
> - QEMUFile *packf = qemu_fopen_channel_input(QIO_CHANNEL(bioc));
> + QEMUFile *packf = qemu_file_new_input(QIO_CHANNEL(bioc));
>
> ret = qemu_loadvm_state_main(packf, mis);
> trace_loadvm_handle_cmd_packaged_main(ret);
> @@ -2917,7 +2916,7 @@ void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live,
> goto the_end;
> }
> qio_channel_set_name(QIO_CHANNEL(ioc), "migration-xen-save-state");
> - f = qemu_fopen_channel_output(QIO_CHANNEL(ioc));
> + f = qemu_file_new_output(QIO_CHANNEL(ioc));
> object_unref(OBJECT(ioc));
> ret = qemu_save_device_state(f);
> if (ret < 0 || qemu_fclose(f) < 0) {
> @@ -2964,7 +2963,7 @@ void qmp_xen_load_devices_state(const char *filename, Error **errp)
> return;
> }
> qio_channel_set_name(QIO_CHANNEL(ioc), "migration-xen-load-state");
> - f = qemu_fopen_channel_input(QIO_CHANNEL(ioc));
> + f = qemu_file_new_input(QIO_CHANNEL(ioc));
> object_unref(OBJECT(ioc));
>
> ret = qemu_loadvm_state(f);
> diff --git a/tests/unit/test-vmstate.c b/tests/unit/test-vmstate.c
> index 6a417bb102..72077b5780 100644
> --- a/tests/unit/test-vmstate.c
> +++ b/tests/unit/test-vmstate.c
> @@ -28,7 +28,6 @@
> #include "migration/vmstate.h"
> #include "migration/qemu-file-types.h"
> #include "../migration/qemu-file.h"
> -#include "../migration/qemu-file-channel.h"
> #include "../migration/savevm.h"
> #include "qemu/coroutine.h"
> #include "qemu/module.h"
> @@ -52,9 +51,9 @@ static QEMUFile *open_test_file(bool write)
> }
> ioc = QIO_CHANNEL(qio_channel_file_new_fd(fd));
> if (write) {
> - f = qemu_fopen_channel_output(ioc);
> + f = qemu_file_new_output(ioc);
> } else {
> - f = qemu_fopen_channel_input(ioc);
> + f = qemu_file_new_input(ioc);
> }
> object_unref(OBJECT(ioc));
> return f;
> --
> 2.36.1
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2022-06-09 19:16 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
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 [this message]
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=YqIm1EtrZXSiWX7Z@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).