From: George Hilliard Date: Tue, 19 Mar 2019 02:20:12 +0000 (-0600) Subject: staging: mt7621-mmc: Only unmap_sg if mapped X-Git-Tag: v5.2-rc1~153^2~335 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=b8585eb51e74034a7c1dd534a667400b8fd58787;p=linux.git staging: mt7621-mmc: Only unmap_sg if mapped A failure while processing the start command could cause dma_unmap_sg() to be called without first calling dma_map_sg(). Since calling dma_unmap_sg() is only needed when data != NULL, move the unmap call into the corresponding if {} block. Signed-off-by: George Hilliard Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/mt7621-mmc/sd.c b/drivers/staging/mt7621-mmc/sd.c index a53006674178..40f23e200c7a 100644 --- a/drivers/staging/mt7621-mmc/sd.c +++ b/drivers/staging/mt7621-mmc/sd.c @@ -686,7 +686,7 @@ static int msdc_do_request(struct mmc_host *mmc, struct mmc_request *mrq) /* then wait command done */ if (msdc_command_resp(host, cmd, 1, CMD_TIMEOUT) != 0) - goto done; + goto unmap; /* for read, the data coming too fast, then CRC error * start DMA no business with CRC. @@ -724,18 +724,17 @@ static int msdc_do_request(struct mmc_host *mmc, struct mmc_request *mrq) /* Last: stop transfer */ if (data->stop) { if (msdc_do_command(host, data->stop, 0, CMD_TIMEOUT) != 0) - goto done; + goto unmap; } - } -done: - if (data) { +unmap: host->data = NULL; dma_unmap_sg(mmc_dev(mmc), data->sg, data->sg_len, mmc_get_dma_dir(data)); host->blksz = 0; } +done: if (mrq->cmd->error) host->error = 0x001; if (mrq->data && mrq->data->error)