|
@@ -1649,9 +1649,8 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
|
|
|
!IS_ALIGNED(blk_rq_sectors(rqc), 8)) {
|
|
|
pr_err("%s: Transfer size is not 4KB sector size aligned\n",
|
|
|
rqc->rq_disk->disk_name);
|
|
|
- req = rqc;
|
|
|
- rqc = NULL;
|
|
|
- goto cmd_abort;
|
|
|
+ mmc_blk_rw_cmd_abort(card, rqc);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
mmc_blk_rw_rq_prep(mq->mqrq_cur, card, 0, mq);
|
|
@@ -1660,11 +1659,20 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
|
|
|
areq = NULL;
|
|
|
areq = mmc_start_req(card->host, areq, &status);
|
|
|
if (!areq) {
|
|
|
+ /*
|
|
|
+ * We have just put the first request into the pipeline
|
|
|
+ * and there is nothing more to do until it is
|
|
|
+ * complete.
|
|
|
+ */
|
|
|
if (status == MMC_BLK_NEW_REQUEST)
|
|
|
mq->flags |= MMC_QUEUE_NEW_REQUEST;
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * An asynchronous request has been completed and we proceed
|
|
|
+ * to handle the result of it.
|
|
|
+ */
|
|
|
mq_rq = container_of(areq, struct mmc_queue_req, mmc_active);
|
|
|
brq = &mq_rq->brq;
|
|
|
req = mq_rq->req;
|
|
@@ -1691,8 +1699,8 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
|
|
|
pr_err("%s BUG rq_tot %d d_xfer %d\n",
|
|
|
__func__, blk_rq_bytes(req),
|
|
|
brq->data.bytes_xfered);
|
|
|
- rqc = NULL;
|
|
|
- goto cmd_abort;
|
|
|
+ mmc_blk_rw_cmd_abort(card, req);
|
|
|
+ return 0;
|
|
|
}
|
|
|
break;
|
|
|
case MMC_BLK_CMD_ERR:
|