forked from rpms/qemu-kvm
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
5.6 KiB
152 lines
5.6 KiB
From 458c33c9f19ed01beeb9b2b494ce6ed10d2ed4ac Mon Sep 17 00:00:00 2001
|
|
From: Stefano Garzarella <sgarzare@redhat.com>
|
|
Date: Thu, 27 Jul 2023 18:10:17 +0200
|
|
Subject: [PATCH 03/14] block/blkio: move blkio_connect() in the drivers
|
|
functions
|
|
|
|
RH-Author: Stefano Garzarella <sgarzare@redhat.com>
|
|
RH-MergeRequest: 194: block/blkio: backport latest fixes for virtio-blk-* drivers
|
|
RH-Bugzilla: 2225354 2225439
|
|
RH-Acked-by: Hanna Czenczek <hreitz@redhat.com>
|
|
RH-Acked-by: Alberto Faria <None>
|
|
RH-Commit: [3/6] c356108d7dfe1ba2098c094f8d12b6e40853560c (sgarzarella/qemu-kvm-c-9-s)
|
|
|
|
This is in preparation for the next patch, where for virtio-blk
|
|
drivers we need to handle the failure of blkio_connect().
|
|
|
|
Let's also rename the *_open() functions to *_connect() to make
|
|
the code reflect the changes applied.
|
|
|
|
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
|
|
Message-id: 20230727161020.84213-2-sgarzare@redhat.com
|
|
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
(cherry picked from commit 69785d66ae1ec43f77fc65109a21721992bead9f)
|
|
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
|
|
---
|
|
block/blkio.c | 67 ++++++++++++++++++++++++++++++---------------------
|
|
1 file changed, 40 insertions(+), 27 deletions(-)
|
|
|
|
diff --git a/block/blkio.c b/block/blkio.c
|
|
index 5a82c6cb1a..85d1eed5fb 100644
|
|
--- a/block/blkio.c
|
|
+++ b/block/blkio.c
|
|
@@ -602,8 +602,8 @@ static void blkio_unregister_buf(BlockDriverState *bs, void *host, size_t size)
|
|
}
|
|
}
|
|
|
|
-static int blkio_io_uring_open(BlockDriverState *bs, QDict *options, int flags,
|
|
- Error **errp)
|
|
+static int blkio_io_uring_connect(BlockDriverState *bs, QDict *options,
|
|
+ int flags, Error **errp)
|
|
{
|
|
const char *filename = qdict_get_str(options, "filename");
|
|
BDRVBlkioState *s = bs->opaque;
|
|
@@ -626,11 +626,18 @@ static int blkio_io_uring_open(BlockDriverState *bs, QDict *options, int flags,
|
|
}
|
|
}
|
|
|
|
+ ret = blkio_connect(s->blkio);
|
|
+ if (ret < 0) {
|
|
+ error_setg_errno(errp, -ret, "blkio_connect failed: %s",
|
|
+ blkio_get_error_msg());
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
-static int blkio_nvme_io_uring(BlockDriverState *bs, QDict *options, int flags,
|
|
- Error **errp)
|
|
+static int blkio_nvme_io_uring_connect(BlockDriverState *bs, QDict *options,
|
|
+ int flags, Error **errp)
|
|
{
|
|
const char *path = qdict_get_try_str(options, "path");
|
|
BDRVBlkioState *s = bs->opaque;
|
|
@@ -654,11 +661,18 @@ static int blkio_nvme_io_uring(BlockDriverState *bs, QDict *options, int flags,
|
|
return -EINVAL;
|
|
}
|
|
|
|
+ ret = blkio_connect(s->blkio);
|
|
+ if (ret < 0) {
|
|
+ error_setg_errno(errp, -ret, "blkio_connect failed: %s",
|
|
+ blkio_get_error_msg());
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
-static int blkio_virtio_blk_common_open(BlockDriverState *bs,
|
|
- QDict *options, int flags, Error **errp)
|
|
+static int blkio_virtio_blk_connect(BlockDriverState *bs, QDict *options,
|
|
+ int flags, Error **errp)
|
|
{
|
|
const char *path = qdict_get_try_str(options, "path");
|
|
BDRVBlkioState *s = bs->opaque;
|
|
@@ -717,6 +731,13 @@ static int blkio_virtio_blk_common_open(BlockDriverState *bs,
|
|
}
|
|
}
|
|
|
|
+ ret = blkio_connect(s->blkio);
|
|
+ if (ret < 0) {
|
|
+ error_setg_errno(errp, -ret, "blkio_connect failed: %s",
|
|
+ blkio_get_error_msg());
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
qdict_del(options, "path");
|
|
|
|
return 0;
|
|
@@ -736,24 +757,6 @@ static int blkio_file_open(BlockDriverState *bs, QDict *options, int flags,
|
|
return ret;
|
|
}
|
|
|
|
- if (strcmp(blkio_driver, "io_uring") == 0) {
|
|
- ret = blkio_io_uring_open(bs, options, flags, errp);
|
|
- } else if (strcmp(blkio_driver, "nvme-io_uring") == 0) {
|
|
- ret = blkio_nvme_io_uring(bs, options, flags, errp);
|
|
- } else if (strcmp(blkio_driver, "virtio-blk-vfio-pci") == 0) {
|
|
- ret = blkio_virtio_blk_common_open(bs, options, flags, errp);
|
|
- } else if (strcmp(blkio_driver, "virtio-blk-vhost-user") == 0) {
|
|
- ret = blkio_virtio_blk_common_open(bs, options, flags, errp);
|
|
- } else if (strcmp(blkio_driver, "virtio-blk-vhost-vdpa") == 0) {
|
|
- ret = blkio_virtio_blk_common_open(bs, options, flags, errp);
|
|
- } else {
|
|
- g_assert_not_reached();
|
|
- }
|
|
- if (ret < 0) {
|
|
- blkio_destroy(&s->blkio);
|
|
- return ret;
|
|
- }
|
|
-
|
|
if (!(flags & BDRV_O_RDWR)) {
|
|
ret = blkio_set_bool(s->blkio, "read-only", true);
|
|
if (ret < 0) {
|
|
@@ -764,10 +767,20 @@ static int blkio_file_open(BlockDriverState *bs, QDict *options, int flags,
|
|
}
|
|
}
|
|
|
|
- ret = blkio_connect(s->blkio);
|
|
+ if (strcmp(blkio_driver, "io_uring") == 0) {
|
|
+ ret = blkio_io_uring_connect(bs, options, flags, errp);
|
|
+ } else if (strcmp(blkio_driver, "nvme-io_uring") == 0) {
|
|
+ ret = blkio_nvme_io_uring_connect(bs, options, flags, errp);
|
|
+ } else if (strcmp(blkio_driver, "virtio-blk-vfio-pci") == 0) {
|
|
+ ret = blkio_virtio_blk_connect(bs, options, flags, errp);
|
|
+ } else if (strcmp(blkio_driver, "virtio-blk-vhost-user") == 0) {
|
|
+ ret = blkio_virtio_blk_connect(bs, options, flags, errp);
|
|
+ } else if (strcmp(blkio_driver, "virtio-blk-vhost-vdpa") == 0) {
|
|
+ ret = blkio_virtio_blk_connect(bs, options, flags, errp);
|
|
+ } else {
|
|
+ g_assert_not_reached();
|
|
+ }
|
|
if (ret < 0) {
|
|
- error_setg_errno(errp, -ret, "blkio_connect failed: %s",
|
|
- blkio_get_error_msg());
|
|
blkio_destroy(&s->blkio);
|
|
return ret;
|
|
}
|
|
--
|
|
2.39.3
|
|
|