mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-14 01:49:20 -04:00
staging: ks7010: fix error paths in ks7010_sdio_remove function
This commit reviews and fixes error paths in ks7010_sdio_remove driver function. It change logic to handle error directly after priv dereference to avoid one level indentation. It also removes a temporal netdev variable which wasn't being used in all of the function calls. Also if send_stop_request call fails it was making a direct 'return' instead of doing a properly cleaning. Because of this a new 'err_free_card' label has been added. Signed-off-by: Sergio Paracuellos <sergio.paracuellos@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
31d7b1b142
commit
0cc053ddd4
@@ -1112,39 +1112,39 @@ static void ks7010_sdio_remove(struct sdio_func *func)
|
||||
return;
|
||||
|
||||
priv = card->priv;
|
||||
if (priv) {
|
||||
struct net_device *netdev = priv->net_dev;
|
||||
if (!priv)
|
||||
goto err_free_card;
|
||||
|
||||
ks_wlan_net_stop(netdev);
|
||||
ks_wlan_net_stop(priv->net_dev);
|
||||
|
||||
/* interrupt disable */
|
||||
sdio_claim_host(func);
|
||||
sdio_writeb(func, 0, INT_ENABLE_REG, &ret);
|
||||
sdio_writeb(func, 0xff, INT_PENDING_REG, &ret);
|
||||
sdio_release_host(func);
|
||||
/* interrupt disable */
|
||||
sdio_claim_host(func);
|
||||
sdio_writeb(func, 0, INT_ENABLE_REG, &ret);
|
||||
sdio_writeb(func, 0xff, INT_PENDING_REG, &ret);
|
||||
sdio_release_host(func);
|
||||
|
||||
ret = send_stop_request(func);
|
||||
if (ret) /* memory allocation failure */
|
||||
return;
|
||||
ret = send_stop_request(func);
|
||||
if (ret) /* memory allocation failure */
|
||||
goto err_free_card;
|
||||
|
||||
if (priv->wq) {
|
||||
flush_workqueue(priv->wq);
|
||||
destroy_workqueue(priv->wq);
|
||||
}
|
||||
|
||||
hostif_exit(priv);
|
||||
|
||||
unregister_netdev(netdev);
|
||||
|
||||
trx_device_exit(priv);
|
||||
free_netdev(priv->net_dev);
|
||||
card->priv = NULL;
|
||||
if (priv->wq) {
|
||||
flush_workqueue(priv->wq);
|
||||
destroy_workqueue(priv->wq);
|
||||
}
|
||||
|
||||
hostif_exit(priv);
|
||||
|
||||
unregister_netdev(priv->net_dev);
|
||||
|
||||
trx_device_exit(priv);
|
||||
free_netdev(priv->net_dev);
|
||||
card->priv = NULL;
|
||||
|
||||
sdio_claim_host(func);
|
||||
sdio_release_irq(func);
|
||||
sdio_disable_func(func);
|
||||
sdio_release_host(func);
|
||||
err_free_card:
|
||||
sdio_set_drvdata(func, NULL);
|
||||
kfree(card);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user