summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/pmcraid.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-07-11 18:17:41 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-07-11 18:17:41 -0400
commit1f7563f743d7081710a9d186a8b203997d09f383 (patch)
tree55091227fb177f25c45f33dfb5f0b2a5e22ccfa7 /drivers/scsi/pmcraid.c
parentba6d10ab8014ac10d25ca513352b6665e73b5785 (diff)
parent3e99b3b13a1fc8f7354edaee4c04f73a07faba69 (diff)
Merge tag 'scsi-sg' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI scatter-gather list updates from James Bottomley: "This topic branch covers a fundamental change in how our sg lists are allocated to make mq more efficient by reducing the size of the preallocated sg list. This necessitates a large number of driver changes because the previous guarantee that if a driver specified SG_ALL as the size of its scatter list, it would get a non-chained list and didn't need to bother with scatterlist iterators is now broken and every driver *must* use scatterlist iterators. This was broken out as a separate topic because we need to convert all the drivers before pulling the trigger and unconverted drivers kept being found, necessitating a rebase" * tag 'scsi-sg' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (21 commits) scsi: core: don't preallocate small SGL in case of NO_SG_CHAIN scsi: lib/sg_pool.c: clear 'first_chunk' in case of no preallocation scsi: core: avoid preallocating big SGL for data scsi: core: avoid preallocating big SGL for protection information scsi: lib/sg_pool.c: improve APIs for allocating sg pool scsi: esp: use sg helper to iterate over scatterlist scsi: NCR5380: use sg helper to iterate over scatterlist scsi: wd33c93: use sg helper to iterate over scatterlist scsi: ppa: use sg helper to iterate over scatterlist scsi: pcmcia: nsp_cs: use sg helper to iterate over scatterlist scsi: imm: use sg helper to iterate over scatterlist scsi: aha152x: use sg helper to iterate over scatterlist scsi: s390: zfcp_fc: use sg helper to iterate over scatterlist scsi: staging: unisys: visorhba: use sg helper to iterate over scatterlist scsi: usb: image: microtek: use sg helper to iterate over scatterlist scsi: pmcraid: use sg helper to iterate over scatterlist scsi: ipr: use sg helper to iterate over scatterlist scsi: mvumi: use sg helper to iterate over scatterlist scsi: lpfc: use sg helper to iterate over scatterlist scsi: advansys: use sg helper to iterate over scatterlist ...
Diffstat (limited to 'drivers/scsi/pmcraid.c')
-rw-r--r--drivers/scsi/pmcraid.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
index ca22526aff7f..71ff3936da4f 100644
--- a/drivers/scsi/pmcraid.c
+++ b/drivers/scsi/pmcraid.c
@@ -3255,7 +3255,7 @@ static int pmcraid_copy_sglist(
3255 int direction 3255 int direction
3256) 3256)
3257{ 3257{
3258 struct scatterlist *scatterlist; 3258 struct scatterlist *sg;
3259 void *kaddr; 3259 void *kaddr;
3260 int bsize_elem; 3260 int bsize_elem;
3261 int i; 3261 int i;
@@ -3264,10 +3264,10 @@ static int pmcraid_copy_sglist(
3264 /* Determine the actual number of bytes per element */ 3264 /* Determine the actual number of bytes per element */
3265 bsize_elem = PAGE_SIZE * (1 << sglist->order); 3265 bsize_elem = PAGE_SIZE * (1 << sglist->order);
3266 3266
3267 scatterlist = sglist->scatterlist; 3267 sg = sglist->scatterlist;
3268 3268
3269 for (i = 0; i < (len / bsize_elem); i++, buffer += bsize_elem) { 3269 for (i = 0; i < (len / bsize_elem); i++, sg = sg_next(sg), buffer += bsize_elem) {
3270 struct page *page = sg_page(&scatterlist[i]); 3270 struct page *page = sg_page(sg);
3271 3271
3272 kaddr = kmap(page); 3272 kaddr = kmap(page);
3273 if (direction == DMA_TO_DEVICE) 3273 if (direction == DMA_TO_DEVICE)
@@ -3282,11 +3282,11 @@ static int pmcraid_copy_sglist(
3282 return -EFAULT; 3282 return -EFAULT;
3283 } 3283 }
3284 3284
3285 scatterlist[i].length = bsize_elem; 3285 sg->length = bsize_elem;
3286 } 3286 }
3287 3287
3288 if (len % bsize_elem) { 3288 if (len % bsize_elem) {
3289 struct page *page = sg_page(&scatterlist[i]); 3289 struct page *page = sg_page(sg);
3290 3290
3291 kaddr = kmap(page); 3291 kaddr = kmap(page);
3292 3292
@@ -3297,7 +3297,7 @@ static int pmcraid_copy_sglist(
3297 3297
3298 kunmap(page); 3298 kunmap(page);
3299 3299
3300 scatterlist[i].length = len % bsize_elem; 3300 sg->length = len % bsize_elem;
3301 } 3301 }
3302 3302
3303 if (rc) { 3303 if (rc) {