From 56db4ca57bdbe78bab64f5a6cf56e4fa8e72bf55 Mon Sep 17 00:00:00 2001 From: Geert Uytterhoeven Date: Mon, 25 Feb 2008 14:24:31 +0100 Subject: [PATCH] --- yaml --- r: 89663 b: refs/heads/master c: f7441a791aeaeac2e1f1f71b485d1372016f9285 h: refs/heads/master i: 89661: e91518e99b0300ee3c5bb72a9120125f5e619765 89659: d872d31e6548e0d70135fe9470733c609411ed96 89655: 66d187f9cb758c87a70e7d03eda8af2b3b190699 89647: 0aa792cc626d0120c260a85a4d7e5b38d3f24486 89631: e5201c07cbb32e3a3d828c57cd1574486e0d6817 89599: 9e65dc4071bf640e30c271032b963382b0b73f02 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/ps3rom.c | 30 ++++++++++++++---------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/[refs] b/[refs] index 24e999ffd191..f00da072c082 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d1e4c9c57c2ed4722795443db22a5d813cd4f0e5 +refs/heads/master: f7441a791aeaeac2e1f1f71b485d1372016f9285 diff --git a/trunk/drivers/scsi/ps3rom.c b/trunk/drivers/scsi/ps3rom.c index fad6cb5cba28..0eed5ca1e032 100644 --- a/trunk/drivers/scsi/ps3rom.c +++ b/trunk/drivers/scsi/ps3rom.c @@ -95,7 +95,7 @@ static int ps3rom_slave_configure(struct scsi_device *scsi_dev) */ static int fill_from_dev_buffer(struct scsi_cmnd *cmd, const void *buf) { - int k, req_len, act_len, len, active; + int k, req_len, len, fin; void *kaddr; struct scatterlist *sgpnt; unsigned int buflen; @@ -107,24 +107,22 @@ static int fill_from_dev_buffer(struct scsi_cmnd *cmd, const void *buf) if (!scsi_sglist(cmd)) return -1; - active = 1; - req_len = act_len = 0; + req_len = fin = 0; scsi_for_each_sg(cmd, sgpnt, scsi_sg_count(cmd), k) { - if (active) { - kaddr = kmap_atomic(sg_page(sgpnt), KM_IRQ0); - len = sgpnt->length; - if ((req_len + len) > buflen) { - active = 0; - len = buflen - req_len; - } - memcpy(kaddr + sgpnt->offset, buf + req_len, len); - flush_kernel_dcache_page(sg_page(sgpnt)); - kunmap_atomic(kaddr, KM_IRQ0); - act_len += len; + kaddr = kmap_atomic(sg_page(sgpnt), KM_IRQ0); + len = sgpnt->length; + if ((req_len + len) > buflen) { + len = buflen - req_len; + fin = 1; } - req_len += sgpnt->length; + memcpy(kaddr + sgpnt->offset, buf + req_len, len); + flush_kernel_dcache_page(sg_page(sgpnt)); + kunmap_atomic(kaddr, KM_IRQ0); + req_len += len; + if (fin) + break; } - scsi_set_resid(cmd, buflen - act_len); + scsi_set_resid(cmd, buflen - req_len); return 0; }