From: Max Reitz <mreitz@redhat.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, Peter Lieven <pl@kamp.de>,
Markus Armbruster <armbru@redhat.com>,
Max Reitz <mreitz@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>
Subject: [Qemu-devel] [PATCH v2 01/13] block: Make essential BlockDriver objects public
Date: Thu, 27 Nov 2014 15:48:28 +0100 [thread overview]
Message-ID: <1417099720-16428-2-git-send-email-mreitz@redhat.com> (raw)
In-Reply-To: <1417099720-16428-1-git-send-email-mreitz@redhat.com>
There are some block drivers which are essential to QEMU and may not be
removed: These are raw, file and qcow2 (as the default non-raw format).
Make their BlockDriver objects public so they can be directly referenced
throughout the block layer without needing to call bdrv_find_format()
and having to deal with an error at runtime, while the real problem
occured during linking (where raw, file or qcow2 were not linked into
qemu).
Cc: qemu-stable@nongnu.org
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
block/qcow2.c | 4 ++--
block/raw-posix.c | 4 ++--
block/raw-win32.c | 4 ++--
block/raw_bsd.c | 4 ++--
include/block/block_int.h | 8 ++++++++
5 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index 8b9ffc4..0eeba36 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -2847,7 +2847,7 @@ static QemuOptsList qcow2_create_opts = {
}
};
-static BlockDriver bdrv_qcow2 = {
+BlockDriver *bdrv_qcow2 = &(BlockDriver){
.format_name = "qcow2",
.instance_size = sizeof(BDRVQcowState),
.bdrv_probe = qcow2_probe,
@@ -2893,7 +2893,7 @@ static BlockDriver bdrv_qcow2 = {
static void bdrv_qcow2_init(void)
{
- bdrv_register(&bdrv_qcow2);
+ bdrv_register(bdrv_qcow2);
}
block_init(bdrv_qcow2_init);
diff --git a/block/raw-posix.c b/block/raw-posix.c
index b1af77e..6766cec 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -1684,7 +1684,7 @@ static QemuOptsList raw_create_opts = {
}
};
-static BlockDriver bdrv_file = {
+BlockDriver *bdrv_file = &(BlockDriver){
.format_name = "file",
.protocol_name = "file",
.instance_size = sizeof(BDRVRawState),
@@ -2550,7 +2550,7 @@ static void bdrv_file_init(void)
* Register all the drivers. Note that order is important, the driver
* registered last will get probed first.
*/
- bdrv_register(&bdrv_file);
+ bdrv_register(bdrv_file);
bdrv_register(&bdrv_host_device);
#ifdef __linux__
bdrv_register(&bdrv_host_floppy);
diff --git a/block/raw-win32.c b/block/raw-win32.c
index 7b58881..96f097e 100644
--- a/block/raw-win32.c
+++ b/block/raw-win32.c
@@ -540,7 +540,7 @@ static QemuOptsList raw_create_opts = {
}
};
-static BlockDriver bdrv_file = {
+BlockDriver *bdrv_file = &(BlockDriver){
.format_name = "file",
.protocol_name = "file",
.instance_size = sizeof(BDRVRawState),
@@ -721,7 +721,7 @@ static BlockDriver bdrv_host_device = {
static void bdrv_file_init(void)
{
- bdrv_register(&bdrv_file);
+ bdrv_register(bdrv_file);
bdrv_register(&bdrv_host_device);
}
diff --git a/block/raw_bsd.c b/block/raw_bsd.c
index 401b967..cdb019e 100644
--- a/block/raw_bsd.c
+++ b/block/raw_bsd.c
@@ -173,7 +173,7 @@ static int raw_probe(const uint8_t *buf, int buf_size, const char *filename)
return 1;
}
-static BlockDriver bdrv_raw = {
+BlockDriver *bdrv_raw = &(BlockDriver){
.format_name = "raw",
.bdrv_probe = &raw_probe,
.bdrv_reopen_prepare = &raw_reopen_prepare,
@@ -202,7 +202,7 @@ static BlockDriver bdrv_raw = {
static void bdrv_raw_init(void)
{
- bdrv_register(&bdrv_raw);
+ bdrv_register(bdrv_raw);
}
block_init(bdrv_raw_init);
diff --git a/include/block/block_int.h b/include/block/block_int.h
index a1c17b9..2ff3fc4 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -411,6 +411,14 @@ struct BlockDriverState {
Error *backing_blocker;
};
+
+/* Essential block drivers which must always be statically linked into qemu, and
+ * which therefore can be accessed without using bdrv_find_format() */
+extern BlockDriver *bdrv_file;
+extern BlockDriver *bdrv_raw;
+extern BlockDriver *bdrv_qcow2;
+
+
int get_tmp_filename(char *filename, int size);
void bdrv_set_io_limits(BlockDriverState *bs,
--
1.9.3
next prev parent reply other threads:[~2014-11-27 14:48 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-27 14:48 [Qemu-devel] [PATCH v2 00/13] block: Various Coverity-spotted fixes Max Reitz
2014-11-27 14:48 ` Max Reitz [this message]
2014-12-01 15:59 ` [Qemu-devel] [PATCH v2 01/13] block: Make essential BlockDriver objects public Eric Blake
2014-12-02 9:11 ` Max Reitz
2014-12-02 16:45 ` Eric Blake
2014-12-02 10:51 ` Kevin Wolf
2014-11-27 14:48 ` [Qemu-devel] [PATCH v2 02/13] block: Omit bdrv_find_format for essential drivers Max Reitz
2014-12-01 16:01 ` Eric Blake
2014-12-02 9:12 ` Max Reitz
2014-11-27 14:48 ` [Qemu-devel] [PATCH v2 03/13] block/vvfat: qcow driver may not be found Max Reitz
2014-12-02 10:57 ` Kevin Wolf
2014-11-27 14:48 ` [Qemu-devel] [PATCH v2 04/13] block/nfs: Add create_opts Max Reitz
2014-11-27 14:48 ` [Qemu-devel] [PATCH v2 05/13] block: Check create_opts before image creation Max Reitz
2014-11-27 14:48 ` [Qemu-devel] [PATCH v2 06/13] qemu-img: " Max Reitz
2014-11-27 14:48 ` [Qemu-devel] [PATCH v2 07/13] qemu-img: Check create_opts before image amendment Max Reitz
2014-11-27 14:48 ` [Qemu-devel] [PATCH v2 08/13] iotests: Only kill NBD server if it runs Max Reitz
2014-11-27 14:48 ` [Qemu-devel] [PATCH v2 09/13] iotests: Add test for unsupported image creation Max Reitz
2014-11-27 14:48 ` [Qemu-devel] [PATCH v2 10/13] qcow2: Prevent numerical overflow Max Reitz
2014-11-27 14:48 ` [Qemu-devel] [PATCH v2 11/13] qcow2: Flushing the caches in qcow2_close may fail Max Reitz
2014-11-27 14:48 ` [Qemu-devel] [PATCH v2 12/13] qcow2: Respect bdrv_truncate() error Max Reitz
2014-11-27 14:48 ` [Qemu-devel] [PATCH v2 13/13] block/raw-posix: Fix ret in raw_open_common() Max Reitz
2014-12-02 11:39 ` [Qemu-devel] [PATCH v2 00/13] block: Various Coverity-spotted fixes Kevin Wolf
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=1417099720-16428-2-git-send-email-mreitz@redhat.com \
--to=mreitz@redhat.com \
--cc=armbru@redhat.com \
--cc=kwolf@redhat.com \
--cc=pl@kamp.de \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.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.