[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 00/19] block: Fix some filename generation issues

From: Max Reitz
Subject: [Qemu-devel] [PATCH 00/19] block: Fix some filename generation issues
Date: Tue, 26 Apr 2016 23:31:59 +0200

(Fun fact: This series has been lying around on my disk since last
 November. I guess I forgot to send it because I still wanted to review
 it before sending it out, and that it what I forgot to do. Well, and
 now Berto noticed that we ought to fix something.)

There are some issues regarding filename generation right now:

- You always get a JSON filename if you set even a single qcow2-specific
  runtime options (as long as it does not have a dot in it, which is a
  bug, too, but here it is working in our favor...). That is not nice
  and actually breaks the usage of backing files with relative
  filenames with such qcow2 BDS.

- As hinted above, you cannot use relative backing filenames with BDS
  that have a JSON filename only, even though qemu might be able to
  obtain the directory name by walking through the BDS graph to the
  protocol level.

- Overriding the backing file at runtime should invalidate the filename
  because it actually changes the BDS's data. Therefore, we need to
  force a JSON filename in that case, containing the backing file

- Much of our code assumes paths never to exceed PATH_MAX in length.
  This is wrong, at least because of JSON filenames. This should be
  fixed wherever the opportunity arises.

This series addresses the first issue by splitting off code from
bdrv_refresh_filename() into bdrv_default_refresh_format_filename() and
bdrv_default_refresh_protocol_filename(). The former will take a boolean
signifying whether the driver-specific runtime options are actually
significant for the BDS data (guest-visible content). For qcow2, they
never are, therefore, the qcow2 driver has to implement
bdrv_refresh_filename() by invoking
bdrv_default_refresh_format_filename() with the boolean set
appropriately (deviating from the actual default implementation which
has to assume that all driver-specific runtime options are significant).
[Patches 4 -- 7]

The second issue is addressed by introducing bdrv_dirname() which
returns the directory of a specific BDS. By default, this is obtained by
walking through the BDS graph to the protocol level and processing that
BDS's filename (exact_filename, to be exact).
This behavior can be overridden by any block driver along the path
implementing bdrv_dirname() itself, or by the user explicitly specifying
the 'base-directory' option for any BDS node.
[Patches 11, 13 -- 18]

The third issue is addressed by paying respect to the backing file
options, and noting whether any of the backing file's options have been
overridden in a way that make opening the backing file implicitly (using
the filename specified in the overlay file) impossible.
[Patches 2 -- 3]

The fourth issue has been addressed as far as it made sense to do it
along fixing the second one.
[Patch 8 -- 10]

Furthermore, there are two fixes to code touched in this series.
[Patches 1 and 12]

Max Reitz (19):
  block: Use children list in bdrv_refresh_filename
  block: Add BDS.backing_overridden
  block: Respect backing bs in bdrv_refresh_filename
  block: Add bdrv_default_refresh_format_filename
  block: Add bdrv_default_refresh_protocol_filename
  block: Make bdrv_default_refresh_format_filename public
  qcow2: Implement bdrv_refresh_filename()
  block: Make path_combine() return the path
  block: bdrv_get_full_backing_filename_from_...'s ret. val.
  block: bdrv_get_full_backing_filename's ret. val.
  block: Add bdrv_make_absolute_filename()
  block: Fix bdrv_find_backing_image()
  block: Add bdrv_dirname()
  blkverify: Make bdrv_dirname() return NULL
  quorum: Make bdrv_dirname() return NULL
  block/nbd: Implement bdrv_dirname()
  block: Use bdrv_dirname() for relative filenames
  block: Add 'base-directory' BDS option
  iotests: Add quorum case to test 110

 block.c                       | 340 +++++++++++++++++++++++++++---------------
 block/blkverify.c             |  13 +-
 block/nbd.c                   |  29 ++++
 block/qapi.c                  |  12 +-
 block/qcow2.c                 |   8 +
 block/quorum.c                |  12 +-
 block/vmdk.c                  |  11 +-
 include/block/block.h         |  15 +-
 include/block/block_int.h     |   7 +
 qapi/block-core.json          |   9 ++
 tests/qemu-iotests/051.out    |   8 +-
 tests/qemu-iotests/051.pc.out |   8 +-
 tests/qemu-iotests/110        |  51 ++++++-
 tests/qemu-iotests/110.out    |  11 +-
 14 files changed, 372 insertions(+), 162 deletions(-)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]