From f7441a791aeaeac2e1f1f71b485d1372016f9285 Mon Sep 17 00:00:00 2001 From: Geert Uytterhoeven Date: Mon, 25 Feb 2008 14:24:31 +0100 Subject: [SCSI] ps3rom: Simplify fill_from_dev_buffer() As we no longer need to calculate the data length of the whole scatterlist, we can abort the loop earlier and coalesce req_len and act_len into one variable, making fill_from_dev_buffer() more similar to fetch_to_dev_buffer(). Signed-off-by: Geert Uytterhoeven Signed-off-by: James Bottomley --- drivers/scsi/ps3rom.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) (limited to 'drivers/scsi/ps3rom.c') diff --git a/drivers/scsi/ps3rom.c b/drivers/scsi/ps3rom.c index fad6cb5cba28..0eed5ca1e032 100644 --- a/drivers/scsi/ps3rom.c +++ b/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; } -- cgit