{
        struct bcm2835_host *host =
                container_of(work, struct bcm2835_host, dma_work);
-       struct mmc_data *data = host->data;
+       struct mmc_data *data;
 
        mutex_lock(&host->mutex);
 
+       data = host->data;
+
        if (host->dma_chan) {
                dma_unmap_sg(host->dma_chan->device->dev,
                             data->sg, data->sg_len,
                return;
        }
 
-       if (host->use_dma && mrq->data && (mrq->data->blocks > PIO_THRESHOLD))
-               bcm2835_prepare_dma(host, mrq->data);
-
        mutex_lock(&host->mutex);
 
        WARN_ON(host->mrq);
                return;
        }
 
+       if (host->use_dma && mrq->data && (mrq->data->blocks > PIO_THRESHOLD))
+               bcm2835_prepare_dma(host, mrq->data);
+
        host->use_sbc = !!mrq->sbc && host->mrq->data &&
                        (host->mrq->data->flags & MMC_DATA_READ);
        if (host->use_sbc) {