All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH 2/4] eisa: call put_device if device_register fails
       [not found] ` <1386959996-7958-3-git-send-email-levex@linux.com>
@ 2013-12-13 19:04   ` Bjorn Helgaas
  2013-12-13 19:08     ` Levente Kurusa
  0 siblings, 1 reply; 10+ messages in thread
From: Bjorn Helgaas @ 2013-12-13 19:04 UTC (permalink / raw)
  To: Levente Kurusa; +Cc: LKML

On Fri, Dec 13, 2013 at 07:39:54PM +0100, Levente Kurusa wrote:
> We need to give up the last reference to edev->dev, so
> we need to call put_device().
> 
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Signed-off-by: Levente Kurusa <levex@linux.com>

I applied this and will push it through my PCI tree, since I don't think
anybody really takes care of EISA these days.

I looked at other callers of device_register(), and most of them look like
they have the same problem.  Can you fix the others, too?  This patch says
"2/4", so maybe you already are, but I can't find the other patches in the
series.

Bjorn

> ---
>  drivers/eisa/eisa-bus.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/eisa/eisa-bus.c b/drivers/eisa/eisa-bus.c
> index 272a3ec..8842cde 100644
> --- a/drivers/eisa/eisa-bus.c
> +++ b/drivers/eisa/eisa-bus.c
> @@ -232,8 +232,10 @@ static int __init eisa_init_device(struct eisa_root_device *root,
>  static int __init eisa_register_device(struct eisa_device *edev)
>  {
>  	int rc = device_register(&edev->dev);
> -	if (rc)
> +	if (rc) {
> +		put_device(&edev->dev);
>  		return rc;
> +	}
>  
>  	rc = device_create_file(&edev->dev, &dev_attr_signature);
>  	if (rc)
> -- 
> 1.8.3.1
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] eisa: call put_device if device_register fails
  2013-12-13 19:04   ` [PATCH 2/4] eisa: call put_device if device_register fails Bjorn Helgaas
@ 2013-12-13 19:08     ` Levente Kurusa
  0 siblings, 0 replies; 10+ messages in thread
From: Levente Kurusa @ 2013-12-13 19:08 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: LKML

On 12/13/2013 08:04 PM, Bjorn Helgaas wrote:
> On Fri, Dec 13, 2013 at 07:39:54PM +0100, Levente Kurusa wrote:
>> We need to give up the last reference to edev->dev, so
>> we need to call put_device().
>>
>> Cc: Bjorn Helgaas <bhelgaas@google.com>
>> Signed-off-by: Levente Kurusa <levex@linux.com>
> 
> I applied this and will push it through my PCI tree, since I don't think
> anybody really takes care of EISA these days.
> 
> I looked at other callers of device_register(), and most of them look like
> they have the same problem.  Can you fix the others, too?  This patch says
> "2/4", so maybe you already are, but I can't find the other patches in the
> series.

Yes, the patchset didn't hit LKML due to me being a noob with git-send-email. :-(

I will fix them, just sent this to verify that I am doing it right. :-)

Thanks for applying!

-- 
Regards,
Levente Kurusa

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/4] net: phy: call put_device on device_register() failure
       [not found] ` <1386959996-7958-2-git-send-email-levex@linux.com>
@ 2013-12-14 17:25   ` Greg Kroah-Hartman
  0 siblings, 0 replies; 10+ messages in thread
From: Greg Kroah-Hartman @ 2013-12-14 17:25 UTC (permalink / raw)
  To: Levente Kurusa; +Cc: LKML, Grant Likely, Michał Mirosław, netdev

On Fri, Dec 13, 2013 at 07:39:53PM +0100, Levente Kurusa wrote:
> It is required to call put_device() if device_register() fails,
> so that we give up the last reference to the device. Calling put_device
> allows for mdiobus_release to be executed, kfreeing the bus.
> 
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Grant Likely <grant.likely@secretlab.ca>
> Signed-off-by: Levente Kurusa <levex@linux.com>

Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/4] backlight: lcd: call put_device if device_register fails
       [not found] ` <1386959996-7958-4-git-send-email-levex@linux.com>
@ 2013-12-16  4:52     ` Jingoo Han
  2014-01-07  1:42     ` Jingoo Han
  1 sibling, 0 replies; 10+ messages in thread
From: Jingoo Han @ 2013-12-16  4:52 UTC (permalink / raw)
  To: 'Levente Kurusa', 'Andrew Morton'
  Cc: 'LKML', 'Jean-Christophe Plagniol-Villard',
	'Tomi Valkeinen', linux-fbdev, 'Jingoo Han'

On Saturday, December 14, 2013 3:40 AM, Levente Kurusa wrote:
> 
> Currently we kfree the container of the device which failed to register.
> This is wrong as the last reference is not given up with a put_device
> call. Also, now that we have put_device() callen, we no longer need
> the kfree as the new_ld->dev.release function will take care of kfreeing
> the associated memory.
> 
> Signed-off-by: Levente Kurusa <levex@linux.com>

(+cc Andrew Morton)

Acked-by: Jingoo Han <jg1.han@samsung.com>

It looks good.
According to the comment of device_register, put_device()
should be used, instead of directly freeing.

./drivers/base/core.c

 * NOTE: _Never_ directly free @dev after calling this function, even
 * if it returned an error! Always use put_device() to give up the
 * reference initialized in this function instead.
 */
int device_register(struct device *dev)
{
        device_initialize(dev);
        return device_add(dev);
}
EXPORT_SYMBOL_GPL(device_register);

Levente Kurusa,
By the way, don't send the same mails three times, without any
reason. It is the waste of traffic. :-(

Best regards,
Jingoo Han

> ---
>  drivers/video/backlight/lcd.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c
> index 93cf15e..7de847d 100644
> --- a/drivers/video/backlight/lcd.c
> +++ b/drivers/video/backlight/lcd.c
> @@ -228,7 +228,7 @@ struct lcd_device *lcd_device_register(const char *name, struct device *parent,
> 
>  	rc = device_register(&new_ld->dev);
>  	if (rc) {
> -		kfree(new_ld);
> +		put_device(&new_ld->dev);
>  		return ERR_PTR(rc);
>  	}
> 
> --
> 1.8.3.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/4] backlight: lcd: call put_device if device_register fails
@ 2013-12-16  4:52     ` Jingoo Han
  0 siblings, 0 replies; 10+ messages in thread
From: Jingoo Han @ 2013-12-16  4:52 UTC (permalink / raw)
  To: 'Levente Kurusa', 'Andrew Morton'
  Cc: 'LKML', 'Jean-Christophe Plagniol-Villard',
	'Tomi Valkeinen', linux-fbdev, 'Jingoo Han'

On Saturday, December 14, 2013 3:40 AM, Levente Kurusa wrote:
> 
> Currently we kfree the container of the device which failed to register.
> This is wrong as the last reference is not given up with a put_device
> call. Also, now that we have put_device() callen, we no longer need
> the kfree as the new_ld->dev.release function will take care of kfreeing
> the associated memory.
> 
> Signed-off-by: Levente Kurusa <levex@linux.com>

(+cc Andrew Morton)

Acked-by: Jingoo Han <jg1.han@samsung.com>

It looks good.
According to the comment of device_register, put_device()
should be used, instead of directly freeing.

./drivers/base/core.c

 * NOTE: _Never_ directly free @dev after calling this function, even
 * if it returned an error! Always use put_device() to give up the
 * reference initialized in this function instead.
 */
int device_register(struct device *dev)
{
        device_initialize(dev);
        return device_add(dev);
}
EXPORT_SYMBOL_GPL(device_register);

Levente Kurusa,
By the way, don't send the same mails three times, without any
reason. It is the waste of traffic. :-(

Best regards,
Jingoo Han

> ---
>  drivers/video/backlight/lcd.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c
> index 93cf15e..7de847d 100644
> --- a/drivers/video/backlight/lcd.c
> +++ b/drivers/video/backlight/lcd.c
> @@ -228,7 +228,7 @@ struct lcd_device *lcd_device_register(const char *name, struct device *parent,
> 
>  	rc = device_register(&new_ld->dev);
>  	if (rc) {
> -		kfree(new_ld);
> +		put_device(&new_ld->dev);
>  		return ERR_PTR(rc);
>  	}
> 
> --
> 1.8.3.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/4] backlight: lcd: call put_device if device_register fails
  2013-12-16  4:52     ` Jingoo Han
@ 2013-12-16 17:16       ` Levente Kurusa
  -1 siblings, 0 replies; 10+ messages in thread
From: Levente Kurusa @ 2013-12-16 17:16 UTC (permalink / raw)
  To: Jingoo Han, 'Andrew Morton'
  Cc: 'LKML', 'Jean-Christophe Plagniol-Villard',
	'Tomi Valkeinen',
	linux-fbdev

On 12/16/2013 05:52 AM, Jingoo Han wrote:
> On Saturday, December 14, 2013 3:40 AM, Levente Kurusa wrote:
>>
>> Currently we kfree the container of the device which failed to register.
>> This is wrong as the last reference is not given up with a put_device
>> call. Also, now that we have put_device() callen, we no longer need
>> the kfree as the new_ld->dev.release function will take care of kfreeing
>> the associated memory.
>>
>> Signed-off-by: Levente Kurusa <levex@linux.com>
> 
> (+cc Andrew Morton)
> 
> Acked-by: Jingoo Han <jg1.han@samsung.com>
> 
> It looks good.
> According to the comment of device_register, put_device()
> should be used, instead of directly freeing.
Indeed, this is also mostly explained in [0/4]. Thanks for the Ack!
> 
[...]
> 
> Levente Kurusa,
> By the way, don't send the same mails three times, without any
> reason. It is the waste of traffic. :-(
> 

Yea, sorry about that I messed up my git's smtp config and hence most of the
messages bounced off. It didn't even reach LKML. Sorry once more.


-- 
Regards,
Levente Kurusa

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/4] backlight: lcd: call put_device if device_register fails
@ 2013-12-16 17:16       ` Levente Kurusa
  0 siblings, 0 replies; 10+ messages in thread
From: Levente Kurusa @ 2013-12-16 17:16 UTC (permalink / raw)
  To: Jingoo Han, 'Andrew Morton'
  Cc: 'LKML', 'Jean-Christophe Plagniol-Villard',
	'Tomi Valkeinen',
	linux-fbdev

On 12/16/2013 05:52 AM, Jingoo Han wrote:
> On Saturday, December 14, 2013 3:40 AM, Levente Kurusa wrote:
>>
>> Currently we kfree the container of the device which failed to register.
>> This is wrong as the last reference is not given up with a put_device
>> call. Also, now that we have put_device() callen, we no longer need
>> the kfree as the new_ld->dev.release function will take care of kfreeing
>> the associated memory.
>>
>> Signed-off-by: Levente Kurusa <levex@linux.com>
> 
> (+cc Andrew Morton)
> 
> Acked-by: Jingoo Han <jg1.han@samsung.com>
> 
> It looks good.
> According to the comment of device_register, put_device()
> should be used, instead of directly freeing.
Indeed, this is also mostly explained in [0/4]. Thanks for the Ack!
> 
[...]
> 
> Levente Kurusa,
> By the way, don't send the same mails three times, without any
> reason. It is the waste of traffic. :-(
> 

Yea, sorry about that I messed up my git's smtp config and hence most of the
messages bounced off. It didn't even reach LKML. Sorry once more.


-- 
Regards,
Levente Kurusa

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/4] backlight: lcd: call put_device if device_register fails
       [not found] ` <1386959996-7958-4-git-send-email-levex@linux.com>
@ 2014-01-07  1:42     ` Jingoo Han
  2014-01-07  1:42     ` Jingoo Han
  1 sibling, 0 replies; 10+ messages in thread
From: Jingoo Han @ 2014-01-07  1:42 UTC (permalink / raw)
  To: 'Levente Kurusa'
  Cc: 'LKML', 'Jean-Christophe Plagniol-Villard',
	'Tomi Valkeinen', linux-fbdev, 'Jingoo Han',
	'Andrew Morton'

On Saturday, December 14, 2013 3:40 AM, Levente Kurusa wrote:
> 
> Currently we kfree the container of the device which failed to register.
> This is wrong as the last reference is not given up with a put_device
> call. Also, now that we have put_device() callen, we no longer need
> the kfree as the new_ld->dev.release function will take care of kfreeing
> the associated memory.
> 
> Signed-off-by: Levente Kurusa <levex@linux.com>
> ---
>  drivers/video/backlight/lcd.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c
> index 93cf15e..7de847d 100644
> --- a/drivers/video/backlight/lcd.c
> +++ b/drivers/video/backlight/lcd.c
> @@ -228,7 +228,7 @@ struct lcd_device *lcd_device_register(const char *name, struct device *parent,
> 
>  	rc = device_register(&new_ld->dev);
>  	if (rc) {
> -		kfree(new_ld);
> +		put_device(&new_ld->dev);
>  		return ERR_PTR(rc);
>  	}

(+cc Andrew Morton)

Hi Levente Kurusa,

Would you fix the same thing for 'backlight.c' file?

./drivers/video/backlight/backlight.c
struct backlight_device *backlight_device_register(const char *name,
    .....
    rc = device_register(&new_bd->dev);
            if (rc) {
                    kfree(new_bd);
                    return ERR_PTR(rc);
            }

Best regards,
Jingoo Han


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/4] backlight: lcd: call put_device if device_register fails
@ 2014-01-07  1:42     ` Jingoo Han
  0 siblings, 0 replies; 10+ messages in thread
From: Jingoo Han @ 2014-01-07  1:42 UTC (permalink / raw)
  To: 'Levente Kurusa'
  Cc: 'LKML', 'Jean-Christophe Plagniol-Villard',
	'Tomi Valkeinen', linux-fbdev, 'Jingoo Han',
	'Andrew Morton'

On Saturday, December 14, 2013 3:40 AM, Levente Kurusa wrote:
> 
> Currently we kfree the container of the device which failed to register.
> This is wrong as the last reference is not given up with a put_device
> call. Also, now that we have put_device() callen, we no longer need
> the kfree as the new_ld->dev.release function will take care of kfreeing
> the associated memory.
> 
> Signed-off-by: Levente Kurusa <levex@linux.com>
> ---
>  drivers/video/backlight/lcd.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c
> index 93cf15e..7de847d 100644
> --- a/drivers/video/backlight/lcd.c
> +++ b/drivers/video/backlight/lcd.c
> @@ -228,7 +228,7 @@ struct lcd_device *lcd_device_register(const char *name, struct device *parent,
> 
>  	rc = device_register(&new_ld->dev);
>  	if (rc) {
> -		kfree(new_ld);
> +		put_device(&new_ld->dev);
>  		return ERR_PTR(rc);
>  	}

(+cc Andrew Morton)

Hi Levente Kurusa,

Would you fix the same thing for 'backlight.c' file?

./drivers/video/backlight/backlight.c
struct backlight_device *backlight_device_register(const char *name,
    .....
    rc = device_register(&new_bd->dev);
            if (rc) {
                    kfree(new_bd);
                    return ERR_PTR(rc);
            }

Best regards,
Jingoo Han


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 2/4] eisa: call put_device if device_register fails
  2013-12-13 19:22 [PATCH 0/4] treewide: add missing put_device calls Levente Kurusa
@ 2013-12-13 19:22 ` Levente Kurusa
  0 siblings, 0 replies; 10+ messages in thread
From: Levente Kurusa @ 2013-12-13 19:22 UTC (permalink / raw)
  To: LKML; +Cc: Levente Kurusa, Bjorn Helgaas

We need to give up the last reference to edev->dev, so
we need to call put_device().

Cc: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Levente Kurusa <levex@linux.com>
---
 drivers/eisa/eisa-bus.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/eisa/eisa-bus.c b/drivers/eisa/eisa-bus.c
index 272a3ec..8842cde 100644
--- a/drivers/eisa/eisa-bus.c
+++ b/drivers/eisa/eisa-bus.c
@@ -232,8 +232,10 @@ static int __init eisa_init_device(struct eisa_root_device *root,
 static int __init eisa_register_device(struct eisa_device *edev)
 {
 	int rc = device_register(&edev->dev);
-	if (rc)
+	if (rc) {
+		put_device(&edev->dev);
 		return rc;
+	}
 
 	rc = device_create_file(&edev->dev, &dev_attr_signature);
 	if (rc)
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2014-01-07  1:42 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1386959996-7958-1-git-send-email-levex@linux.com>
     [not found] ` <1386959996-7958-3-git-send-email-levex@linux.com>
2013-12-13 19:04   ` [PATCH 2/4] eisa: call put_device if device_register fails Bjorn Helgaas
2013-12-13 19:08     ` Levente Kurusa
     [not found] ` <1386959996-7958-2-git-send-email-levex@linux.com>
2013-12-14 17:25   ` [PATCH 1/4] net: phy: call put_device on device_register() failure Greg Kroah-Hartman
     [not found] ` <1386959996-7958-4-git-send-email-levex@linux.com>
2013-12-16  4:52   ` [PATCH 3/4] backlight: lcd: call put_device if device_register fails Jingoo Han
2013-12-16  4:52     ` Jingoo Han
2013-12-16 17:16     ` Levente Kurusa
2013-12-16 17:16       ` Levente Kurusa
2014-01-07  1:42   ` Jingoo Han
2014-01-07  1:42     ` Jingoo Han
2013-12-13 19:22 [PATCH 0/4] treewide: add missing put_device calls Levente Kurusa
2013-12-13 19:22 ` [PATCH 2/4] eisa: call put_device if device_register fails Levente Kurusa

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.