libertas: correct card cleanup order in SPI driver
[safe/jmp/linux-2.6] / drivers / net / wireless / libertas / if_spi.c
index b213de4..963c201 100644 (file)
@@ -737,7 +737,7 @@ static int if_spi_c2h_data(struct if_spi_card *card)
                goto out;
        } else if (len > MRVDRV_ETH_RX_PACKET_BUFFER_SIZE) {
                lbs_pr_err("%s: error: card has %d bytes of data, but "
-                          "our maximum skb size is %lu\n",
+                          "our maximum skb size is %zu\n",
                           __func__, len, MRVDRV_ETH_RX_PACKET_BUFFER_SIZE);
                err = -EINVAL;
                goto out;
@@ -1170,12 +1170,13 @@ static int __devexit libertas_spi_remove(struct spi_device *spi)
 
        lbs_deb_spi("libertas_spi_remove\n");
        lbs_deb_enter(LBS_DEB_SPI);
-       priv->surpriseremoved = 1;
 
        lbs_stop_card(priv);
+       lbs_remove_card(priv); /* will call free_netdev */
+
+       priv->surpriseremoved = 1;
        free_irq(spi->irq, card);
        if_spi_terminate_spi_thread(card);
-       lbs_remove_card(priv); /* will call free_netdev */
        if (card->pdata->teardown)
                card->pdata->teardown(spi);
        free_if_spi_card(card);