All of lore.kernel.org
 help / color / mirror / Atom feed
* /sys/devices/system/timer registered twice
@ 2004-11-09 19:30 Kay Sievers
  2004-11-09 19:39 ` Greg KH
  2004-11-09 22:52 ` Greg KH
  0 siblings, 2 replies; 9+ messages in thread
From: Kay Sievers @ 2004-11-09 19:30 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg KH

Hi,
I got this on a Centrino box with the latest bk:

  [kay@pim linux.kay]$ ls -l /sys/devices/system/
  total 0
  drwxr-xr-x  7 root root 0 Nov  8 15:12 .
  drwxr-xr-x  5 root root 0 Nov  8 15:12 ..
  drwxr-xr-x  3 root root 0 Nov  8 15:12 cpu
  drwxr-xr-x  3 root root 0 Nov  8 15:12 i8259
  drwxr-xr-x  2 root root 0 Nov  8 15:12 ioapic
  drwxr-xr-x  3 root root 0 Nov  8 15:12 irqrouter
  ?---------  ? ?    ?    ?            ? timer


It is caused by registering two devices with the name "timer" from:

  arch/i386/kernel/time.c
  arch/i386/kernel/timers/timer_pit.c

If I change one of the names, I get two correct looking sysfs entries.

Greg, shouldn't the driver core prevent the corruption of the first
device if another one tries to register with the same name?

Thanks,
Kay

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

* Re: /sys/devices/system/timer registered twice
  2004-11-09 19:30 /sys/devices/system/timer registered twice Kay Sievers
@ 2004-11-09 19:39 ` Greg KH
  2004-11-10  2:25   ` Kay Sievers
  2004-11-09 22:52 ` Greg KH
  1 sibling, 1 reply; 9+ messages in thread
From: Greg KH @ 2004-11-09 19:39 UTC (permalink / raw)
  To: Kay Sievers; +Cc: linux-kernel

On Tue, Nov 09, 2004 at 08:30:43PM +0100, Kay Sievers wrote:
> Hi,
> I got this on a Centrino box with the latest bk:
> 
>   [kay@pim linux.kay]$ ls -l /sys/devices/system/
>   total 0
>   drwxr-xr-x  7 root root 0 Nov  8 15:12 .
>   drwxr-xr-x  5 root root 0 Nov  8 15:12 ..
>   drwxr-xr-x  3 root root 0 Nov  8 15:12 cpu
>   drwxr-xr-x  3 root root 0 Nov  8 15:12 i8259
>   drwxr-xr-x  2 root root 0 Nov  8 15:12 ioapic
>   drwxr-xr-x  3 root root 0 Nov  8 15:12 irqrouter
>   ?---------  ? ?    ?    ?            ? timer
> 
> 
> It is caused by registering two devices with the name "timer" from:
> 
>   arch/i386/kernel/time.c
>   arch/i386/kernel/timers/timer_pit.c
> 
> If I change one of the names, I get two correct looking sysfs entries.
> 
> Greg, shouldn't the driver core prevent the corruption of the first
> device if another one tries to register with the same name?

Yes, we should handle this.  Can you try the patch below?  I just sent
it to Linus, as it fixes a bug that was recently introduced.

The second registration should fail, and this patch will make it fail,
and recover properly.

thanks,

greg k-h

--- a/lib/kobject.c	2004-11-05 10:06:33 -08:00
+++ b/lib/kobject.c	2004-11-08 23:58:02 -08:00
@@ -181,10 +181,10 @@ int kobject_add(struct kobject * kobj)
 
 	error = create_dir(kobj);
 	if (error) {
+		/* Does the kobject_put() for us */
 		unlink(kobj);
 		if (parent)
 			kobject_put(parent);
-		kobject_put(kobj);
 	} else {
 		kobject_hotplug(kobj, KOBJ_ADD);
 	}

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

* Re: /sys/devices/system/timer registered twice
  2004-11-09 19:30 /sys/devices/system/timer registered twice Kay Sievers
  2004-11-09 19:39 ` Greg KH
@ 2004-11-09 22:52 ` Greg KH
  2004-11-09 23:19   ` Dmitry Torokhov
  1 sibling, 1 reply; 9+ messages in thread
From: Greg KH @ 2004-11-09 22:52 UTC (permalink / raw)
  To: Kay Sievers, dtor_core; +Cc: linux-kernel

On Tue, Nov 09, 2004 at 08:30:43PM +0100, Kay Sievers wrote:
> Hi,
> I got this on a Centrino box with the latest bk:
> 
>   [kay@pim linux.kay]$ ls -l /sys/devices/system/
>   total 0
>   drwxr-xr-x  7 root root 0 Nov  8 15:12 .
>   drwxr-xr-x  5 root root 0 Nov  8 15:12 ..
>   drwxr-xr-x  3 root root 0 Nov  8 15:12 cpu
>   drwxr-xr-x  3 root root 0 Nov  8 15:12 i8259
>   drwxr-xr-x  2 root root 0 Nov  8 15:12 ioapic
>   drwxr-xr-x  3 root root 0 Nov  8 15:12 irqrouter
>   ?---------  ? ?    ?    ?            ? timer
> 
> 
> It is caused by registering two devices with the name "timer" from:
> 
>   arch/i386/kernel/time.c
>   arch/i386/kernel/timers/timer_pit.c
> 
> If I change one of the names, I get two correct looking sysfs entries.
> 
> Greg, shouldn't the driver core prevent the corruption of the first
> device if another one tries to register with the same name?

Hm, this looks like an issue for Dmitry, as there shouldn't be too
sysdev_class structures with the same name, right?

thanks,

greg k-h

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

* Re: /sys/devices/system/timer registered twice
  2004-11-09 22:52 ` Greg KH
@ 2004-11-09 23:19   ` Dmitry Torokhov
  2004-11-09 23:30     ` [PATCH] timer: fix up problem where two sysdev_class devices had the same name Greg KH
  0 siblings, 1 reply; 9+ messages in thread
From: Dmitry Torokhov @ 2004-11-09 23:19 UTC (permalink / raw)
  To: Greg KH; +Cc: Kay Sievers, linux-kernel

On Tue, 9 Nov 2004 14:52:45 -0800, Greg KH <greg@kroah.com> wrote:
> 
> 
> On Tue, Nov 09, 2004 at 08:30:43PM +0100, Kay Sievers wrote:
> > Hi,
> > I got this on a Centrino box with the latest bk:
> >
> >   [kay@pim linux.kay]$ ls -l /sys/devices/system/
> >   total 0
> >   drwxr-xr-x  7 root root 0 Nov  8 15:12 .
> >   drwxr-xr-x  5 root root 0 Nov  8 15:12 ..
> >   drwxr-xr-x  3 root root 0 Nov  8 15:12 cpu
> >   drwxr-xr-x  3 root root 0 Nov  8 15:12 i8259
> >   drwxr-xr-x  2 root root 0 Nov  8 15:12 ioapic
> >   drwxr-xr-x  3 root root 0 Nov  8 15:12 irqrouter
> >   ?---------  ? ?    ?    ?            ? timer
> >
> >
> > It is caused by registering two devices with the name "timer" from:
> >
> >   arch/i386/kernel/time.c
> >   arch/i386/kernel/timers/timer_pit.c
> >
> > If I change one of the names, I get two correct looking sysfs entries.
> >
> > Greg, shouldn't the driver core prevent the corruption of the first
> > device if another one tries to register with the same name?
> 
> Hm, this looks like an issue for Dmitry, as there shouldn't be too
> sysdev_class structures with the same name, right?
> 

I agree, but I think you got the wrong man here ;) You need to talk to
Venkatesh.

http://linux.bkbits.net:8080/linux-2.5/cset@41810e4aGZ0E5bn_hMb4JgIY5u90zA?nav=index.html|src/.|src/arch|src/arch/i386|src/arch/i386/kernel|related/arch/i386/kernel/time.c

-- 
Dmitry

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

* [PATCH] timer: fix up problem where two sysdev_class devices had the same name.
  2004-11-09 23:19   ` Dmitry Torokhov
@ 2004-11-09 23:30     ` Greg KH
  0 siblings, 0 replies; 9+ messages in thread
From: Greg KH @ 2004-11-09 23:30 UTC (permalink / raw)
  To: torvalds, Andrew Morton, venkatesh.pallipadi
  Cc: Kay Sievers, linux-kernel, dtor_core

Thanks to Kay Sievers for reporting this.  

Was caused by a change from Venkatesh Pallipadi as seen at:
  http://linux.bkbits.net:8080/linux-2.5/cset@41810e4aGZ0E5bn_hMb4JgIY5u90zA

Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>

diff -Nru a/arch/i386/kernel/timers/timer_pit.c b/arch/i386/kernel/timers/timer_pit.c
--- a/arch/i386/kernel/timers/timer_pit.c	2004-11-09 15:25:54 -08:00
+++ b/arch/i386/kernel/timers/timer_pit.c	2004-11-09 15:25:54 -08:00
@@ -181,7 +181,7 @@
 }
 
 static struct sysdev_class timer_sysclass = {
-	set_kset_name("timer"),
+	set_kset_name("timer_pit"),
 	.resume	= timer_resume,
 };
 

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

* Re: /sys/devices/system/timer registered twice
  2004-11-09 19:39 ` Greg KH
@ 2004-11-10  2:25   ` Kay Sievers
  2004-11-10 22:36     ` Maneesh Soni
  0 siblings, 1 reply; 9+ messages in thread
From: Kay Sievers @ 2004-11-10  2:25 UTC (permalink / raw)
  To: Greg KH; +Cc: linux-kernel

On Tue, Nov 09, 2004 at 11:39:47AM -0800, Greg KH wrote:
> On Tue, Nov 09, 2004 at 08:30:43PM +0100, Kay Sievers wrote:
> > Hi,
> > I got this on a Centrino box with the latest bk:
> > 
> >   [kay@pim linux.kay]$ ls -l /sys/devices/system/
> >   total 0
> >   drwxr-xr-x  7 root root 0 Nov  8 15:12 .
> >   drwxr-xr-x  5 root root 0 Nov  8 15:12 ..
> >   drwxr-xr-x  3 root root 0 Nov  8 15:12 cpu
> >   drwxr-xr-x  3 root root 0 Nov  8 15:12 i8259
> >   drwxr-xr-x  2 root root 0 Nov  8 15:12 ioapic
> >   drwxr-xr-x  3 root root 0 Nov  8 15:12 irqrouter
> >   ?---------  ? ?    ?    ?            ? timer
> > 
> > 
> > It is caused by registering two devices with the name "timer" from:
> > 
> >   arch/i386/kernel/time.c
> >   arch/i386/kernel/timers/timer_pit.c
> > 
> > If I change one of the names, I get two correct looking sysfs entries.
> > 
> > Greg, shouldn't the driver core prevent the corruption of the first
> > device if another one tries to register with the same name?
> 
> Yes, we should handle this.  Can you try the patch below?  I just sent
> it to Linus, as it fixes a bug that was recently introduced.
> 
> The second registration should fail, and this patch will make it fail,
> and recover properly.

Yes, the registration fails. But it seems that the second call to
create_dir(kobj) with a kobject with the same name and parent corrupts
the dentry from the first call.

To test it, I just called create_dir(kobj) a second time for my video
driver and the sysfs entry of the successful registered kobject was
corrupted:

  [kay@pim ~]$ ls -la /sys/class/video4linux/
  total 0
  drwxr-xr-x   3 root root 0 Nov 10 02:53 .
  drwxr-xr-x  18 root root 0 Nov 10 02:53 ..
  ?---------   ? ?    ?    ?            ? video0

