Patch from Nick Piggin <piggin@cyberone.com.au>

Accounting is wrong for merging or removal.



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

diff -puN drivers/block/as-iosched.c~as-accounting-fix drivers/block/as-iosched.c
--- 25/drivers/block/as-iosched.c~as-accounting-fix	2003-02-27 02:02:19.000000000 -0800
+++ 25-akpm/drivers/block/as-iosched.c	2003-02-27 02:03:25.000000000 -0800
@@ -468,8 +468,10 @@ static void as_remove_request(request_qu
 						arq_next, arq_prev);
 		}
 		as_del_arq_rb(ad, arq);
-		if (ON_RB(&arq->rb_node))
+		if (ON_RB(&arq->rb_node)) {
+			arq->as_io_context->nr_reads--;
 			put_as_io_context(&arq->as_io_context);
+		}
 	}
 
 	if (q->last_merge == &rq->queuelist)
@@ -614,7 +616,6 @@ static void as_move_to_dispatch(struct a
 					+ arq->request->nr_sectors;
 
 	if (data_dir == READ) {
-		arq->as_io_context->nr_reads--;
 		/* In case we have to anticipate after this */
 		copy_as_io_context(&ad->as_io_context, &arq->as_io_context);
 	}

_