Hi everyone, this is part of the blockdev-reopen work that I'm doing, but since I'll be away during most of July I thought that I could send already a couple of patches that I think are ready and don't need anything else from the rest of the series.
There's two main fixes here: 1) bs->options are not kept up to date after an image is reopened and no longer reflect its state. 2) bs->options and bs->explicit_options also contain the options of a BDS's children, so there's data that is duplicated and will be inconsistent as soon as you change the children's options directly. The fix for (2) involves removing all children options from both QDicts. In the cases of node name references ("backing": "node-name") those remain in the QDict (they're technically parent options). I think we don't really need them and it should be possible to get rid of them, but it's a little more complicated (we need them during bdrv_reopen() to ensure that the user didn't try to change any of them). Regards, Berto Alberto Garcia (5): qdict: Make qdict_extract_subqdict() accept dst = NULL block: Remove children options from bs->{options,explicit_options} block: Simplify bdrv_reopen_abort() block: Update bs->options if bdrv_reopen() succeeds block: Simplify append_open_options() block.c | 42 +++++++++++++++++++++++++++++++----------- qobject/block-qdict.c | 11 ++++++++--- 2 files changed, 39 insertions(+), 14 deletions(-) -- 2.11.0