patch-2.4.20 linux-2.4.20/drivers/scsi/ide-scsi.c
Next file: linux-2.4.20/drivers/scsi/imm.c
Previous file: linux-2.4.20/drivers/scsi/hosts.h
Back to the patch index
Back to the overall index
- Lines: 33
- Date:
Thu Nov 28 15:53:14 2002
- Orig file:
linux-2.4.19/drivers/scsi/ide-scsi.c
- Orig date:
Fri Aug 2 17:39:44 2002
diff -urN linux-2.4.19/drivers/scsi/ide-scsi.c linux-2.4.20/drivers/scsi/ide-scsi.c
@@ -739,7 +739,7 @@
int segments = pc->scsi_cmd->use_sg;
struct scatterlist *sg = pc->scsi_cmd->request_buffer;
- if (!drive->using_dma || !pc->request_transfer || pc->request_transfer % 1024)
+ if (!drive->using_dma || !pc->request_transfer || pc->request_transfer & 1023)
return NULL;
if (idescsi_set_direction(pc))
return NULL;
@@ -750,12 +750,22 @@
printk ("ide-scsi: %s: building DMA table, %d segments, %dkB total\n", drive->name, segments, pc->request_transfer >> 10);
#endif /* IDESCSI_DEBUG_LOG */
while (segments--) {
- bh->b_data = sg->address;
+ if (sg->address) {
+ bh->b_page = virt_to_page(sg->address);
+ bh->b_data = (char *) ((unsigned long) sg->address & ~PAGE_MASK);
+ } else if (sg->page) {
+ bh->b_page = sg->page;
+ bh->b_data = (char *) sg->offset;
+ }
+
bh->b_size = sg->length;
bh = bh->b_reqnext;
sg++;
}
} else {
+ /*
+ * non-sg requests are guarenteed not to reside in highmem /jens
+ */
if ((first_bh = bh = idescsi_kmalloc_bh (1)) == NULL)
return NULL;
#if IDESCSI_DEBUG_LOG
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)