Commit b41e9c7b authored by Pierre Ossman's avatar Pierre Ossman

mmc_block: use proper sg iterators

Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
parent a84756c5
...@@ -213,7 +213,8 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) ...@@ -213,7 +213,8 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
struct mmc_blk_data *md = mq->data; struct mmc_blk_data *md = mq->data;
struct mmc_card *card = md->queue.card; struct mmc_card *card = md->queue.card;
struct mmc_blk_request brq; struct mmc_blk_request brq;
int ret = 1, sg_pos, data_size; int ret = 1, data_size, i;
struct scatterlist *sg;
mmc_claim_host(card->host); mmc_claim_host(card->host);
...@@ -267,18 +268,22 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) ...@@ -267,18 +268,22 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
mmc_queue_bounce_pre(mq); mmc_queue_bounce_pre(mq);
/*
* Adjust the sg list so it is the same size as the
* request.
*/
if (brq.data.blocks != if (brq.data.blocks !=
(req->nr_sectors >> (md->block_bits - 9))) { (req->nr_sectors >> (md->block_bits - 9))) {
data_size = brq.data.blocks * brq.data.blksz; data_size = brq.data.blocks * brq.data.blksz;
for (sg_pos = 0; sg_pos < brq.data.sg_len; sg_pos++) { for_each_sg(brq.data.sg, sg, brq.data.sg_len, i) {
data_size -= mq->sg[sg_pos].length; data_size -= sg->length;
if (data_size <= 0) { if (data_size <= 0) {
mq->sg[sg_pos].length += data_size; sg->length += data_size;
sg_pos++; i++;
break; break;
} }
} }
brq.data.sg_len = sg_pos; brq.data.sg_len = i;
} }
mmc_wait_for_req(card->host, &brq.mrq); mmc_wait_for_req(card->host, &brq.mrq);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment