|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 16/18] xen: automatically create XenBlockDevice-s
> -----Original Message-----
[snip]
> > +
> > + blockdev->auto_iothread = iothread;
> > +
> > + object_property_set_bool(OBJECT(dev), true, "realized",
> &local_err);
> > + if (local_err) {
> > + error_propagate_prepend(errp, local_err,
> > + "initialization of device %s failed: ",
> > + type);
> > + goto unref;
> > + }
> > +
> > + blockdev_mark_auto_del(blk);
>
> You don't need this one any more then (if you look into the details,
> it's one of the more confusing parts of the drive_*() magic, so it's
> good to get rid of it). When you use the anonymous BlockBackend created
> by the qdev drive property (because you passed it a node-name rather
> than a BlockBackend name) means that the BlockBackend disappears
> together with the drive.
>
> Note that explicitly created block nodes must also be unreferenced
> explicitly (bdrv_open() should be paired with bdrv_unref() and
> qmp_blockdev_add() with qmp_blockdev_del()). Maybe XenBackendInfo needs
> a .destroy callback so we can do destruction symmetrically to device
> creation?
>
I have something implemented using qmp_blockdev_add() now and it seems to work,
but when I call into qmp_blockdev_del() (passing in the node-name I used to the
set the "drive" parameter) during unrealize then it tells me that the device is
in use. Do I need a callback that runs after unrealize of the device?
Paul
> > + return;
> > +
> > +unref:
> > + if (dev) {
> > + object_unparent(OBJECT(dev));
> > + }
> > +
> > + if (iothread) {
> > + iothread_destroy(iothread);
> > + }
> > +
> > + if (blk) {
> > + monitor_remove_blk(blk);
> > + blk_unref(blk);
> > + }
> > +}
>
> Kevin
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |