We may sometimes want a filename for BDSs which do not have one because they weren't opened using a simple filename (but rather just through options, for example).
Some block drivers are always capable of reconstructing a valid filename (e.g. NBD), even if the BDS has been opened using the options QDict only. For others (e.g. Quorum) this is impossible. To accommodate this case, the function which reconstructs ("refreshes") the filename for a BDS also generates an options QDict (which should always work). If some layer cannot generate a plain filename (e.g. a Quorum instance), we can still generate a QDict which contains all options necessary for opening the block device in (basically) the same state. If a filename can be generated, the one stored in the BDS is overwritten. Otherwise, the QDict is converted to JSON, prefixed with "json:" and then used as the filename (making use of the JSON pseudo-protocol). Block drivers which probably need to implement bdrv_refresh_filename() besides blkdebug, blkverify, NBD and Quorum but which this series does not cover, are the following: curl, ssh and vvfat. This series supersedes my previous 'block: Fix unset "filename" for certain drivers'. Max Reitz (6): block: Add bdrv_refresh_filename() blkdebug: Implement bdrv_refresh_filename() blkverify: Implement bdrv_refresh_filename() nbd: Implement bdrv_refresh_filename() quorum: Implement bdrv_refresh_filename() iotests: Add test for image filename construction block.c | 135 +++++++++++++++++++++++++++++++++++++++++++++ block/blkdebug.c | 97 ++++++++++++++++++++++++++++++++ block/blkverify.c | 29 ++++++++++ block/nbd.c | 36 ++++++++++++ block/quorum.c | 39 +++++++++++++ include/block/block.h | 1 + include/block/block_int.h | 6 ++ tests/qemu-iotests/099 | 116 ++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/099.out | 20 +++++++ tests/qemu-iotests/group | 1 + 10 files changed, 480 insertions(+) create mode 100755 tests/qemu-iotests/099 create mode 100644 tests/qemu-iotests/099.out -- 2.0.1