]> git.hungrycats.org Git - linux/commitdiff
[PATCH] libata: fix kunmap() of incorrect page, in PIO data xfer
authorSergio Gelato <sergio.gelato@astro.su.se>
Wed, 14 Jul 2004 12:11:41 +0000 (08:11 -0400)
committerJeff Garzik <jgarzik@pobox.com>
Wed, 14 Jul 2004 12:11:41 +0000 (08:11 -0400)
Obvious bug.  Fixes highmem oops.

drivers/scsi/libata-core.c

index 11992035d28f5bd43b6fb72afb4ebc0da7b5ad57..15d0654bc7cfc18606b10e04695e942fe14ae70f 100644 (file)
@@ -2029,6 +2029,7 @@ static void ata_pio_sector(struct ata_port *ap)
 {
        struct ata_queued_cmd *qc;
        struct scatterlist *sg;
+       struct page *page;
        unsigned char *buf;
        u8 status;
 
@@ -2065,7 +2066,8 @@ static void ata_pio_sector(struct ata_port *ap)
        if (qc->cursect == (qc->nsect - 1))
                ap->pio_task_state = PIO_ST_LAST;
 
-       buf = kmap(sg[qc->cursg].page) +
+       page = sg[qc->cursg].page;
+       buf = kmap(page) +
              sg[qc->cursg].offset + (qc->cursg_ofs * ATA_SECT_SIZE);
 
        qc->cursect++;
@@ -2088,7 +2090,7 @@ static void ata_pio_sector(struct ata_port *ap)
        else
                insl(ap->ioaddr.data_addr, buf, ATA_SECT_DWORDS);
 
-       kunmap(sg[qc->cursg].page);
+       kunmap(page);
 }
 
 static void ata_pio_task(void *_data)