qemu-e2k/block
Stefan Hajnoczi c21eae1ccc block/blkio: fix module_block.py parsing
When QEMU is built with --enable-modules, the module_block.py script
parses block/*.c to find block drivers that are built as modules. The
script generates a table of block drivers called block_driver_modules[].
This table is used for block driver module loading.

The blkio.c driver uses macros to define its BlockDriver structs. This
was done to avoid code duplication but the module_block.py script is
unable to parse the macro. The result is that libblkio-based block
drivers can be built as modules but will not be found at runtime.

One fix is to make the module_block.py script or build system fancier so
it can parse C macros (e.g. by parsing the preprocessed source code). I
chose not to do this because it raises the complexity of the build,
making future issues harder to debug.

Keep things simple: use the macro to avoid duplicating BlockDriver
function pointers but define .format_name and .protocol_name manually
for each BlockDriver. This way the module_block.py is able to parse the
code.

Also get rid of the block driver name macros (e.g. DRIVER_IO_URING)
because module_block.py cannot parse them either.

Fixes: fd66dbd424 ("blkio: add libblkio block driver")
Reported-by: Qing Wang <qinwang@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Message-id: 20230704123436.187761-1-stefanha@redhat.com
Cc: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2023-07-04 17:28:25 +02:00
..
export
monitor
accounting.c
aio_task.c
amend.c
backup.c
blkdebug.c
blkio.c block/blkio: fix module_block.py parsing 2023-07-04 17:28:25 +02:00
blklogwrites.c
blkreplay.c
blkverify.c
block-backend.c
block-copy.c
block-gen.h
block-ram-registrar.c
bochs.c
cloop.c
commit.c
copy-before-write.c
copy-before-write.h
copy-on-read.c
copy-on-read.h
coroutines.h
create.c
crypto.c
crypto.h
curl.c
dirty-bitmap.c
dmg-bz2.c
dmg-lzfse.c
dmg.c
dmg.h
file-posix.c
file-win32.c
filter-compress.c
gluster.c
graph-lock.c
io_uring.c
io.c
iscsi-opts.c
iscsi.c
linux-aio.c
meson.build
mirror.c
nbd.c
nfs.c
null.c
nvme.c
parallels-ext.c
parallels.c
parallels.h
plug.c
preallocate.c
progress_meter.c
qapi-sysemu.c
qapi.c
qcow2-bitmap.c
qcow2-cache.c
qcow2-cluster.c
qcow2-refcount.c
qcow2-snapshot.c
qcow2-threads.c
qcow2.c
qcow2.h
qcow.c
qed-check.c
qed-cluster.c
qed-l2-cache.c
qed-table.c
qed.c
qed.h
quorum.c
raw-format.c
rbd.c
replication.c
reqlist.c
snapshot-access.c
snapshot.c
ssh.c
stream.c
throttle-groups.c
throttle.c
trace-events
trace.h
vdi.c
vhdx-endian.c
vhdx-log.c
vhdx.c
vhdx.h
vmdk.c
vpc.c
vvfat.c
win32-aio.c
write-threshold.c