Re: /sys/devices/system/timer registered twice

From: Maneesh Soni (maneesh_at_in.ibm.com)
Date: 11/10/04

  • Next message: Thomas Schlichter: "Re: 2.6.10-rc1-mm4"
    Date:	Wed, 10 Nov 2004 16:36:29 -0600
    To: Kay Sievers <kay.sievers@vrfy.org>
    
    

    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
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at  http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at  http://www.tux.org/lkml/
    

  • Next message: Thomas Schlichter: "Re: 2.6.10-rc1-mm4"

    Relevant Pages