Use the scatterlist iterators and remove direct indexing of the
scatterlist array.

This way allows us to pre-allocate one small scatterlist, which can be
chained with one runtime allocated scatterlist if the pre-allocated one
isn't enough for the whole request.

Signed-off-by: Ming Lei <ming....@redhat.com>
---
 drivers/scsi/pmcraid.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
index e338d7a4f571..922c6e4b7eb3 100644
--- a/drivers/scsi/pmcraid.c
+++ b/drivers/scsi/pmcraid.c
@@ -3270,7 +3270,7 @@ static int pmcraid_copy_sglist(
        int direction
 )
 {
-       struct scatterlist *scatterlist;
+       struct scatterlist *sg;
        void *kaddr;
        int bsize_elem;
        int i;
@@ -3281,8 +3281,8 @@ static int pmcraid_copy_sglist(
 
        scatterlist = sglist->scatterlist;
 
-       for (i = 0; i < (len / bsize_elem); i++, buffer += bsize_elem) {
-               struct page *page = sg_page(&scatterlist[i]);
+       for (i = 0; i < (len / bsize_elem); i++, sg = sg_next(sg), buffer += 
bsize_elem) {
+               struct page *page = sg_page(sg);
 
                kaddr = kmap(page);
                if (direction == DMA_TO_DEVICE)
@@ -3297,11 +3297,11 @@ static int pmcraid_copy_sglist(
                        return -EFAULT;
                }
 
-               scatterlist[i].length = bsize_elem;
+               sg->length = bsize_elem;
        }
 
        if (len % bsize_elem) {
-               struct page *page = sg_page(&scatterlist[i]);
+               struct page *page = sg_page(sg);
 
                kaddr = kmap(page);
 
@@ -3312,7 +3312,7 @@ static int pmcraid_copy_sglist(
 
                kunmap(page);
 
-               scatterlist[i].length = len % bsize_elem;
+               sg->length = len % bsize_elem;
        }
 
        if (rc) {
-- 
2.20.1

Reply via email to