mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-09-18 23:09:29 +02:00
PNP: Fix card device cleanup on registration failure
pnp_add_card() ignores __pnp_add_device() failures. If device_register() fails there, the device is removed from the global and protocol lists, but remains on the card list and its device reference is not dropped. Remove the failed device from the card list and call put_device() before continuing with the remaining card devices. Signed-off-by: Yuho Choi <dbgh9129@gmail.com> Link: https://patch.msgid.link/20260703033603.114931-1-dbgh9129@gmail.com Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
committed by
Rafael J. Wysocki
parent
07bfd4abdc
commit
fcdae14b64
+9
-2
@@ -254,9 +254,16 @@ int pnp_add_card(struct pnp_card *card)
|
||||
/* we wait until now to add devices in order to ensure the drivers
|
||||
* will be able to use all of the related devices on the card
|
||||
* without waiting an unreasonable length of time */
|
||||
list_for_each(pos, &card->devices) {
|
||||
list_for_each_safe(pos, temp, &card->devices) {
|
||||
struct pnp_dev *dev = card_to_pnp_dev(pos);
|
||||
__pnp_add_device(dev);
|
||||
error = __pnp_add_device(dev);
|
||||
if (error) {
|
||||
mutex_lock(&pnp_lock);
|
||||
list_del(&dev->card_list);
|
||||
dev->card = NULL;
|
||||
mutex_unlock(&pnp_lock);
|
||||
put_device(&dev->dev);
|
||||
}
|
||||
}
|
||||
|
||||
/* match with card drivers */
|
||||
|
||||
Reference in New Issue
Block a user