Patch from Nick Piggin 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); } _