<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
From: Nick Piggin &lt;piggin@cyberone.com.au&gt;




 drivers/block/as-iosched.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diff -puN drivers/block/as-iosched.c~as-fix-seek-estimation drivers/block/as-iosched.c
--- 25/drivers/block/as-iosched.c~as-fix-seek-estimation	2003-06-11 19:49:21.000000000 -0700
+++ 25-akpm/drivers/block/as-iosched.c	2003-06-11 19:49:22.000000000 -0700
@@ -877,24 +877,27 @@ static void as_update_iohist(struct as_i
 		}
 
 		/* Calculate read -&gt; read seek distance */
-		if (aic-&gt;last_request_pos &lt; rq-&gt;sector)
+		aic-&gt;last_request_pos = rq-&gt;sector + rq-&gt;nr_sectors;
+
+		if (!aic-&gt;seek_samples)
+			seek_dist = 0;
+		else if (aic-&gt;last_request_pos &lt; rq-&gt;sector)
 			seek_dist = rq-&gt;sector - aic-&gt;last_request_pos;
 		else
 			seek_dist = aic-&gt;last_request_pos - rq-&gt;sector;
-		aic-&gt;last_request_pos = rq-&gt;sector + rq-&gt;nr_sectors;
 
+#if 0	/* TODO does this fix IBM's rawio random reads? */
 		/*
 		 * Don't allow the seek distance to get too large from the
 		 * odd fragment, pagein, etc
 		 */
-		if (!aic-&gt;seek_samples)
-			seek_dist = 0;
-		else if (aic-&gt;seek_samples &lt; 400) /* second&amp;third seek */
+		if (aic-&gt;seek_samples &lt; 400) /* second&amp;third seek */
 			seek_dist = min(seek_dist, (aic-&gt;seek_mean * 4)
 							+ 2*1024*1024);
 		else
 			seek_dist = min(seek_dist, (aic-&gt;seek_mean * 4)
 							+ 2*1024*64);
+#endif
 
 		aic-&gt;seek_samples += 256;
 		aic-&gt;seek_total += 256*seek_dist;
@@ -1023,6 +1026,7 @@ static void as_completed_request(request
 		}
 	}
 	spin_unlock(&amp;aic-&gt;lock);
+
 	put_as_io_context(&amp;arq-&gt;as_io_context);
 }
 

_
</pre></body></html>