The IO scheduler is using the last-submitted-sector as an insertion target. This allows a streaming read to get a tremendous advantage over other IO submissions. Disable this for now. block/deadline-iosched.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN drivers/block/deadline-iosched.c~starvation-by-read-fix drivers/block/deadline-iosched.c --- 25/drivers/block/deadline-iosched.c~starvation-by-read-fix 2003-01-30 23:16:38.000000000 -0800 +++ 25-akpm/drivers/block/deadline-iosched.c 2003-01-30 23:36:55.000000000 -0800 @@ -235,7 +235,7 @@ deadline_add_drq_rb(struct deadline_data const int data_dir = rq_data_dir(drq->request); /* keep the next_drq cache up to date */ - if (dd->next_drq[data_dir] != NULL) { + if (0 && dd->next_drq[data_dir] != NULL) { sector_t last = dd->last_sector[data_dir]; sector_t next = dd->next_drq[data_dir]->request->sector; sector_t this = drq->request->sector; _