On Wed 25 Apr 2018 04:03:22 PM CEST, Max Reitz wrote: >>> But the question stands whether we need simple node replacement when >>> we want bdrv_reopen() anyway. In addition, we don't need just >>> replacement, we also need addition and removal (e.g. for backing >>> files or quorum children) -- and especially in the case of quorum, >>> that is going to be a pain (mostly naming the children). >>> >>> With bdrv_reopen(), we can just require the user to respecify all >>> children, so we don't run into the issue of how to name things at >>> least. >> >> So in this example, if you want to replace [B] with [E] you would >> reopen [C] specifying the new backing file? >> >> [A] <- [B] <- [C] <- [D] >> >> [E] > > You can just use child node name references like in blockdev-add.
Were the (more or less) exact requirements of QMP blockdev-reopen discussed? How is it different from qemu-io's "reopen" command? What are the options that you can and can not change? Also, you could replace an element in the backing chain using reopen, but can you replace a node that is not a backing image of another one? With QMP blockdev-replace you could use the existing blockdev-add command and create an arbitrary tree and then simply do blockdev-replace so I suppose that for some use cases at least it would be pretty straightforward. Berto