This series acts as some kind of alternative or v5 to the "block/json: Add JSON protocol driver" series. It makes bdrv_open() parse filenames prefixed by "json:" as JSON objects (discarding the prefix beforehand) and then use the resulting QDict as the options for the block device to be opened with a NULL filename.
The purpose of this is that it may sometimes be desirable to specify options for a block device where only a filename can be given, e.g., for backing files. Using this should obviously be the exception, but it is nice to have if actually needed. After having written this series, I do indeed agree that it is much nicer than the old version of having a dedicated "virtual" block driver for this purpose. Patches 1 and 2 are taken directly from the block/json v3, patch 4 has been enriched by an additional scenario (options given directly and through the filename) and its comments have been adapted to the new implementation. v2: - Detect when options are given both directly and through the filename and report this as an error to the user [Eric] A corresponding test case has been added to patch 4 - Update comments in the test added by patch 4 to match the new implementation [Eric] - The -g flag is no longer required in patch 4 (as the filename is no longer relevant for format detection, since it will be dropped after it has been parsed), so drop it from patch 4 git-backport-diff against v1: Key: [----] : patches are identical [####] : number of functional differences between upstream/downstream patch [down] : patch is downstream-only The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively 001/4:[----] [--] 'qdict: Add qdict_join()' 002/4:[----] [--] 'check-qdict: Add test for qdict_join()' 003/4:[0012] [FC] 'block: Allow JSON filenames' 004/4:[0035] [FC] 'iotests: Add test for the JSON protocol' git-backport-diff against [PATCH v3 00/12] block/json: Key: [----] : patches are identical [####] : number of functional differences between upstream/downstream patch [down] : patch is downstream-only The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively 001/4:[----] [--] 'qdict: Add qdict_join()' 002/4:[----] [--] 'check-qdict: Add test for qdict_join()' 003/4:[down] 'block: Allow JSON filenames' 004/4:[0035] [FC] 'iotests: Add test for the JSON protocol' Max Reitz (4): qdict: Add qdict_join() check-qdict: Add test for qdict_join() block: Allow JSON filenames iotests: Add test for the JSON protocol block.c | 47 ++++++++++++++++ include/qapi/qmp/qdict.h | 3 ++ qobject/qdict.c | 32 +++++++++++ tests/check-qdict.c | 87 ++++++++++++++++++++++++++++++ tests/qemu-iotests/089 | 132 +++++++++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/089.out | 49 +++++++++++++++++ tests/qemu-iotests/group | 1 + 7 files changed, 351 insertions(+) create mode 100755 tests/qemu-iotests/089 create mode 100644 tests/qemu-iotests/089.out -- 1.9.2
