From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38124) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XW4GV-000299-9P for qemu-devel@nongnu.org; Mon, 22 Sep 2014 10:07:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XW4GN-0000R8-Gx for qemu-devel@nongnu.org; Mon, 22 Sep 2014 10:06:55 -0400 Received: from mx1.redhat.com ([209.132.183.28]:43150) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XW4GN-0000QC-8g for qemu-devel@nongnu.org; Mon, 22 Sep 2014 10:06:47 -0400 Message-ID: <54202CEB.9070606@redhat.com> Date: Mon, 22 Sep 2014 16:06:35 +0200 From: Max Reitz MIME-Version: 1.0 References: <1410891148-28849-1-git-send-email-armbru@redhat.com> <1410891148-28849-24-git-send-email-armbru@redhat.com> In-Reply-To: <1410891148-28849-24-git-send-email-armbru@redhat.com> Content-Type: text/plain; charset=iso-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v3 23/23] block: Make device model's references to BlockBackend strong List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster , qemu-devel@nongnu.org Cc: kwolf@redhat.com, famz@redhat.com, benoit.canet@nodalink.com, stefanha@redhat.com On 16.09.2014 20:12, Markus Armbruster wrote: > Doesn't make a difference just yet, but it's the right thing to do. > > Signed-off-by: Markus Armbruster > --- > 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; > + blk_unref(blk); > bdrv_set_guest_block_size(blk->bs, 512); > qemu_coroutine_adjust_pool_size(-COROUTINE_POOL_RESERVATION); > } I'd put the blk_unref() call at the very end of this function. It probably won't happen but theoretically blk_unref() can free the BlockBackend object and I don't like the risk of use-after-free in blk->bs. Max