Thanks,
Kay

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

* Re: /sys/devices/system/timer registered twice
  2004-11-10  2:25   ` Kay Sievers
@ 2004-11-10 22:36     ` Maneesh Soni
  2004-11-11  0:12       ` Kay Sievers
  2004-11-12 20:50       ` Greg KH
  0 siblings, 2 replies; 9+ messages in thread
From: Maneesh Soni @ 2004-11-10 22:36 UTC (permalink / raw)
  To: Kay Sievers; +Cc: Greg KH, linux-kernel

On Wed, Nov 10, 2004 at 03:25:35AM +0100, Kay Sievers wrote:
> On Tue, Nov 09, 2004 at 11:39:47AM -0800, Greg KH wrote:
> > On Tue, Nov 09, 2004 at 08:30:43PM +0100, Kay Sievers wrote:
> > > Hi,
> > > I got this on a Centrino box with the latest bk:
> > > 
> > >   [kay@pim linux.kay]$ ls -l /sys/devices/system/
> > >   total 0
> > >   drwxr-xr-x  7 root root 0 Nov  8 15:12 .
> > >   drwxr-xr-x  5 root root 0 Nov  8 15:12 ..
> > >   drwxr-xr-x  3 root root 0 Nov  8 15:12 cpu
> > >   drwxr-xr-x  3 root root 0 Nov  8 15:12 i8259
> > >   drwxr-xr-x  2 root root 0 Nov  8 15:12 ioapic
> > >   drwxr-xr-x  3 root root 0 Nov  8 15:12 irqrouter
> > >   ?---------  ? ?    ?    ?            ? timer
> > > 
> > > 
> > > It is caused by registering two devices with the name "timer" from:
> > > 
> > >   arch/i386/kernel/time.c
> > >   arch/i386/kernel/timers/timer_pit.c
> > > 
> > > If I change one of the names, I get two correct looking sysfs entries.
> > > 
> > > Greg, shouldn't the driver core prevent the corruption of the first
> > > device if another one tries to register with the same name?
> > 
> > Yes, we should handle this.  Can you try the patch below?  I just sent
> > it to Linus, as it fixes a bug that was recently introduced.
> > 
> > The second registration should fail, and this patch will make it fail,
> > and recover properly.
> 
> Yes, the registration fails. But it seems that the second call to
> create_dir(kobj) with a kobject with the same name and parent corrupts
> the dentry from the first call.
> 
> To test it, I just called create_dir(kobj) a second time for my video
> driver and the sysfs entry of the successful registered kobject was
> corrupted:
	> 
>   [kay@pim ~]$ ls -la /sys/class/video4linux/
>   total 0
>   drwxr-xr-x   3 root root 0 Nov 10 02:53 .
>   drwxr-xr-x  18 root root 0 Nov 10 02:53 ..
>   ?---------   ? ?    ?    ?            ? video0
> 

Thanks for reporting this bug. I think the problem here is doing d_drop()
for the existing directory dentry in create_dir() for error case. It should
not be done for EEXIST. Could you please try the same test with the following 
patch applied.

Thanks
Maneesh

o Do not release existing directory if the new directory happens to be a
  duplicate directory. Thanks to Kay Sievers for the testcase.

Signed-off-by: <maneesh@in.ibm.com>
---

 linux-2.6.10-rc1-bk20-maneesh/fs/sysfs/dir.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

diff -puN fs/sysfs/dir.c~fix-dropping-existing-dir fs/sysfs/dir.c
--- linux-2.6.10-rc1-bk20/fs/sysfs/dir.c~fix-dropping-existing-dir	2004-11-10 16:26:14.000000000 -0600
+++ linux-2.6.10-rc1-bk20-maneesh/fs/sysfs/dir.c	2004-11-10 16:27:42.000000000 -0600
@@ -111,7 +111,7 @@ static int create_dir(struct kobject * k
 				d_rehash(*d);
 			}
 		}
