__atapi_pio_bytes() if condition enhancement
PATCH 3/5 __atapi_pio_bytes() if condition enhancement
Hi Jeff,
Problem:
In __atapi_pio_bytes(), when (bytes > qc->nbytes) or (qc->cursg_ofs > sg->length) or
(count > bytes), the condition is not handled properly.
Changes:
- Fix the if condition mentioned above.
Attached please find the patch against the libata-2.6 tree for your review. Thanks.
Albert
Signed-off-by Albert Lee <[email protected]>
---------------------------------------
drivers/scsi/libata-core.c +5 -4
@@ -2334,7 +2334,7 @@unsigned char *buf;unsigned int offset, count; -if (qc->curbytes == qc->nbytes - bytes) +if (qc->curbytes + bytes >= qc->nbytes) ap->pio_task_state =PIO_ST_LAST ; next_sg:
@@ -2355,11 +2355,10 @@ buf =kmap (page) + offset; - bytes -= count; qc->curbytes += count; qc->cursg_ofs += count; -if (qc->cursg_ofs == sg->length) { +if (qc->cursg_ofs >= sg->length) { qc->cursg++; qc->cursg_ofs =0 ; }
@@ -2371,7 +2370,9 @@kunmap (page); -if (bytes) { +if (bytes > count) { + bytes -= count; + goto next_sg; } }
drivers/scsi/libata-core.c +5 -4
@@ -2334,7 +2334,7 @@unsigned char *buf;unsigned int offset, count; -if (qc->curbytes == qc->nbytes - bytes) +if (qc->curbytes + bytes >= qc->nbytes) ap->pio_task_state =PIO_ST_LAST ; next_sg:
@@ -2355,11 +2355,10 @@ buf =kmap (page) + offset; - bytes -= count; qc->curbytes += count; qc->cursg_ofs += count; -if (qc->cursg_ofs == sg->length) { +if (qc->cursg_ofs >= sg->length) { qc->cursg++; qc->cursg_ofs =0 ; }
@@ -2371,7 +2370,9 @@kunmap (page); -if (bytes) { +if (bytes > count) { + bytes -= count; + goto next_sg; } }