]> err.no Git - linux-2.6/blobdiff - drivers/scsi/libata-core.c
[PATCH] sg traverse fix for __atapi_pio_bytes()
[linux-2.6] / drivers / scsi / libata-core.c
index 21d194c6ace38b8595b4d6fb6fcfe8fe2cdf341b..9e58f134f68bf45767813d249220b322a33b005b 100644 (file)
@@ -2577,7 +2577,6 @@ static void __atapi_pio_bytes(struct ata_queued_cmd *qc, unsigned int bytes)
 next_sg:
        sg = &qc->sg[qc->cursg];
 
-next_page:
        page = sg->page;
        offset = sg->offset + qc->cursg_ofs;
 
@@ -2585,6 +2584,7 @@ next_page:
        page = nth_page(page, (offset >> PAGE_SHIFT));
        offset %= PAGE_SIZE;
 
+       /* don't overrun current sg */
        count = min(sg->length - qc->cursg_ofs, bytes);
 
        /* don't cross page boundaries */
@@ -2609,8 +2609,6 @@ next_page:
        kunmap(page);
 
        if (bytes) {
-               if (qc->cursg_ofs < sg->length)
-                       goto next_page;
                goto next_sg;
        }
 }