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 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.