-		if (error)
+		if (error && (error != -EEXIST))
 			d_drop(*d);
 		dput(*d);
 	} else
_



-- 
Maneesh Soni
Linux Technology Center, 
IBM Austin
email: maneesh@in.ibm.com
Phone: 1-512-838-1896 Fax: 
T/L : 6781896

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

* Re: /sys/devices/system/timer registered twice
  2004-11-10 22:36     ` Maneesh Soni
@ 2004-11-11  0:12       ` Kay Sievers
  2004-11-12 20:50       ` Greg KH
  1 sibling, 0 replies; 9+ messages in thread
From: Kay Sievers @ 2004-11-11  0:12 UTC (permalink / raw)
  To: Maneesh Soni; +Cc: Greg KH, linux-kernel

On Wed, Nov 10, 2004 at 04:36:29PM -0600, Maneesh Soni wrote:
> On Wed, Nov 10, 2004 at 03:25:35AM +0100, Kay Sievers wrote:
> > On Tue, Nov 09, 2004 at 11:39:47AM -0800, Greg KH wrote:
> > > On Tue, Nov 09, 2004 at 08:30:43PM +0100, Kay Sievers wrote:
> > > > Hi,
> > > > I got this on a Centrino box with the latest bk:
> > > > 
> > > >   [kay@pim linux.kay]$ ls -l /sys/devices/system/
> > > >   total 0
> > > >   drwxr-xr-x  7 root root 0 Nov  8 15:12 .
> > > >   drwxr-xr-x  5 root root 0 Nov  8 15:12 ..
> > > >   drwxr-xr-x  3 root root 0 Nov  8 15:12 cpu
> > > >   drwxr-xr-x  3 root root 0 Nov  8 15:12 i8259
> > > >   drwxr-xr-x  2 root root 0 Nov  8 15:12 ioapic
> > > >   drwxr-xr-x  3 root root 0 Nov  8 15:12 irqrouter
> > > >   ?---------  ? ?    ?    ?            ? timer
> > > > 
> > > > 
> > > > It is caused by registering two devices with the name "timer" from:
> > > > 
> > > >   arch/i386/kernel/time.c
> > > >   arch/i386/kernel/timers/timer_pit.c
> > > > 
> > > > If I change one of the names, I get two correct looking sysfs entries.
> > > > 
> > > > Greg, shouldn't the driver core prevent the corruption of the first
> > > > device if another one tries to register with the same name?
> > > 
> > > Yes, we should handle this.  Can you try the patch below?  I just sent
> > > it to Linus, as it fixes a bug that was recently introduced.
> > > 
> > > The second registration should fail, and this patch will make it fail,
> > > and recover properly.
> > 
> > Yes, the registration fails. But it seems that the second call to
> > create_dir(kobj) with a kobject with the same name and parent corrupts
> > the dentry from the first call.
> > 
> > To test it, I just called create_dir(kobj) a second time for my video
> > driver and the sysfs entry of the successful registered kobject was
> > corrupted:
> 	> 
> >   [kay@pim ~]$ ls -la /sys/class/video4linux/
> >   total 0
> >   drwxr-xr-x   3 root root 0 Nov 10 02:53 .
> >   drwxr-xr-x  18 root root 0 Nov 10 02:53 ..
> >   ?---------   ? ?    ?    ?            ? video0
> > 
> 
> Thanks for reporting this bug. I think the problem here is doing d_drop()
> for the existing directory dentry in create_dir() for error case. It should
> not be done for EEXIST. Could you please try the same test with the following 
> patch applied.

My second create_dir(), also and the double "timer" registration do not corrupt
the sysfs directory from the first call anymore. Nice fix!

Thanks,
Kay

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

* Re: /sys/devices/system/timer registered twice
  2004-11-10 22:36     ` Maneesh Soni
  2004-11-11  0:12       ` Kay Sievers
@ 2004-11-12 20:50       ` Greg KH
  1 sibling, 0 replies; 9+ messages in thread
