All of lore.kernel.org
 help / color / mirror / Atom feed
From: Len Brown <len.brown@intel.com>
To: linux-acpi@vger.kernel.org
Cc: Al Viro <viro@ftp.linux.org.uk>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Len Brown <len.brown@intel.com>
Subject: [PATCH 07/16] ACPI: asus-laptop: Fix failure exits
Date: Wed, 25 Jul 2007 01:51:16 -0400	[thread overview]
Message-ID: <11853426932522-git-send-email-len.brown@intel.com> (raw)
Message-ID: <3b0d71170d37878bbb1203ebc3f92e36d6151a80.1185342489.git.len.brown@intel.com> (raw)
In-Reply-To: <11853426852588-git-send-email-len.brown@intel.com>
In-Reply-To: <e9b3aba887f47f9cd64de20fec9c333a932b70dc.1185342489.git.len.brown@intel.com>

From: Al Viro <viro@ftp.linux.org.uk>

> 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
> Submitter       : Gabriel C <nix.or.die@googlemail.com>

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>
Signed-off-by: Len Brown <len.brown@intel.com>
---
 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.rc2.22.g69a9b

  parent reply	other threads:[~2007-07-25  5:51 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-25  5:51 ACPI patches for 2.6.23-rc1 Len Brown
2007-07-25  5:51 ` [PATCH 01/16] ACPI: Implement the set_target() callback from pm_ops Len Brown
2007-07-25  5:51   ` Len Brown
2007-07-25  5:51   ` [PATCH 02/16] ACPI: Add acpi_pm_device_sleep_state helper routine Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  5:51   ` [PATCH 03/16] ACPI, PNP: hook ACPI D-state to PNP suspend/resume Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  5:51   ` [PATCH 04/16] ACPI: Use ACPI methods to select PCI device suspend state Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  5:51   ` [PATCH 05/16] ACPI: ignore _PSx method for hotplugable PCI devices Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  5:51   ` [PATCH 06/16] ACPI: fix oops due to typo in new throttling code Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  5:51   ` Len Brown [this message]
2007-07-25  5:51     ` [PATCH 07/16] ACPI: asus-laptop: Fix failure exits Len Brown
2007-07-25  5:51   ` [PATCH 08/16] ACPI: autoload modules - ACPICA modifications Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  5:51   ` [PATCH 09/16] ACPI: autoload modules - Create ACPI alias interface Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  5:51   ` [PATCH 10/16] ACPI: autoload modules - Create __mod_acpi_device_table symbol for all ACPI drivers Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  5:51   ` [PATCH 11/16] ACPI: Kconfig: CONFIG_ACPI_PROCFS now defaults to N Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  5:51   ` [PATCH 12/16] ACPI: Kconfig: fold /proc/acpi/sleep under CONFIG_ACPI_PROCFS Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  5:51   ` [PATCH 13/16] ACPI: Kconfig: always enable CONFIG_ACPI_SLEEP on X86 Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  5:51   ` [PATCH 14/16] ACPI: Remove references to ACPI_STATE_S2 from acpi_pm_enter Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  5:51   ` [PATCH 15/16] ACPI: quiet ACPI Exceptions due to no _PTC or _TSS Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  5:51   ` [PATCH 16/16] ACPI: Kconfig: remove CONFIG_ACPI_SLEEP from source Len Brown
2007-07-25  5:51     ` Len Brown
2007-07-25  9:49 ` ACPI patches for 2.6.23-rc1 Richard Hughes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=11853426932522-git-send-email-len.brown@intel.com \
    --to=len.brown@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=viro@ftp.linux.org.uk \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.