public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Device class reference counting
@ 2004-07-30 16:03 Thomas Koeller
  2004-08-05 22:46 ` Greg KH
  0 siblings, 1 reply; 7+ messages in thread
From: Thomas Koeller @ 2004-07-30 16:03 UTC (permalink / raw)
  To: linux-kernel

Hi,

I found a little issue with reference counting for
device classes in 2.6.8-rc2. Patch attached. Please
cc me on any responses, as I am not subsribed to
this list.

tk



--- linux-mips/drivers/base/class.c	2004-07-14 16:21:33.000000000 +0200
+++ linux-mips-work/drivers/base/class.c	2004-07-30 17:51:09.477331128 +0200
@@ -353,8 +353,8 @@
 	struct class_interface * class_intf;
 	int error;
 
-	class_dev = class_device_get(class_dev);
-	if (!class_dev || !strlen(class_dev->class_id))
+	if (!strlen(class_dev->class_id)
+		|| !(class_dev = class_device_get(class_dev)))
 		return -EINVAL;
 
 	parent = class_get(class_dev->class);

-- 
--------------------------------------------------

Thomas Koeller, Software Development
Basler Vision Technologies

thomas dot koeller at baslerweb dot com
http://www.baslerweb.com

==============================

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

* Re: [PATCH] Device class reference counting
  2004-07-30 16:03 [PATCH] Device class reference counting Thomas Koeller
@ 2004-08-05 22:46 ` Greg KH
  2004-08-06  9:37   ` Thomas Koeller
  0 siblings, 1 reply; 7+ messages in thread
From: Greg KH @ 2004-08-05 22:46 UTC (permalink / raw)
  To: Thomas Koeller; +Cc: linux-kernel

On Fri, Jul 30, 2004 at 06:03:00PM +0200, Thomas Koeller wrote:
> Hi,
> 
> I found a little issue with reference counting for
> device classes in 2.6.8-rc2. Patch attached.

> --- linux-mips/drivers/base/class.c	2004-07-14 16:21:33.000000000 +0200
> +++ linux-mips-work/drivers/base/class.c	2004-07-30 17:51:09.477331128 +0200
> @@ -353,8 +353,8 @@
>  	struct class_interface * class_intf;
>  	int error;
>  
> -	class_dev = class_device_get(class_dev);
> -	if (!class_dev || !strlen(class_dev->class_id))
> +	if (!strlen(class_dev->class_id)
> +		|| !(class_dev = class_device_get(class_dev)))
>  		return -EINVAL;

I don't understand what you are trying to fix here.  In fact, if
class_dev is NULL, you will now oops.

Hm, I guess if class_dev->class_id is null, we will exit with an extra
reference grabbed on the class_dev.  Is that what you are trying to fix
here?

If so, please rework the patch.

thanks,

greg k-h

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

* Re: [PATCH] Device class reference counting
  2004-08-05 22:46 ` Greg KH
@ 2004-08-06  9:37   ` Thomas Koeller
  2004-08-06  9:43     ` Thomas Koeller
  0 siblings, 1 reply; 7+ messages in thread
From: Thomas Koeller @ 2004-08-06  9:37 UTC (permalink / raw)
  To: Greg KH; +Cc: linux-kernel

On Friday 06 August 2004 00:46, Greg KH wrote:
> On Fri, Jul 30, 2004 at 06:03:00PM +0200, Thomas Koeller wrote:
> > Hi,
> >
> > I found a little issue with reference counting for
> > device classes in 2.6.8-rc2. Patch attached.
> >
> > --- linux-mips/drivers/base/class.c	2004-07-14 16:21:33.000000000 +0200
> > +++ linux-mips-work/drivers/base/class.c	2004-07-30 17:51:09.477331128
> > +0200 @@ -353,8 +353,8 @@
> >  	struct class_interface * class_intf;
> >  	int error;
> >
> > -	class_dev = class_device_get(class_dev);
> > -	if (!class_dev || !strlen(class_dev->class_id))
> > +	if (!strlen(class_dev->class_id)
> > +		|| !(class_dev = class_device_get(class_dev)))
> >  		return -EINVAL;
>
> I don't understand what you are trying to fix here.  In fact, if
> class_dev is NULL, you will now oops.
>
> Hm, I guess if class_dev->class_id is null, we will exit with an extra
> reference grabbed on the class_dev.  Is that what you are trying to fix
> here?
>
> If so, please rework the patch.
>
> thanks,
>
> greg k-h

