* [1/2] 2.6.23-rc1: known regressions
@ 2007-07-23 9:47 Michal Piotrowski
2007-07-23 10:21 ` Al Viro
2007-07-23 11:17 ` Trent Piepho
0 siblings, 2 replies; 7+ messages in thread
From: Michal Piotrowski @ 2007-07-23 9:47 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton, LKML, Andi Kleen, Ingo Molnar,
Markus, Andre Noll, acpi4asus-user, Corentin Chary, Karol Kozimor,
Gabriel C, Netdev, Stephen Hemminger, Thomas Meyer
Hi all,
Here is a list of some known regressions in 2.6.23-rc1.
Feel free to add new regressions/remove fixed etc.
http://kernelnewbies.org/known_regressions
List of Aces
Name Regressions fixed since 21-Jun-2007
Andi Kleen 4
Linus Torvalds 4
Adrian Bunk 3
Andrew Morton 3
Jens Axboe 3
Al Viro 2
David Woodhouse 2
Hugh Dickins 2
Tejun Heo 2
Unclassified
Subject : /usr/bin/ld: section .text [ffffffffff700500 -> ffffffffff7007e3] overlaps section .gnu.version_d [ffffffffff7004d8 -> ffffffffff70050f]
References : http://lkml.org/lkml/2007/7/22/239
Last known good : ?
Submitter : Andre Noll <maan@systemlinux.org>
Caused-By : ?
Handled-By : Andi Kleen <ak@suse.de>
Status : problem is being debugged
Subject : pcwd_init_module(): WARNING: at lib/kref.c:33 kref_get()
References : http://lkml.org/lkml/2007/7/22/94
Last known good : ?
Submitter : Ingo Molnar <mingo@elte.hu>
Caused-By : ?
Handled-By : ?
Status : problem is being debugged
Subject : konqueror suddenly vanishing, "konqueror: Fatal IO error: client killed"
References : http://lkml.org/lkml/2007/7/22/86
Last known good : ?
Submitter : Markus <lists4me@web.de>
Caused-By : ?
Handled-By : Ingo Molnar <mingo@elte.hu>
Status : problem is being debugged
ACPI
Subject : drivers/misc/asus-laptop.c:*: error: 'struct led_classdev' has no member named 'class_dev'
References : http://lkml.org/lkml/2007/7/22/299
Last known good : ?
Submitter : Gabriel C <nix.or.die@googlemail.com>
Caused-By : ?
Handled-By : ?
Status : unknown
Networking
Subject : New wake ups from sky2
References : http://lkml.org/lkml/2007/7/20/386
Last known good : ?
Submitter : Thomas Meyer <thomas@m3y3r.de>
Caused-By : Stephen Hemminger <shemminger@osdl.org>
commit eb35cf60e462491249166182e3e755d3d5d91a28
Handled-By : Stephen Hemminger <shemminger@osdl.org>
Status : unknown
Regards,
Michal
--
LOG
http://www.stardust.webpages.pl/log/
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [1/2] 2.6.23-rc1: known regressions
2007-07-23 9:47 [1/2] 2.6.23-rc1: known regressions Michal Piotrowski
@ 2007-07-23 10:21 ` Al Viro
2007-07-23 11:17 ` Trent Piepho
1 sibling, 0 replies; 7+ messages in thread
From: Al Viro @ 2007-07-23 10:21 UTC (permalink / raw)
To: Michal Piotrowski
Cc: Linus Torvalds, Andrew Morton, LKML, Andi Kleen, Ingo Molnar,
Markus, Andre Noll, acpi4asus-user, Corentin Chary, Karol Kozimor,
Gabriel C, Netdev, Stephen Hemminger, Thomas Meyer
On Mon, Jul 23, 2007 at 11:47:30AM +0200, Michal Piotrowski wrote:
> Subject : drivers/misc/asus-laptop.c:*: error: 'struct led_classdev' has no member named 'class_dev'
> References : http://lkml.org/lkml/2007/7/22/299
> Last known good : ?
> Submitter : Gabriel C <nix.or.die@googlemail.com>
> Caused-By : ?
> Handled-By : ?
> Status : unknown
>From 2a7e1148a9d3ee860dc2650c9a45288b120e250f Mon Sep 17 00:00:00 2001
From: Al Viro <viro@zeniv.linux.org.uk>
Date: Mon, 23 Jul 2007 06:20:22 -0400
Subject: [PATCH] Fix failure exits in asus-laptop
Fallout from f8a7c6fe14f556ca8eeddce258cb21392d0c3a2f. However, looking
at it shows that checks done in ASUS_LED_UNREGISTER() can't trigger
at all (we never get to asus_led_exit() if registration fails) and
if that registration fails, we actually leak stuff. IOW, it's worse
than just replacing class_dev with dev in there - the tests themselves
had been papering over the lousy cleanup logics.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
drivers/misc/asus-laptop.c | 32 +++++++++++++++++++++-----------
1 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/drivers/misc/asus-laptop.c b/drivers/misc/asus-laptop.c
index f753060..6b89854 100644
--- a/drivers/misc/asus-laptop.c
+++ b/drivers/misc/asus-laptop.c
@@ -1067,19 +1067,16 @@ static void asus_backlight_exit(void)
}
#define ASUS_LED_UNREGISTER(object) \
- if(object##_led.class_dev \
- && !IS_ERR(object##_led.class_dev)) \
- led_classdev_unregister(&object##_led)
+ led_classdev_unregister(&object##_led)
static void asus_led_exit(void)
{
+ destroy_workqueue(led_workqueue);
ASUS_LED_UNREGISTER(mled);
ASUS_LED_UNREGISTER(tled);
ASUS_LED_UNREGISTER(pled);
ASUS_LED_UNREGISTER(rled);
ASUS_LED_UNREGISTER(gled);
-
- destroy_workqueue(led_workqueue);
}
static void __exit asus_laptop_exit(void)
@@ -1135,29 +1132,42 @@ static int asus_led_init(struct device *dev)
rv = ASUS_LED_REGISTER(mled, dev);
if (rv)
- return rv;
+ goto out;
rv = ASUS_LED_REGISTER(tled, dev);
if (rv)
- return rv;
+ goto out1;
rv = ASUS_LED_REGISTER(rled, dev);
if (rv)
- return rv;
+ goto out2;
rv = ASUS_LED_REGISTER(pled, dev);
if (rv)
- return rv;
+ goto out3;
rv = ASUS_LED_REGISTER(gled, dev);
if (rv)
- return rv;
+ goto out4;
led_workqueue = create_singlethread_workqueue("led_workqueue");
if (!led_workqueue)
- return -ENOMEM;
+ goto out5;
return 0;
+out5:
+ rv = -ENOMEM;
+ ASUS_LED_UNREGISTER(gled);
+out4:
+ ASUS_LED_UNREGISTER(pled);
+out3:
+ ASUS_LED_UNREGISTER(rled);
+out2:
+ ASUS_LED_UNREGISTER(tled);
+out1:
+ ASUS_LED_UNREGISTER(mled);
+out:
+ return rv;
}
static int __init asus_laptop_init(void)
--
1.5.3.GIT
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [1/2] 2.6.23-rc1: known regressions
2007-07-23 9:47 [1/2] 2.6.23-rc1: known regressions Michal Piotrowski
2007-07-23 10:21 ` Al Viro
@ 2007-07-23 11:17 ` Trent Piepho
2007-07-23 11:25 ` Al Viro
1 sibling, 1 reply; 7+ messages in thread
From: Trent Piepho @ 2007-07-23 11:17 UTC (permalink / raw)
To: Michal Piotrowski
Cc: LKML, acpi4asus-u, Gabriel C, Richard Purdie, Corentin Chary
On Mon, 23 Jul 2007, Michal Piotrowski wrote:
> ACPI
>
> Subject : drivers/misc/asus-laptop.c:*: error: 'struct led_classdev' has no member named 'class_dev'
> References : http://lkml.org/lkml/2007/7/22/299
> Last known good : ?
> Submitter : Gabriel C <nix.or.die@googlemail.com>
> Caused-By : ?
> Handled-By : ?
> Status : unknown
Here's a trivial patch for this one.
------------------------------------------------------------------------
asus-laptop: Sync with changes to led class
Driver was broken by commit f8a7c6fe14f556ca8eeddce258cb21392d0c3a2f
leds: Convert from struct class_device to struct device
Convert the LEDs class from struct class_device to struct device
since class_device is scheduled for removal.
Use (struct led_classdev).dev instead of (struct led_classdev).class_dev
diff -r 3f21143ca44c drivers/misc/asus-laptop.c
--- a/drivers/misc/asus-laptop.c Sun Jul 22 21:30:24 2007 +0000
+++ b/drivers/misc/asus-laptop.c Mon Jul 23 03:47:55 2007 -0700
@@ -1067,8 +1067,8 @@ static void asus_backlight_exit(void)
}
#define ASUS_LED_UNREGISTER(object) \
- if(object##_led.class_dev \
- && !IS_ERR(object##_led.class_dev)) \
+ if(object##_led.dev \
+ && !IS_ERR(object##_led.dev)) \
led_classdev_unregister(&object##_led)
static void asus_led_exit(void)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [1/2] 2.6.23-rc1: known regressions
2007-07-23 11:17 ` Trent Piepho
@ 2007-07-23 11:25 ` Al Viro
2007-07-23 13:12 ` Richard Purdie
0 siblings, 1 reply; 7+ messages in thread
From: Al Viro @ 2007-07-23 11:25 UTC (permalink / raw)
To: Trent Piepho
Cc: Michal Piotrowski, LKML, acpi4asus-u, Gabriel C, Richard Purdie,
Corentin Chary
On Mon, Jul 23, 2007 at 04:17:05AM -0700, Trent Piepho wrote:
> Here's a trivial patch for this one.
> ------------------------------------------------------------------------
> asus-laptop: Sync with changes to led class
>
> Driver was broken by commit f8a7c6fe14f556ca8eeddce258cb21392d0c3a2f
> leds: Convert from struct class_device to struct device
>
> Convert the LEDs class from struct class_device to struct device
> since class_device is scheduled for removal.
>
> Use (struct led_classdev).dev instead of (struct led_classdev).class_dev
It doesn't fix the real bug in there - if you look carefully at the code,
you'll see that we don't get to these checks if allocation fails halfway
through (and we leak in that case) *and* these checks are not needed at
all if failure happens elsewhere.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [1/2] 2.6.23-rc1: known regressions
2007-07-23 11:25 ` Al Viro
@ 2007-07-23 13:12 ` Richard Purdie
2007-07-23 13:36 ` Al Viro
0 siblings, 1 reply; 7+ messages in thread
From: Richard Purdie @ 2007-07-23 13:12 UTC (permalink / raw)
To: Al Viro
Cc: Trent Piepho, Michal Piotrowski, LKML, acpi4asus-u, Gabriel C,
Corentin Chary, Andreas Gruenbacher
On Mon, 2007-07-23 at 12:25 +0100, Al Viro wrote:
> On Mon, Jul 23, 2007 at 04:17:05AM -0700, Trent Piepho wrote:
>
> > Here's a trivial patch for this one.
> > ------------------------------------------------------------------------
> > asus-laptop: Sync with changes to led class
> >
> > Driver was broken by commit f8a7c6fe14f556ca8eeddce258cb21392d0c3a2f
> > leds: Convert from struct class_device to struct device
> >
> > Convert the LEDs class from struct class_device to struct device
> > since class_device is scheduled for removal.
> >
> > Use (struct led_classdev).dev instead of (struct led_classdev).class_dev
>
> It doesn't fix the real bug in there - if you look carefully at the code,
> you'll see that we don't get to these checks if allocation fails halfway
> through (and we leak in that case) *and* these checks are not needed at
> all if failure happens elsewhere.
leds: Allow led_classdev_unregister() to ignore unregistered drivers
Allow led_classdev_unregister() to return for devices that were already
unregistered, never registered or failed to register to simplify
drivers.
Fix error leftover from LED class struct device conversion (after the
above, drivers don't need to look at the device structure).
Fix the leak where asus-led registration fails half way through.
Signed-off-by: Richard Purdie <rpurdie@rpsys.net>
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 4211293..68d26b8 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -95,8 +95,10 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
led_cdev->dev = device_create(leds_class, parent, 0, "%s",
led_cdev->name);
- if (unlikely(IS_ERR(led_cdev->dev)))
- return PTR_ERR(led_cdev->dev);
+ if (unlikely(IS_ERR(led_cdev->dev))) {
+ rc = PTR_ERR(led_cdev->dev);
+ goto create_err;
+ }
dev_set_drvdata(led_cdev->dev, led_cdev);
@@ -132,6 +134,8 @@ err_out_led_list:
#endif
err_out:
device_unregister(led_cdev->dev);
+create_err:
+ led_cdev->dev = NULL;
return rc;
}
EXPORT_SYMBOL_GPL(led_classdev_register);
@@ -144,6 +148,9 @@ EXPORT_SYMBOL_GPL(led_classdev_register);
*/
void led_classdev_unregister(struct led_classdev *led_cdev)
{
+ if (!led_cdev->dev)
+ return;
+
device_remove_file(led_cdev->dev, &dev_attr_brightness);
#ifdef CONFIG_LEDS_TRIGGERS
device_remove_file(led_cdev->dev, &dev_attr_trigger);
diff --git a/drivers/misc/asus-laptop.c b/drivers/misc/asus-laptop.c
index f753060..2bc4f6e 100644
--- a/drivers/misc/asus-laptop.c
+++ b/drivers/misc/asus-laptop.c
@@ -1066,18 +1066,13 @@ static void asus_backlight_exit(void)
backlight_device_unregister(asus_backlight_device);
}
-#define ASUS_LED_UNREGISTER(object) \
- if(object##_led.class_dev \
- && !IS_ERR(object##_led.class_dev)) \
- led_classdev_unregister(&object##_led)
-
static void asus_led_exit(void)
{
- ASUS_LED_UNREGISTER(mled);
- ASUS_LED_UNREGISTER(tled);
- ASUS_LED_UNREGISTER(pled);
- ASUS_LED_UNREGISTER(rled);
- ASUS_LED_UNREGISTER(gled);
+ led_classdev_unregister(&mled_led);
+ led_classdev_unregister(&tled_led);
+ led_classdev_unregister(&pled_led);
+ led_classdev_unregister(&rled_led);
+ led_classdev_unregister(&gled_led);
destroy_workqueue(led_workqueue);
}
@@ -1226,9 +1221,8 @@ static int __init asus_laptop_init(void)
platform_driver_unregister(&asuspf_driver);
fail_platform_driver:
- asus_led_exit();
-
fail_led:
+ asus_led_exit();
asus_backlight_exit();
fail_backlight:
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [1/2] 2.6.23-rc1: known regressions
2007-07-23 13:12 ` Richard Purdie
@ 2007-07-23 13:36 ` Al Viro
2007-07-23 14:32 ` Richard Purdie
0 siblings, 1 reply; 7+ messages in thread
From: Al Viro @ 2007-07-23 13:36 UTC (permalink / raw)
To: Richard Purdie
Cc: Trent Piepho, Michal Piotrowski, LKML, acpi4asus-u, Gabriel C,
Corentin Chary, Andreas Gruenbacher
On Mon, Jul 23, 2007 at 02:12:07PM +0100, Richard Purdie wrote:
> Fix the leak where asus-led registration fails half way through.
Frankly, I don't think that any post-factum checks are needed. We
should just bail out at the point of failure. See the patch posted
earlier... BTW, your variant does destroy_workqueue() when no
create_singlethreaded_workqueue() had been called. FWIW, here's
the patch I'm talking about:
diff --git a/drivers/misc/asus-laptop.c b/drivers/misc/asus-laptop.c
index f753060..6b89854 100644
--- a/drivers/misc/asus-laptop.c
+++ b/drivers/misc/asus-laptop.c
@@ -1067,19 +1067,16 @@ static void asus_backlight_exit(void)
}
#define ASUS_LED_UNREGISTER(object) \
- if(object##_led.class_dev \
- && !IS_ERR(object##_led.class_dev)) \
- led_classdev_unregister(&object##_led)
+ led_classdev_unregister(&object##_led)
static void asus_led_exit(void)
{
+ destroy_workqueue(led_workqueue);
ASUS_LED_UNREGISTER(mled);
ASUS_LED_UNREGISTER(tled);
ASUS_LED_UNREGISTER(pled);
ASUS_LED_UNREGISTER(rled);
ASUS_LED_UNREGISTER(gled);
-
- destroy_workqueue(led_workqueue);
}
static void __exit asus_laptop_exit(void)
@@ -1135,29 +1132,42 @@ static int asus_led_init(struct device *dev)
rv = ASUS_LED_REGISTER(mled, dev);
if (rv)
- return rv;
+ goto out;
rv = ASUS_LED_REGISTER(tled, dev);
if (rv)
- return rv;
+ goto out1;
rv = ASUS_LED_REGISTER(rled, dev);
if (rv)
- return rv;
+ goto out2;
rv = ASUS_LED_REGISTER(pled, dev);
if (rv)
- return rv;
+ goto out3;
rv = ASUS_LED_REGISTER(gled, dev);
if (rv)
- return rv;
+ goto out4;
led_workqueue = create_singlethread_workqueue("led_workqueue");
if (!led_workqueue)
- return -ENOMEM;
+ goto out5;
return 0;
+out5:
+ rv = -ENOMEM;
+ ASUS_LED_UNREGISTER(gled);
+out4:
+ ASUS_LED_UNREGISTER(pled);
+out3:
+ ASUS_LED_UNREGISTER(rled);
+out2:
+ ASUS_LED_UNREGISTER(tled);
+out1:
+ ASUS_LED_UNREGISTER(mled);
+out:
+ return rv;
}
static int __init asus_laptop_init(void)
--
1.5.3.GIT
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [1/2] 2.6.23-rc1: known regressions
2007-07-23 13:36 ` Al Viro
@ 2007-07-23 14:32 ` Richard Purdie
0 siblings, 0 replies; 7+ messages in thread
From: Richard Purdie @ 2007-07-23 14:32 UTC (permalink / raw)
To: Al Viro
Cc: Trent Piepho, Michal Piotrowski, LKML, acpi4asus-u, Gabriel C,
Corentin Chary, Andreas Gruenbacher
On Mon, 2007-07-23 at 14:36 +0100, Al Viro wrote:
> On Mon, Jul 23, 2007 at 02:12:07PM +0100, Richard Purdie wrote:
> > Fix the leak where asus-led registration fails half way through.
>
> Frankly, I don't think that any post-factum checks are needed. We
> should just bail out at the point of failure. See the patch posted
> earlier... BTW, your variant does destroy_workqueue() when no
> create_singlethreaded_workqueue() had been called. FWIW, here's
> the patch I'm talking about:
I saw that after I'd posted mine. I don't mind which we use...
I'm pleased the IS_ERR(object##_led.class_dev) is gone as that makes
nasty assumptions about what the LED class does internally...
Cheers,
Richard
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2007-07-23 14:32 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-23 9:47 [1/2] 2.6.23-rc1: known regressions Michal Piotrowski
2007-07-23 10:21 ` Al Viro
2007-07-23 11:17 ` Trent Piepho
2007-07-23 11:25 ` Al Viro
2007-07-23 13:12 ` Richard Purdie
2007-07-23 13:36 ` Al Viro
2007-07-23 14:32 ` Richard Purdie
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox