diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-08 14:34:52 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-08 14:34:52 -0400 |
| commit | 02a93208edec0d655c9f18613d830dc6afeda7d4 (patch) | |
| tree | 3a48dbae348c02d4b108cb3fcc5f1600ad3dd53a | |
| parent | 18062a91d2ddc40e19fc674afeb7cad58cfa23ab (diff) | |
| parent | 821de3a27bf33f11ec878562577c586cd5f83c64 (diff) | |
Merge branch 'for-2.6.22' of git://git.kernel.dk/data/git/linux-2.6-block
* 'for-2.6.22' of git://git.kernel.dk/data/git/linux-2.6-block:
[PATCH] ll_rw_blk: fix missing bounce in blk_rq_map_kern()
[PATCH] splice: always call into page_cache_readahead()
[PATCH] splice(): fix interaction with readahead
| -rw-r--r-- | block/ll_rw_blk.c | 1 | ||||
| -rw-r--r-- | fs/splice.c | 17 |
2 files changed, 9 insertions, 9 deletions
diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c index 5873861e1dbb..d99d402953a3 100644 --- a/block/ll_rw_blk.c +++ b/block/ll_rw_blk.c | |||
| @@ -2558,6 +2558,7 @@ int blk_rq_map_kern(request_queue_t *q, struct request *rq, void *kbuf, | |||
| 2558 | bio->bi_rw |= (1 << BIO_RW); | 2558 | bio->bi_rw |= (1 << BIO_RW); |
| 2559 | 2559 | ||
| 2560 | blk_rq_bio_prep(q, rq, bio); | 2560 | blk_rq_bio_prep(q, rq, bio); |
| 2561 | blk_queue_bounce(q, &rq->bio); | ||
| 2561 | rq->buffer = rq->data = NULL; | 2562 | rq->buffer = rq->data = NULL; |
| 2562 | return 0; | 2563 | return 0; |
| 2563 | } | 2564 | } |
diff --git a/fs/splice.c b/fs/splice.c index 5428b0ff3b6f..12f28281d2b1 100644 --- a/fs/splice.c +++ b/fs/splice.c | |||
| @@ -289,12 +289,10 @@ __generic_file_splice_read(struct file *in, loff_t *ppos, | |||
| 289 | nr_pages = PIPE_BUFFERS; | 289 | nr_pages = PIPE_BUFFERS; |
| 290 | 290 | ||
| 291 | /* | 291 | /* |
| 292 | * Initiate read-ahead on this page range. however, don't call into | 292 | * Don't try to 2nd guess the read-ahead logic, call into |
| 293 | * read-ahead if this is a non-zero offset (we are likely doing small | 293 | * page_cache_readahead() like the page cache reads would do. |
| 294 | * chunk splice and the page is already there) for a single page. | ||
| 295 | */ | 294 | */ |
| 296 | if (!loff || nr_pages > 1) | 295 | page_cache_readahead(mapping, &in->f_ra, in, index, nr_pages); |
| 297 | page_cache_readahead(mapping, &in->f_ra, in, index, nr_pages); | ||
| 298 | 296 | ||
| 299 | /* | 297 | /* |
| 300 | * Now fill in the holes: | 298 | * Now fill in the holes: |
| @@ -378,10 +376,11 @@ __generic_file_splice_read(struct file *in, loff_t *ppos, | |||
| 378 | * If in nonblock mode then dont block on waiting | 376 | * If in nonblock mode then dont block on waiting |
| 379 | * for an in-flight io page | 377 | * for an in-flight io page |
| 380 | */ | 378 | */ |
| 381 | if (flags & SPLICE_F_NONBLOCK) | 379 | if (flags & SPLICE_F_NONBLOCK) { |
| 382 | break; | 380 | if (TestSetPageLocked(page)) |
| 383 | 381 | break; | |
| 384 | lock_page(page); | 382 | } else |
| 383 | lock_page(page); | ||
| 385 | 384 | ||
| 386 | /* | 385 | /* |
| 387 | * page was truncated, stop here. if this isn't the | 386 | * page was truncated, stop here. if this isn't the |
