--- linux-2.6.4-rc3-orig/drivers/block/ll_rw_blk.c 2004-03-09 22:21:26.819208694 -0800 +++ linux-2.6.4-rc3-ff/drivers/block/ll_rw_blk.c 2004-03-09 22:37:02.395169904 -0800 @@ -2121,11 +2121,14 @@ get_rq: goto again; } + req->flags |= REQ_CMD; + /* - * first three bits are identical in rq->flags and bio->bi_rw, - * see bio.h and blkdev.h + * inherit FAILFAST from bio and don't stack up + * retries for read ahead */ - req->flags = (bio->bi_rw & 7) | REQ_CMD; + if (ra || test_bit(BIO_RW_FAILFAST, &bio->bi_rw)) + req->flags |= REQ_FAILFAST; /* * REQ_BARRIER implies no merging, but lets make it explicit @@ -2133,12 +2136,6 @@ get_rq: if (barrier) req->flags |= (REQ_HARDBARRIER | REQ_NOMERGE); - /* - * don't stack up retries for read ahead - */ - if (ra) - req->flags |= REQ_FAILFAST; - req->errors = 0; req->hard_sector = req->sector = sector; req->hard_nr_sectors = req->nr_sectors = nr_sectors;