if (PageHighMem(pc->sg->page)) { unsigned long flags;  local_irq_save(flags); buf = kmap_atomic(pc->sg->page, KM_IRQ0) + pc->sg->offset; drive->hwif->atapi_input_bytes(drive, buf + pc->b_count, count); kunmap_atomic(buf - pc->sg->offset, KM_IRQ0); local_irq_restore(flags); } else { buf = page_address(pc->sg->page) + pc->sg->offset; drive->hwif->atapi_input_bytes(drive, buf + pc->b_count, count); } bcount -= count; pc->b_count += count; 
buf = kmap_atomic(pc->sg->page, KM_IRQ0); drive->hwif->atapi_input_bytes(drive, buf + pc->b_count + pc->sg->offset, count); kunmap_atomic(buf, KM_IRQ0); bcount -= count; pc->b_count += count; 
static void idescsi_input_buffers (ide_drive_t *drive, idescsi_pc_t *pc, unsigned int bcount){	int count;	char *buf;	while (bcount) {		if (pc->sg - (struct scatterlist *) pc->scsi_cmd->request_buffer > pc->scsi_cmd->use_sg) {			printk (KERN_ERR "ide-scsi: scatter gather table too small, discarding data\n");			idescsi_discard_data (drive, bcount);			return;		}		count = min(pc->sg->length - pc->b_count, bcount);		if (PageHighMem(pc->sg->page)) {			unsigned long flags;			local_irq_save(flags);			buf = kmap_atomic(pc->sg->page, KM_IRQ0) + pc->sg->offset;			drive->hwif->atapi_input_bytes(drive, buf + pc->b_count, count);			kunmap_atomic(buf - pc->sg->offset, KM_IRQ0);			local_irq_restore(flags);		} else {			buf = page_address(pc->sg->page) + pc->sg->offset;			drive->hwif->atapi_input_bytes(drive, buf + pc->b_count, count);		}		bcount -= count; pc->b_count += count;		if (pc->b_count == pc->sg->length) {			pc->sg++;			pc->b_count = 0;		}	}}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/17fd47ab4d33e764216b87006d8118fa050b4c92/ide-scsi.c/buggy/drivers/scsi/ide-scsi.c