Skip to contentSkip to conversation

libata-core.c: fix parameter bug on kunmap_atomic() calls

PATCH New Mark Lord 1 participant 1 message Dec 13, 2005

Subsystems (2)
lore
Share & tools
lore

Mark Lord

author
#0 lore raw

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.

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);