--- ./drivers/scsi/ips.c.x 2005-11-14 17:39:58.567273344 +0300 +++ ./drivers/scsi/ips.c 2005-11-14 17:39:33.028155880 +0300 @@ -3657,13 +3657,15 @@ ips_scmd_buf_write(Scsi_Cmnd * scmd, voi unsigned int min_cnt, xfer_cnt; char *cdata = (char *) data; struct scatterlist *sg = scmd->request_buffer; + void *sga; + for (i = 0, xfer_cnt = 0; (i < scmd->use_sg) && (xfer_cnt < count); i++) { - if (!IPS_SG_ADDRESS(&sg[i])) + sga = IPS_SG_ADDRESS(&sg[i]); + if (!sga) return; min_cnt = min(count - xfer_cnt, sg[i].length); - memcpy(IPS_SG_ADDRESS(&sg[i]), &cdata[xfer_cnt], - min_cnt); + memcpy(sga, &cdata[xfer_cnt], min_cnt); xfer_cnt += min_cnt; } @@ -3689,13 +3691,15 @@ ips_scmd_buf_read(Scsi_Cmnd * scmd, void unsigned int min_cnt, xfer_cnt; char *cdata = (char *) data; struct scatterlist *sg = scmd->request_buffer; + void *sga; + for (i = 0, xfer_cnt = 0; (i < scmd->use_sg) && (xfer_cnt < count); i++) { - if (!IPS_SG_ADDRESS(&sg[i])) + sga = IPS_SG_ADDRESS(&sg[i]); + if (!sga) return; min_cnt = min(count - xfer_cnt, sg[i].length); - memcpy(&cdata[xfer_cnt], IPS_SG_ADDRESS(&sg[i]), - min_cnt); + memcpy(&cdata[xfer_cnt], sga, min_cnt); xfer_cnt += min_cnt; }