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.

Reviewed-by: Christoph Hellwig <h...@lst.de>
Reviewed-by: Bart Van Assche <bvanass...@acm.org>
Signed-off-by: Ming Lei <ming....@redhat.com>
---
 drivers/scsi/pmcraid.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
index e338d7a4f571..286cac59cb5f 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;
@@ -3279,10 +3279,10 @@ static int pmcraid_copy_sglist(
        /* Determine the actual number of bytes per element */
        bsize_elem = PAGE_SIZE * (1 << sglist->order);
 
-       scatterlist = sglist->scatterlist;
+       sg = 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

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to