* Turn the cache ON/OFF.
  * Turning the cache OFF shall trigger flushing of the data
  * to the non-volatile storage.
+ * This function should be called with host claimed
  */
 int mmc_cache_ctrl(struct mmc_host *host, u8 enable)
 {
                        mmc_card_is_removable(host))
                return err;
 
-       mmc_claim_host(host);
        if (card && mmc_card_mmc(card) &&
                        (card->ext_csd.cache_size > 0)) {
                enable = !!enable;
                                card->ext_csd.cache_ctrl = enable;
                }
        }
-       mmc_release_host(host);
 
        return err;
 }
        cancel_delayed_work(&host->detect);
        mmc_flush_scheduled_work();
 
-       err = mmc_cache_ctrl(host, 0);
-       if (err)
-               goto out;
-
        mmc_bus_get(host);
        if (host->bus_ops && !host->bus_dead) {
                if (host->bus_ops->suspend) {
 
        BUG_ON(!host->card);
 
        mmc_claim_host(host);
+
+       err = mmc_cache_ctrl(host, 0);
+       if (err)
+               goto out;
+
        if (mmc_can_poweroff_notify(host->card))
                err = mmc_poweroff_notify(host->card, EXT_CSD_POWER_OFF_SHORT);
        else if (mmc_card_can_sleep(host))
        else if (!mmc_host_is_spi(host))
                err = mmc_deselect_cards(host);
        host->card->state &= ~(MMC_STATE_HIGHSPEED | MMC_STATE_HIGHSPEED_200);
-       mmc_release_host(host);
 
+out:
+       mmc_release_host(host);
        return err;
 }