> -----Original Message----- > From: linux-kernel-ow...@vger.kernel.org <linux-kernel-ow...@vger.kernel.org> > On Behalf > Of KY Srinivasan > Sent: Sunday, March 18, 2018 8:02 PM > To: Arvind Yadav <arvind.yadav...@gmail.com>; Stephen Hemminger > <sthem...@microsoft.com>; Haiyang Zhang <haiya...@microsoft.com> > Cc: de...@linuxdriverproject.org; linux-ker...@vger.kernel.org > Subject: RE: [PATCH] vmbus: use put_device() if device_register fail > > > -----Original Message----- > > From: devel <driverdev-devel-boun...@linuxdriverproject.org> On Behalf > > Of Arvind Yadav > > Sent: Saturday, March 17, 2018 11:48 PM > > To: Stephen Hemminger <sthem...@microsoft.com>; Haiyang Zhang > > <haiya...@microsoft.com> > > Cc: de...@linuxdriverproject.org; linux-ker...@vger.kernel.org > > Subject: [PATCH] vmbus: use put_device() if device_register fail > > > > if device_register() returned an error. Always use put_device() > > to give up the reference initialized. > > > > Signed-off-by: Arvind Yadav <arvind.yadav...@gmail.com> > > --- > > drivers/hv/vmbus_drv.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c > > index bc65c4d..25da2f3 100644 > > --- a/drivers/hv/vmbus_drv.c > > +++ b/drivers/hv/vmbus_drv.c > > @@ -1358,6 +1358,7 @@ int vmbus_device_register(struct hv_device > > *child_device_obj) > > ret = device_register(&child_device_obj->device); > > if (ret) { > > pr_err("Unable to register child device\n"); > > + put_device(&child_device_obj->device); > > If the registration failed; we would not have acquired the reference on the > device and so > we should not be dropping the reference in the failure path.
Looking at the code for device_register() and its constituent parts device_initialize() and device_add(), Arvind is correct. device_initialize() creates the object with a reference count of 1. device_add() does not decrement that reference count or free the object, even if it fails. The comments for device_register() call this out as well. Michael > > K. Y > > return ret; > > } > > > > -- > > 2.7.4 _______________________________________________ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel