Messages in this thread | | | From | "Michael Kelley (EOSG)" <> | Subject | RE: [PATCH] vmbus: use put_device() if device_register fail | Date | Mon, 19 Mar 2018 03:40:03 +0000 |
| |
> -----Original Message----- > From: linux-kernel-owner@vger.kernel.org <linux-kernel-owner@vger.kernel.org> On Behalf > Of KY Srinivasan > Sent: Sunday, March 18, 2018 8:02 PM > To: Arvind Yadav <arvind.yadav.cs@gmail.com>; Stephen Hemminger > <sthemmin@microsoft.com>; Haiyang Zhang <haiyangz@microsoft.com> > Cc: devel@linuxdriverproject.org; linux-kernel@vger.kernel.org > Subject: RE: [PATCH] vmbus: use put_device() if device_register fail > > > -----Original Message----- > > From: devel <driverdev-devel-bounces@linuxdriverproject.org> On Behalf > > Of Arvind Yadav > > Sent: Saturday, March 17, 2018 11:48 PM > > To: Stephen Hemminger <sthemmin@microsoft.com>; Haiyang Zhang > > <haiyangz@microsoft.com> > > Cc: devel@linuxdriverproject.org; linux-kernel@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.cs@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
| |