From: Greg KH @ 2004-11-12 20:50 UTC (permalink / raw)
  To: Maneesh Soni; +Cc: Kay Sievers, linux-kernel

On Wed, Nov 10, 2004 at 04:36:29PM -0600, Maneesh Soni wrote:
> On Wed, Nov 10, 2004 at 03:25:35AM +0100, Kay Sievers wrote:
> > On Tue, Nov 09, 2004 at 11:39:47AM -0800, Greg KH wrote:
> > > On Tue, Nov 09, 2004 at 08:30:43PM +0100, Kay Sievers wrote:
> > > > Hi,
> > > > I got this on a Centrino box with the latest bk:
> > > > 
> > > >   [kay@pim linux.kay]$ ls -l /sys/devices/system/
> > > >   total 0
> > > >   drwxr-xr-x  7 root root 0 Nov  8 15:12 .
> > > >   drwxr-xr-x  5 root root 0 Nov  8 15:12 ..
> > > >   drwxr-xr-x  3 root root 0 Nov  8 15:12 cpu
> > > >   drwxr-xr-x  3 root root 0 Nov  8 15:12 i8259
> > > >   drwxr-xr-x  2 root root 0 Nov  8 15:12 ioapic
> > > >   drwxr-xr-x  3 root root 0 Nov  8 15:12 irqrouter
> > > >   ?---------  ? ?    ?    ?            ? timer
> > > > 
> > > > 
> > > > It is caused by registering two devices with the name "timer" from:
> > > > 
> > > >   arch/i386/kernel/time.c
> > > >   arch/i386/kernel/timers/timer_pit.c
> > > > 
> > > > If I change one of the names, I get two correct looking sysfs entries.
> > > > 
> > > > Greg, shouldn't the driver core prevent the corruption of the first
> > > > device if another one tries to register with the same name?
> > > 
> > > Yes, we should handle this.  Can you try the patch below?  I just sent
> > > it to Linus, as it fixes a bug that was recently introduced.
> > > 
> > > The second registration should fail, and this patch will make it fail,
> > > and recover properly.
> > 
> > Yes, the registration fails. But it seems that the second call to
> > create_dir(kobj) with a kobject with the same name and parent corrupts
> > the dentry from the first call.
> > 
> > To test it, I just called create_dir(kobj) a second time for my video
> > driver and the sysfs entry of the successful registered kobject was
> > corrupted:
> 	> 
> >   [kay@pim ~]$ ls -la /sys/class/video4linux/
> >   total 0
> >   drwxr-xr-x   3 root root 0 Nov 10 02:53 .
> >   drwxr-xr-x  18 root root 0 Nov 10 02:53 ..
> >   ?---------   ? ?    ?    ?            ? video0
> > 
> 
> Thanks for reporting this bug. I think the problem here is doing d_drop()
> for the existing directory dentry in create_dir() for error case. It should
> not be done for EEXIST. Could you please try the same test with the following 
> patch applied.
> 
> Thanks
> Maneesh
> 
> o Do not release existing directory if the new directory happens to be a
>   duplicate directory. Thanks to Kay Sievers for the testcase.
> 
> Signed-off-by: <maneesh@in.ibm.com>

Applied, thanks.

greg k-h

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

end of thread, other threads:[~2004-11-12 21:31 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-11-09 19:30 /sys/devices/system/timer registered twice Kay Sievers
2004-11-09 19:39 ` Greg KH
2004-11-10  2:25   ` Kay Sievers
2004-11-10 22:36     ` Maneesh Soni
2004-11-11  0:12       ` Kay Sievers
2004-11-12 20:50       ` Greg KH
2004-11-09 22:52 ` Greg KH
2004-11-09 23:19   ` Dmitry Torokhov
2004-11-09 23:30     ` [PATCH] timer: fix up problem where two sysdev_class devices had the same name Greg KH

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.