diff options
| author | Jens Axboe <axboe@suse.de> | 2003-07-25 00:39:23 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.osdl.org> | 2003-07-25 00:39:23 -0700 |
| commit | e45635ccc6445e19ca197853ea9ec555ec5ca25a (patch) | |
| tree | 05ee4c3863df3396148b431ac344a0df5a94dcfb /drivers/block | |
| parent | fe216eade3c29fe8c0c7cf316b8c7fc1c074861f (diff) | |
[PATCH] read-ahead and failfast
Here's the patch to enable failfast flag in the bio submission code, and
use it for multipath and readahead.
Diffstat (limited to 'drivers/block')
| -rw-r--r-- | drivers/block/ll_rw_blk.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c index f9678d95a043..f6ca4f797e73 100644 --- a/drivers/block/ll_rw_blk.c +++ b/drivers/block/ll_rw_blk.c @@ -689,7 +689,7 @@ void blk_queue_invalidate_tags(request_queue_t *q) static char *rq_flags[] = { "REQ_RW", - "REQ_RW_AHEAD", + "REQ_FAILFAST", "REQ_SOFTBARRIER", "REQ_HARDBARRIER", "REQ_CMD", @@ -706,6 +706,10 @@ static char *rq_flags[] = { "REQ_DRIVE_CMD", "REQ_DRIVE_TASK", "REQ_DRIVE_TASKFILE", + "REQ_PREEMPT", + "REQ_PM_SUSPEND", + "REQ_PM_RESUME", + "REQ_PM_SHUTDOWN", }; void blk_dump_rq_flags(struct request *rq, char *msg) @@ -1793,7 +1797,7 @@ void __blk_attempt_remerge(request_queue_t *q, struct request *rq) static int __make_request(request_queue_t *q, struct bio *bio) { struct request *req, *freereq = NULL; - int el_ret, rw, nr_sectors, cur_nr_sectors, barrier; + int el_ret, rw, nr_sectors, cur_nr_sectors, barrier, ra; struct list_head *insert_here; sector_t sector; @@ -1814,6 +1818,8 @@ static int __make_request(request_queue_t *q, struct bio *bio) barrier = test_bit(BIO_RW_BARRIER, &bio->bi_rw); + ra = bio_flagged(bio, BIO_RW_AHEAD) || current->flags & PF_READAHEAD; + again: insert_here = NULL; spin_lock_irq(q->queue_lock); @@ -1901,7 +1907,7 @@ get_rq: /* * READA bit set */ - if (bio_flagged(bio, BIO_RW_AHEAD)) + if (ra) goto end_io; freereq = get_request_wait(q, rw); @@ -1921,6 +1927,12 @@ 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; |
