All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH libata-2.6 3/5] __atapi_pio_bytes() if condition enhancement
@ 2005-03-18  7:49 Albert Lee
  0 siblings, 0 replies; only message in thread
From: Albert Lee @ 2005-03-18  7:49 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Bartlomiej Zolnierkiewicz, Doug Maxey, Linux IDE

[-- Attachment #1: Type: text/plain, Size: 1164 bytes --]

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 <albertcc@tw.ibm.com>
---------------------------------------
--- libata-2.6-atapi_pio_bytes/drivers/scsi/libata-core.c	2005-03-18 13:20:01.000000000 +0800
+++ libata-2.6-reorder/drivers/scsi/libata-core.c	2005-03-18 12:56:44.000000000 +0800
@@ -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;
  	}
  }


[-- Attachment #2: reorder.diff --]
[-- Type: text/plain, Size: 758 bytes --]

--- libata-2.6-atapi_pio_bytes/drivers/scsi/libata-core.c	2005-03-18 13:20:01.000000000 +0800
+++ libata-2.6-reorder/drivers/scsi/libata-core.c	2005-03-18 12:56:44.000000000 +0800
@@ -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;
 	}
 }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-03-18  7:49 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-03-18  7:49 [PATCH libata-2.6 3/5] __atapi_pio_bytes() if condition enhancement Albert Lee

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.