Commit b7479feb authored by Petr Vandrovec's avatar Petr Vandrovec Committed by Stefan Richter

firewire: core: Remove card from list of cards when enable fails

Signed-off-by: default avatarPetr Vandrovec <petr@vandrovec.name>

After a controller initialization failure, addition of another card got
stuck due to card_list corruption.
Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
parent 1448d7c6
...@@ -412,6 +412,7 @@ fw_card_add(struct fw_card *card, ...@@ -412,6 +412,7 @@ fw_card_add(struct fw_card *card,
{ {
u32 *config_rom; u32 *config_rom;
size_t length; size_t length;
int err;
card->max_receive = max_receive; card->max_receive = max_receive;
card->link_speed = link_speed; card->link_speed = link_speed;
...@@ -422,7 +423,13 @@ fw_card_add(struct fw_card *card, ...@@ -422,7 +423,13 @@ fw_card_add(struct fw_card *card,
list_add_tail(&card->link, &card_list); list_add_tail(&card->link, &card_list);
mutex_unlock(&card_mutex); mutex_unlock(&card_mutex);
return card->driver->enable(card, config_rom, length); err = card->driver->enable(card, config_rom, length);
if (err < 0) {
mutex_lock(&card_mutex);
list_del(&card->link);
mutex_unlock(&card_mutex);
}
return err;
} }
EXPORT_SYMBOL(fw_card_add); EXPORT_SYMBOL(fw_card_add);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment