]> git.proxmox.com Git - mirror_qemu.git/commit
block: add blk_io_plug_call() API
authorStefan Hajnoczi <stefanha@redhat.com>
Tue, 30 May 2023 18:09:54 +0000 (14:09 -0400)
committerStefan Hajnoczi <stefanha@redhat.com>
Thu, 1 Jun 2023 11:34:03 +0000 (07:34 -0400)
commit41abca8c39244b7eeb06378c4aa18b10e0645a1c
tree5bf64a2c7e1e223ac1021b12663543892bb10250
parentc6a5fc2ac76c5ab709896ee1b0edd33685a67ed1
block: add blk_io_plug_call() API

Introduce a new API for thread-local blk_io_plug() that does not
traverse the block graph. The goal is to make blk_io_plug() multi-queue
friendly.

Instead of having block drivers track whether or not we're in a plugged
section, provide an API that allows them to defer a function call until
we're unplugged: blk_io_plug_call(fn, opaque). If blk_io_plug_call() is
called multiple times with the same fn/opaque pair, then fn() is only
called once at the end of the function - resulting in batching.

This patch introduces the API and changes blk_io_plug()/blk_io_unplug().
blk_io_plug()/blk_io_unplug() no longer require a BlockBackend argument
because the plug state is now thread-local.

Later patches convert block drivers to blk_io_plug_call() and then we
can finally remove .bdrv_co_io_plug() once all block drivers have been
converted.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Acked-by: Kevin Wolf <kwolf@redhat.com>
Message-id: 20230530180959.1108766-2-stefanha@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
MAINTAINERS
block/block-backend.c
block/meson.build
block/plug.c [new file with mode: 0644]
hw/block/dataplane/xen-block.c
hw/block/virtio-blk.c
hw/scsi/virtio-scsi.c
include/sysemu/block-backend-io.h