Am 16.09.2014 um 20:12 hat Markus Armbruster geschrieben: > Doesn't make a difference just yet, but it's the right thing to do. > > Signed-off-by: Markus Armbruster <arm...@redhat.com> > --- > block/block-backend.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/block/block-backend.c b/block/block-backend.c > index d49c988..5646628 100644 > --- a/block/block-backend.c > +++ b/block/block-backend.c > @@ -253,6 +253,7 @@ int blk_attach_dev(BlockBackend *blk, void *dev) > if (blk->dev) { > return -EBUSY; > } > + blk_ref(blk); > blk->dev = dev; > bdrv_iostatus_reset(blk->bs); > > @@ -281,9 +282,10 @@ void blk_detach_dev(BlockBackend *blk, void *dev) > /* TODO change to DeviceState *dev when all users are qdevified */ > { > assert(blk->dev == dev); > - blk->dev = NULL; > blk->dev_ops = NULL; > blk->dev_opaque = NULL; > + blk->dev = NULL;
Is the move of blk->dev intentional or a rebase artifact? > + blk_unref(blk); > bdrv_set_guest_block_size(blk->bs, 512); > qemu_coroutine_adjust_pool_size(-COROUTINE_POOL_RESERVATION); > } hw/sd/sd.c calls blk_attach_dev_nofail(), but never detaches the BB again. The reference count will therefore never become zero. Probably okay for a device that isn't unpluggable, bdrv_close_all() should still do everything that is important for a clean shutdown. Reviewed-by: Kevin Wolf <kw...@redhat.com>