You guessed it - pretty obvious, isn't it? Well, I assumed the case
where class_dev is NULL didn't matter, as this could only happen if
there is a bug in some other place - seems I was wrong. So how's
about this patch:


--- linux-mips/drivers/base/class.c     2004-07-14 16:21:33.000000000 +0200
+++ linux-mips-work/drivers/base/class.c        2004-08-06 11:06:10.983688216 +0200
@@ -349,14 +349,19 @@

 int class_device_add(struct class_device *class_dev)
 {
-       struct class * parent;
+       struct class * parent = NULL;
        struct class_interface * class_intf;
        int error;

        class_dev = class_device_get(class_dev);
-       if (!class_dev || !strlen(class_dev->class_id))
+       if (!class_dev)
                return -EINVAL;

+       if (!strlen(class_dev->class_id)) {
+               error = -EINVAL;
+               goto register_done;
+       }
+
        parent = class_get(class_dev->class);

        pr_debug("CLASS: registering class device: ID = '%s'\n",



-- 
--------------------------------------------------

Thomas Koeller, Software Development
Basler Vision Technologies

thomas dot koeller at baslerweb dot com
http://www.baslerweb.com

==============================

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

* Re: [PATCH] Device class reference counting
  2004-08-06  9:37   ` Thomas Koeller
@ 2004-08-06  9:43     ` Thomas Koeller
  2004-08-06 19:47       ` Greg KH
  0 siblings, 1 reply; 7+ messages in thread
From: Thomas Koeller @ 2004-08-06  9:43 UTC (permalink / raw)
  To: Greg KH; +Cc: linux-kernel

Sorry,

seems the patch got messsed up somehow, so I am
resending it:

--- linux-mips/drivers/base/class.c     2004-07-14 16:21:33.000000000 +0200
+++ linux-mips-work/drivers/base/class.c        2004-08-06 11:06:10.983688216 +0200
@@ -349,14 +349,19 @@

 int class_device_add(struct class_device *class_dev)
 {
-       struct class * parent;
+       struct class * parent = NULL;
        struct class_interface * class_intf;
        int error;

        class_dev = class_device_get(class_dev);
-       if (!class_dev || !strlen(class_dev->class_id))
+       if (!class_dev)
                return -EINVAL;

+       if (!strlen(class_dev->class_id)) {
+               error = -EINVAL;
+               goto register_done;
+       }
+
        parent = class_get(class_dev->class);

        pr_debug("CLASS: registering class device: ID = '%s'\n",

-- 
--------------------------------------------------

Thomas Koeller, Software Development
Basler Vision Technologies

thomas dot koeller at baslerweb dot com
http://www.baslerweb.com

==============================

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

* Re: [PATCH] Device class reference counting
  2004-08-06  9:43     ` Thomas Koeller
@ 2004-08-06 19:47       ` Greg KH
  2004-08-10 12:09         ` Thomas Koeller
  0 siblings, 1 reply; 7+ messages in thread
From: Greg KH @ 2004-08-06 19:47 UTC (permalink / raw)
  To: Thomas Koeller; +Cc: linux-kernel

On Fri, Aug 06, 2004 at 11:43:47AM +0200, Thomas Koeller wrote:
> Sorry,
> 
> seems the patch got messsed up somehow, so I am
> resending it:

This patch looks good.  But it has the tabs stripped out of it, and no
Signed-off-by: line.  Care to resend it with that fixed up?

thanks,

greg k-h

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

* Re: [PATCH] Device class reference counting
  2004-08-06 19:47       ` Greg KH
@ 2004-08-10 12:09         ` Thomas Koeller
  2004-08-10 23:28           ` Greg KH
  0 siblings, 1 reply; 7+ messages in thread
From: Thomas Koeller @ 2004-08-10 12:09 UTC (permalink / raw)
  To: Greg KH; +Cc: linux-kernel

On Friday 06 August 2004 21:47, Greg KH wrote:
> On Fri, Aug 06, 2004 at 11:43:47AM +0200, Thomas Koeller wrote:
> > Sorry,
> >
> > seems the patch got messsed up somehow, so I am
> > resending it:
>
> This patch looks good.  But it has the tabs stripped out of it, and no
> Signed-off-by: line.  Care to resend it with that fixed up?
>
> thanks,
>
> greg k-h

Hi greg,

here's the patch again, re-created against 2.6.8-rc3.
This time I even managed to read
Documentation/SubmittingPatches ;-)

The tabs are all there, if they are stripped again somewhere
along the way, it is beyond my control. If this should happen,
could you fix that on your side?

thanks,
Thomas



Signed-off-by: Thomas Koeller <thomas.koeller@baslerweb.com>

--- linux-2.6.8-rc3-orig/drivers/base/class.c	2004-08-07 12:19:01.000000000 +0200
+++ linux-2.6.8-rc3/drivers/base/class.c	2004-08-07 12:27:32.112631077 +0200
@@ -349,15 +349,20 @@ void class_device_initialize(struct clas
 
 int class_device_add(struct class_device *class_dev)
 {
-	struct class * parent;
+	struct class * parent = NULL;
 	struct class_interface * class_intf;
 	int error;
 
 	class_dev = class_device_get(class_dev);
-	if (!class_dev || !strlen(class_dev->class_id))
+	if (!class_dev)
 		return -EINVAL;
 
-	parent = class_get(class_dev->class);
+	if (!strlen(class_dev->class_id)) {
+		error = -EINVAL;
+		goto register_done;
+	}
+
+ 	parent = class_get(class_dev->class);
 
 	pr_debug("CLASS: registering class device: ID = '%s'\n",
 		 class_dev->class_id);

-- 
--------------------------------------------------

Thomas Koeller, Software Development
Basler Vision Technologies

thomas dot koeller at baslerweb dot com
http://www.baslerweb.com

==============================

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

* Re: [PATCH] Device class reference counting
  2004-08-10 12:09         ` Thomas Koeller
@ 2004-08-10 23:28           ` Greg KH
  0 siblings, 0 replies; 7+ messages in thread
From: Greg KH @ 2004-08-10 23:28 UTC (permalink / raw)
  To: Thomas Koeller; +Cc: linux-kernel

On Tue, Aug 10, 2004 at 02:09:43PM +0200, Thomas Koeller wrote:
> On Friday 06 August 2004 21:47, Greg KH wrote:
> > On Fri, Aug 06, 2004 at 11:43:47AM +0200, Thomas Koeller wrote:
> > > Sorry,
> > >
> > > seems the patch got messsed up somehow, so I am
> > > resending it:
> >
> > This patch looks good.  But it has the tabs stripped out of it, and no
> > Signed-off-by: line.  Care to resend it with that fixed up?
> >
> > thanks,
> >
> > greg k-h
> 
> Hi greg,
> 
> here's the patch again, re-created against 2.6.8-rc3.
> This time I even managed to read
> Documentation/SubmittingPatches ;-)
> 
> The tabs are all there, if they are stripped again somewhere
> along the way, it is beyond my control. If this should happen,
> could you fix that on your side?

Looks good, I've applied this, thanks.

greg k-h


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

end of thread, other threads:[~2004-08-10 23:32 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-07-30 16:03 [PATCH] Device class reference counting Thomas Koeller
2004-08-05 22:46 ` Greg KH
2004-08-06  9:37   ` Thomas Koeller
2004-08-06  9:43     ` Thomas Koeller
2004-08-06 19:47       ` Greg KH
2004-08-10 12:09         ` Thomas Koeller
2004-08-10 23:28           ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox