mtip32xxx: use for_each_sg
authorChristoph Hellwig <hch@lst.de>
Fri, 9 Nov 2018 13:49:02 +0000 (14:49 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 9 Nov 2018 15:39:21 +0000 (08:39 -0700)
Use the proper helper instead of manually iterating the scatterlist,
which is broken in the presence of chained S/G lists.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/mtip32xx/mtip32xx.c

index e99db2c9118f12f41bd33e079ff7a9eb40698d50..a4c44db097e03e1e21edc2d80b059cb0266ce077 100644 (file)
@@ -1549,11 +1549,11 @@ static inline void fill_command_sg(struct driver_data *dd,
        int n;
        unsigned int dma_len;
        struct mtip_cmd_sg *command_sg;
-       struct scatterlist *sg = command->sg;
+       struct scatterlist *sg;
 
        command_sg = command->command + AHCI_CMD_TBL_HDR_SZ;
 
-       for (n = 0; n < nents; n++) {
+       for_each_sg(command->sg, sg, nents, n) {
                dma_len = sg_dma_len(sg);
                if (dma_len > 0x400000)
                        dev_err(&dd->pdev->dev,
@@ -1563,7 +1563,6 @@ static inline void fill_command_sg(struct driver_data *dd,
                command_sg->dba_upper =
                        cpu_to_le32((sg_dma_address(sg) >> 16) >> 16);
                command_sg++;
-               sg++;
        }
 }