On 2014-12-01 at 16:59, Eric Blake wrote:
On 11/27/2014 07:48 AM, Max Reitz wrote:
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
s/occured/occurred/

qemu).

Cc: qemu-sta...@nongnu.org
Signed-off-by: Max Reitz <mre...@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(-)
Reviewed-by: Eric Blake <ebl...@redhat.com>

+++ b/block/qcow2.c
@@ -2847,7 +2847,7 @@ static QemuOptsList qcow2_create_opts = {
      }
  };
-static BlockDriver bdrv_qcow2 = {
+BlockDriver *bdrv_qcow2 = &(BlockDriver){
Do we want any use of 'const', to avoid accidental manipulation of the
pointer and/or pointed-to contents?

Sounds good at first, but for instance qemu_opts_create() (which is often called with bdrv_qcow2->create_opts and the like) don't take a const pointer. We could fix all those functions, but trying to fix the const-ness of the block layer sounds like really tedious work to me... Also, bdrv_find_format() returns a non-const pointer so it's at least not more broken than it was before.

Max

Reply via email to