mmc_block: use proper sg iterators
Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
This commit is contained in:
@@ -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)
|
|||||||
|
|
||||||
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);
|
||||||
|
Reference in New Issue
Block a user