> -----Original Message----- > From: [email protected] <[email protected]> > On Behalf > Of KY Srinivasan > Sent: Sunday, March 18, 2018 8:02 PM > To: Arvind Yadav <[email protected]>; Stephen Hemminger > <[email protected]>; Haiyang Zhang <[email protected]> > Cc: [email protected]; [email protected] > Subject: RE: [PATCH] vmbus: use put_device() if device_register fail > > > -----Original Message----- > > From: devel <[email protected]> On Behalf > > Of Arvind Yadav > > Sent: Saturday, March 17, 2018 11:48 PM > > To: Stephen Hemminger <[email protected]>; Haiyang Zhang > > <[email protected]> > > Cc: [email protected]; [email protected] > > 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 <[email protected]> > > --- > > 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 [email protected] http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
