diff options
Diffstat (limited to 'include/linux/libata.h')
-rw-r--r-- | include/linux/libata.h | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h index 229a9ff9f924..377e6d4d9be3 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -29,7 +29,7 @@ | |||
29 | #include <linux/delay.h> | 29 | #include <linux/delay.h> |
30 | #include <linux/interrupt.h> | 30 | #include <linux/interrupt.h> |
31 | #include <linux/dma-mapping.h> | 31 | #include <linux/dma-mapping.h> |
32 | #include <asm/scatterlist.h> | 32 | #include <linux/scatterlist.h> |
33 | #include <linux/io.h> | 33 | #include <linux/io.h> |
34 | #include <linux/ata.h> | 34 | #include <linux/ata.h> |
35 | #include <linux/workqueue.h> | 35 | #include <linux/workqueue.h> |
@@ -416,6 +416,7 @@ struct ata_queued_cmd { | |||
416 | unsigned long flags; /* ATA_QCFLAG_xxx */ | 416 | unsigned long flags; /* ATA_QCFLAG_xxx */ |
417 | unsigned int tag; | 417 | unsigned int tag; |
418 | unsigned int n_elem; | 418 | unsigned int n_elem; |
419 | unsigned int n_iter; | ||
419 | unsigned int orig_n_elem; | 420 | unsigned int orig_n_elem; |
420 | 421 | ||
421 | int dma_dir; | 422 | int dma_dir; |
@@ -426,7 +427,7 @@ struct ata_queued_cmd { | |||
426 | unsigned int nbytes; | 427 | unsigned int nbytes; |
427 | unsigned int curbytes; | 428 | unsigned int curbytes; |
428 | 429 | ||
429 | unsigned int cursg; | 430 | struct scatterlist *cursg; |
430 | unsigned int cursg_ofs; | 431 | unsigned int cursg_ofs; |
431 | 432 | ||
432 | struct scatterlist sgent; | 433 | struct scatterlist sgent; |
@@ -1043,7 +1044,7 @@ ata_sg_is_last(struct scatterlist *sg, struct ata_queued_cmd *qc) | |||
1043 | return 1; | 1044 | return 1; |
1044 | if (qc->pad_len) | 1045 | if (qc->pad_len) |
1045 | return 0; | 1046 | return 0; |
1046 | if (((sg - qc->__sg) + 1) == qc->n_elem) | 1047 | if (qc->n_iter == qc->n_elem) |
1047 | return 1; | 1048 | return 1; |
1048 | return 0; | 1049 | return 0; |
1049 | } | 1050 | } |
@@ -1051,6 +1052,7 @@ ata_sg_is_last(struct scatterlist *sg, struct ata_queued_cmd *qc) | |||
1051 | static inline struct scatterlist * | 1052 | static inline struct scatterlist * |
1052 | ata_qc_first_sg(struct ata_queued_cmd *qc) | 1053 | ata_qc_first_sg(struct ata_queued_cmd *qc) |
1053 | { | 1054 | { |
1055 | qc->n_iter = 0; | ||
1054 | if (qc->n_elem) | 1056 | if (qc->n_elem) |
1055 | return qc->__sg; | 1057 | return qc->__sg; |
1056 | if (qc->pad_len) | 1058 | if (qc->pad_len) |
@@ -1063,8 +1065,8 @@ ata_qc_next_sg(struct scatterlist *sg, struct ata_queued_cmd *qc) | |||
1063 | { | 1065 | { |
1064 | if (sg == &qc->pad_sgent) | 1066 | if (sg == &qc->pad_sgent) |
1065 | return NULL; | 1067 | return NULL; |
1066 | if (++sg - qc->__sg < qc->n_elem) | 1068 | if (++qc->n_iter < qc->n_elem) |
1067 | return sg; | 1069 | return sg_next(sg); |
1068 | if (qc->pad_len) | 1070 | if (qc->pad_len) |
1069 | return &qc->pad_sgent; | 1071 | return &qc->pad_sgent; |
1070 | return NULL; | 1072 | return NULL; |
@@ -1309,9 +1311,11 @@ static inline void ata_qc_reinit(struct ata_queued_cmd *qc) | |||
1309 | qc->dma_dir = DMA_NONE; | 1311 | qc->dma_dir = DMA_NONE; |
1310 | qc->__sg = NULL; | 1312 | qc->__sg = NULL; |
1311 | qc->flags = 0; | 1313 | qc->flags = 0; |
1312 | qc->cursg = qc->cursg_ofs = 0; | 1314 | qc->cursg = NULL; |
1315 | qc->cursg_ofs = 0; | ||
1313 | qc->nbytes = qc->curbytes = 0; | 1316 | qc->nbytes = qc->curbytes = 0; |
1314 | qc->n_elem = 0; | 1317 | qc->n_elem = 0; |
1318 | qc->n_iter = 0; | ||
1315 | qc->err_mask = 0; | 1319 | qc->err_mask = 0; |
1316 | qc->pad_len = 0; | 1320 | qc->pad_len = 0; |
1317 | qc->sect_size = ATA_SECT_SIZE; | 1321 | qc->sect_size = ATA_SECT_SIZE; |