* [PATCH] drivers/w1: free the w1_master at w1_free_dev and return a correct return value @ 2012-06-17 16:17 Devendra Naga 2012-06-20 8:06 ` Evgeniy Polyakov 2012-06-20 23:55 ` Greg Kroah-Hartman 0 siblings, 2 replies; 8+ messages in thread From: Devendra Naga @ 2012-06-17 16:17 UTC (permalink / raw) To: Evgeniy Polyakov, Greg Kroah-Hartman, linux-kernel; +Cc: Devendra Naga the w1_master pointer is allced at the w1_alloc_master and is not freed when called with w1_remove_master. when w1_alloc_dev fails the return should be -ENODEV as it does device_register, and that is the last case where that function will fail. Signed-off-by: Devendra Naga <devendra.aaru@gmail.com> --- drivers/w1/w1_int.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/w1/w1_int.c b/drivers/w1/w1_int.c index 6828835..a3cf27d 100644 --- a/drivers/w1/w1_int.c +++ b/drivers/w1/w1_int.c @@ -100,6 +100,7 @@ static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl, static void w1_free_dev(struct w1_master *dev) { device_unregister(&dev->dev); + kfree(dev); } int w1_add_master_device(struct w1_bus_master *master) @@ -148,7 +149,7 @@ int w1_add_master_device(struct w1_bus_master *master) &w1_master_driver, &w1_master_device); if (!dev) { mutex_unlock(&w1_mlock); - return -ENOMEM; + return -ENODEV; } retval = w1_create_master_attributes(dev); -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] drivers/w1: free the w1_master at w1_free_dev and return a correct return value 2012-06-17 16:17 [PATCH] drivers/w1: free the w1_master at w1_free_dev and return a correct return value Devendra Naga @ 2012-06-20 8:06 ` Evgeniy Polyakov 2012-06-20 12:57 ` devendra.aaru 2012-06-20 23:55 ` Greg Kroah-Hartman 1 sibling, 1 reply; 8+ messages in thread From: Evgeniy Polyakov @ 2012-06-20 8:06 UTC (permalink / raw) To: Devendra Naga; +Cc: Greg Kroah-Hartman, linux-kernel Hi On Sun, Jun 17, 2012 at 09:47:59PM +0530, Devendra Naga (devendra.aaru@gmail.com) wrote: > the w1_master pointer is allced at the w1_alloc_master and is not freed when called with > w1_remove_master. > > when w1_alloc_dev fails the return should be -ENODEV as it does > device_register, and that is the last case where that function > will fail. > > Signed-off-by: Devendra Naga <devendra.aaru@gmail.com> Hmm, looks correct, but I wonder how whatever_free() function happend not to free its arguments. Looks like device_unregister() calls release callback, but we do not provide one. Greg, please pull it into your tree. Thank you. Acked-by: Evgeniy Polyakov <zbr@ioremap.net> -- Evgeniy Polyakov ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drivers/w1: free the w1_master at w1_free_dev and return a correct return value 2012-06-20 8:06 ` Evgeniy Polyakov @ 2012-06-20 12:57 ` devendra.aaru 0 siblings, 0 replies; 8+ messages in thread From: devendra.aaru @ 2012-06-20 12:57 UTC (permalink / raw) To: Evgeniy Polyakov; +Cc: Greg Kroah-Hartman, linux-kernel Hi Evgeniy, On Wed, Jun 20, 2012 at 1:36 PM, Evgeniy Polyakov <zbr@ioremap.net> wrote: > Hi > > On Sun, Jun 17, 2012 at 09:47:59PM +0530, Devendra Naga (devendra.aaru@gmail.com) wrote: >> the w1_master pointer is allced at the w1_alloc_master and is not freed when called with >> w1_remove_master. >> >> when w1_alloc_dev fails the return should be -ENODEV as it does >> device_register, and that is the last case where that function >> will fail. >> >> Signed-off-by: Devendra Naga <devendra.aaru@gmail.com> > > Hmm, looks correct, but I wonder how whatever_free() function happend > not to free its arguments. > I think , it its good to have the kfree after calling the w1_free_dev as this way looks so wierd calling of kfree. > Looks like device_unregister() calls release callback, but we do not > provide one. > vim -t device_unregister points me to drivers/base/core.c device_unregister function, where we do a device_del, where we do a dev_release_all where it calls release_nodes which calls the release callback. is that what you are telling? if so actually we are passing the structure w1_master_device which is of struct device. its having a release callback. and there we free the master device. please suggest me if i mistaken.... > Greg, please pull it into your tree. Thank you. > Acked-by: Evgeniy Polyakov <zbr@ioremap.net> > > -- > Evgeniy Polyakov Thanks, Devendra. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drivers/w1: free the w1_master at w1_free_dev and return a correct return value 2012-06-17 16:17 [PATCH] drivers/w1: free the w1_master at w1_free_dev and return a correct return value Devendra Naga 2012-06-20 8:06 ` Evgeniy Polyakov @ 2012-06-20 23:55 ` Greg Kroah-Hartman 2012-06-21 4:44 ` devendra.aaru 2012-06-21 7:48 ` Evgeniy Polyakov 1 sibling, 2 replies; 8+ messages in thread From: Greg Kroah-Hartman @ 2012-06-20 23:55 UTC (permalink / raw) To: Devendra Naga; +Cc: Evgeniy Polyakov, linux-kernel On Sun, Jun 17, 2012 at 09:47:59PM +0530, Devendra Naga wrote: > the w1_master pointer is allced at the w1_alloc_master and is not freed when called with > w1_remove_master. > > when w1_alloc_dev fails the return should be -ENODEV as it does > device_register, and that is the last case where that function > will fail. > > Signed-off-by: Devendra Naga <devendra.aaru@gmail.com> > Acked-by: Evgeniy Polyakov <zbr@ioremap.net> > --- > drivers/w1/w1_int.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/w1/w1_int.c b/drivers/w1/w1_int.c > index 6828835..a3cf27d 100644 > --- a/drivers/w1/w1_int.c > +++ b/drivers/w1/w1_int.c > @@ -100,6 +100,7 @@ static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl, > static void w1_free_dev(struct w1_master *dev) > { > device_unregister(&dev->dev); > + kfree(dev); No, this is wrong, the memory will be freed in w1_master_release(), right? It is not freed here, sorry, this patch is incorrect. greg k-h ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drivers/w1: free the w1_master at w1_free_dev and return a correct return value 2012-06-20 23:55 ` Greg Kroah-Hartman @ 2012-06-21 4:44 ` devendra.aaru 2012-06-21 14:39 ` Greg Kroah-Hartman 2012-06-21 7:48 ` Evgeniy Polyakov 1 sibling, 1 reply; 8+ messages in thread From: devendra.aaru @ 2012-06-21 4:44 UTC (permalink / raw) To: Greg Kroah-Hartman; +Cc: Evgeniy Polyakov, linux-kernel Hi Greg, On Thu, Jun 21, 2012 at 5:25 AM, Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > On Sun, Jun 17, 2012 at 09:47:59PM +0530, Devendra Naga wrote: >> the w1_master pointer is allced at the w1_alloc_master and is not freed when called with >> w1_remove_master. >> >> when w1_alloc_dev fails the return should be -ENODEV as it does >> device_register, and that is the last case where that function >> will fail. >> >> Signed-off-by: Devendra Naga <devendra.aaru@gmail.com> >> Acked-by: Evgeniy Polyakov <zbr@ioremap.net> >> --- >> drivers/w1/w1_int.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/w1/w1_int.c b/drivers/w1/w1_int.c >> index 6828835..a3cf27d 100644 >> --- a/drivers/w1/w1_int.c >> +++ b/drivers/w1/w1_int.c >> @@ -100,6 +100,7 @@ static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl, >> static void w1_free_dev(struct w1_master *dev) >> { >> device_unregister(&dev->dev); >> + kfree(dev); > > No, this is wrong, the memory will be freed in w1_master_release(), > right? It is not freed here, sorry, this patch is incorrect. > Yeah, correct but the following change is correct no? int w1_add_master_device(struct w1_bus_master *master) @@ -148,7 +149,7 @@ int w1_add_master_device(struct w1_bus_master *master) &w1_master_driver, &w1_master_device); if (!dev) { mutex_unlock(&w1_mlock); - return -ENOMEM; + return -ENODEV; } > greg k-h Thanks, Devendra. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drivers/w1: free the w1_master at w1_free_dev and return a correct return value 2012-06-21 4:44 ` devendra.aaru @ 2012-06-21 14:39 ` Greg Kroah-Hartman 2012-06-23 18:26 ` devendra.aaru 0 siblings, 1 reply; 8+ messages in thread From: Greg Kroah-Hartman @ 2012-06-21 14:39 UTC (permalink / raw) To: devendra.aaru; +Cc: Evgeniy Polyakov, linux-kernel On Thu, Jun 21, 2012 at 10:14:53AM +0530, devendra.aaru wrote: > Hi Greg, > > On Thu, Jun 21, 2012 at 5:25 AM, Greg Kroah-Hartman > <gregkh@linuxfoundation.org> wrote: > > On Sun, Jun 17, 2012 at 09:47:59PM +0530, Devendra Naga wrote: > >> the w1_master pointer is allced at the w1_alloc_master and is not freed when called with > >> w1_remove_master. > >> > >> when w1_alloc_dev fails the return should be -ENODEV as it does > >> device_register, and that is the last case where that function > >> will fail. > >> > >> Signed-off-by: Devendra Naga <devendra.aaru@gmail.com> > >> Acked-by: Evgeniy Polyakov <zbr@ioremap.net> > >> --- > >> drivers/w1/w1_int.c | 3 ++- > >> 1 file changed, 2 insertions(+), 1 deletion(-) > >> > >> diff --git a/drivers/w1/w1_int.c b/drivers/w1/w1_int.c > >> index 6828835..a3cf27d 100644 > >> --- a/drivers/w1/w1_int.c > >> +++ b/drivers/w1/w1_int.c > >> @@ -100,6 +100,7 @@ static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl, > >> static void w1_free_dev(struct w1_master *dev) > >> { > >> device_unregister(&dev->dev); > >> + kfree(dev); > > > > No, this is wrong, the memory will be freed in w1_master_release(), > > right? It is not freed here, sorry, this patch is incorrect. > > > Yeah, correct but the following change is correct no? > > int w1_add_master_device(struct w1_bus_master *master) > @@ -148,7 +149,7 @@ int w1_add_master_device(struct w1_bus_master *master) > &w1_master_driver, &w1_master_device); > if (!dev) { > mutex_unlock(&w1_mlock); > - return -ENOMEM; > + return -ENODEV; Possibly, care to resend it in a format that explains it and allows it to be applied? thanks, greg k-h ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drivers/w1: free the w1_master at w1_free_dev and return a correct return value 2012-06-21 14:39 ` Greg Kroah-Hartman @ 2012-06-23 18:26 ` devendra.aaru 0 siblings, 0 replies; 8+ messages in thread From: devendra.aaru @ 2012-06-23 18:26 UTC (permalink / raw) To: Greg Kroah-Hartman; +Cc: Evgeniy Polyakov, linux-kernel Hi Greg, On Thu, Jun 21, 2012 at 8:09 PM, Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > On Thu, Jun 21, 2012 at 10:14:53AM +0530, devendra.aaru wrote: >> Hi Greg, >> >> Yeah, correct but the following change is correct no? >> >> int w1_add_master_device(struct w1_bus_master *master) >> @@ -148,7 +149,7 @@ int w1_add_master_device(struct w1_bus_master *master) >> &w1_master_driver, &w1_master_device); >> if (!dev) { >> mutex_unlock(&w1_mlock); >> - return -ENOMEM; >> + return -ENODEV; > > Possibly, care to resend it in a format that explains it and allows it > to be applied? > I think i need to go through the kernel doc, and figure out what should be returned and why. I think we need to send -EINVAL as most of the drivers does if their registration fails. It may take more time to send the patch out :(. sorry. > thanks, > > greg k-h Thanks, Devendra. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drivers/w1: free the w1_master at w1_free_dev and return a correct return value 2012-06-20 23:55 ` Greg Kroah-Hartman 2012-06-21 4:44 ` devendra.aaru @ 2012-06-21 7:48 ` Evgeniy Polyakov 1 sibling, 0 replies; 8+ messages in thread From: Evgeniy Polyakov @ 2012-06-21 7:48 UTC (permalink / raw) To: Greg Kroah-Hartman; +Cc: Devendra Naga, linux-kernel On Wed, Jun 20, 2012 at 04:55:03PM -0700, Greg Kroah-Hartman (gregkh@linuxfoundation.org) wrote: > No, this is wrong, the memory will be freed in w1_master_release(), > right? It is not freed here, sorry, this patch is incorrect. Yes, you are right. It is exactly that ->release() callback I missed! -- Evgeniy Polyakov ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2012-06-23 18:26 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-06-17 16:17 [PATCH] drivers/w1: free the w1_master at w1_free_dev and return a correct return value Devendra Naga 2012-06-20 8:06 ` Evgeniy Polyakov 2012-06-20 12:57 ` devendra.aaru 2012-06-20 23:55 ` Greg Kroah-Hartman 2012-06-21 4:44 ` devendra.aaru 2012-06-21 14:39 ` Greg Kroah-Hartman 2012-06-23 18:26 ` devendra.aaru 2012-06-21 7:48 ` Evgeniy Polyakov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox