> -----Original Message----- > From: Michael Kelley (EOSG) > Sent: Sunday, March 18, 2018 8:40 PM > To: KY Srinivasan <[email protected]>; 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: [email protected] <linux-kernel- > [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.
Yes; agreed. I will take this patch. K. Y > > Michael > > > > > K. Y > > > return ret; > > > } > > > > > > -- > > > 2.7.4 _______________________________________________ devel mailing list [email protected] http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
