mmc: enforce correct sg list
authorPierre Ossman <drzeus@drzeus.cx>
Fri, 13 Apr 2007 20:47:01 +0000 (22:47 +0200)
committerPierre Ossman <drzeus@drzeus.cx>
Tue, 1 May 2007 11:04:12 +0000 (13:04 +0200)
Now that we've fixed our only offender when it comes to strange sg
list, add a check so that future users keep the sg list proper with
regard to transfer size.

Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
drivers/mmc/mmc.c

index 4a73e8b..e8f896c 100644 (file)
@@ -99,6 +99,10 @@ EXPORT_SYMBOL(mmc_request_done);
 void
 mmc_start_request(struct mmc_host *host, struct mmc_request *mrq)
 {
+#ifdef CONFIG_MMC_DEBUG
+       unsigned int i, sz;
+#endif
+
        pr_debug("%s: starting CMD%u arg %08x flags %08x\n",
                 mmc_hostname(host), mrq->cmd->opcode,
                 mrq->cmd->arg, mrq->cmd->flags);
@@ -113,6 +117,13 @@ mmc_start_request(struct mmc_host *host, struct mmc_request *mrq)
                BUG_ON(mrq->data->blocks * mrq->data->blksz >
                        host->max_req_size);
 
+#ifdef CONFIG_MMC_DEBUG
+               sz = 0;
+               for (i = 0;i < mrq->data->sg_len;i++)
+                       sz += mrq->data->sg[i].length;
+               BUG_ON(sz != mrq->data->blocks * mrq->data->blksz);
+#endif
+
                mrq->cmd->data = mrq->data;
                mrq->data->error = 0;
                mrq->data->mrq = mrq;