libata-core.c: fix parameter bug on kunmap_atomic() calls
PATCH 1/1 libata-core.c: fix parameter bug on kunmap_atomic() calls
Fix incorrect pointer usage on two calls to kunmap_atomic(). This seems to happen a lot, because kunmap() wants the struct page *, whereas kunmap_atomic() instead wants the mapped virtual address.
Signed-off-by Mark Lord <[email protected]>
drivers/scsi/libata-core.c 2005-12-12 21:46:04.000000000 -0500 renamed from drivers/scsi/libata-core.c.orig 2005-12-11 18:56:23.000000000 -0500 +2 -2
@@ -2447,7 +2447,7 @@ struct scatterlist *psg = &qc->pad_sgent; void *addr = kmap_atomic(psg->page, KM_IRQ0); memcpy(addr + psg->offset, pad_buf, qc->pad_len); - kunmap_atomic(psg->page, KM_IRQ0); + kunmap_atomic(addr, KM_IRQ0); } } else { if (sg_dma_len(&sg[0]) > 0)
@@ -2721,7 +2721,7 @@ if (qc->tf.flags & ATA_TFLAG_WRITE) { void *addr = kmap_atomic(psg->page, KM_IRQ0); memcpy(pad_buf, addr + psg->offset, qc->pad_len); - kunmap_atomic(psg->page, KM_IRQ0); + kunmap_atomic(addr, KM_IRQ0); } sg_dma_address(psg) = ap->pad_dma + (qc->tag * ATA_DMA_PAD_SZ);
drivers/scsi/libata-core.c renamed from drivers/scsi/libata-core.c.orig +2 -2
@@ -2447,7 +2447,7 @@struct scatterlist *psg = &qc->pad_sgent;void *addr =kmap_atomic (psg->page,KM_IRQ0 );memcpy (addr + psg->offset, pad_buf, qc->pad_len); -kunmap_atomic (psg->page,KM_IRQ0 ); +kunmap_atomic (addr,KM_IRQ0 ); } }else {if (sg_dma_len (&sg[0 ]) >0 )
@@ -2721,7 +2721,7 @@if (qc->tf.flags &ATA_TFLAG_WRITE ) {void *addr =kmap_atomic (psg->page,KM_IRQ0 );memcpy (pad_buf, addr + psg->offset, qc->pad_len); -kunmap_atomic (psg->page,KM_IRQ0 ); +kunmap_atomic (addr,KM_IRQ0 ); }sg_dma_address (psg) = ap->pad_dma + (qc->tag *ATA_DMA_PAD_SZ );