Paolo Bonzini <pbonz...@redhat.com> writes: > On 21/03/2016 17:15, Markus Armbruster wrote: >> * Explicitly with x-blockdev-del >> >> Fails unless no other reference exists. Where is the legacy_dinfo >> released? > > Can a -drive block device be deleted with x-blockdev-del even?!?
When I wrote my review, I forgot that I expect x-blockdev-del to accept only backends created with blockdev-add. With that, my question is indeed moot. However, I've now tested my expectation, and it turned out to be wrong. I'm inclined to call that a bug. > In other words, you said "This looks like DriveInfo now owns a reference > to BlockBackend, even though the pointer still goes in the other > direction". I say, "I thought this was the idea all along"... For me, the DriveInfo doesn't own anything, but a BlockBackend may have a DriveInfo. Evidence: * The pointer goes from the BlockBackend to the DriveInfo * To go back, you search the blk_backends for the one that has the DriveInfo. See blk_by_legacy_dinfo(). * There is no list of DriveInfo. If you want to find one, you search blk_backends. See drive_get() & friends. > Shall I add a check to x-blockdev-del that gives an error if the > BlockBackend has a DriveInfo attached? Yes, please. But do double-check with Kevin & Max, who might have different ideas on blockdev-add/del than I do. > > Paolo > >> * Implicitly via warty automatic deletion >> >> Your PATCH 01 has the necessary replacement of blk_unref(blk) by >> blkdev_del_drive(blk) for some devices (virtio-blk.c, scsi-bus.c, >> xen_disk,c, piix.c), butas far as I can see not for others such as >> nvme.c.