forked from Minki/linux
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
This commit is contained in:
commit
02a93208ed
@ -2558,6 +2558,7 @@ int blk_rq_map_kern(request_queue_t *q, struct request *rq, void *kbuf,
|
||||
bio->bi_rw |= (1 << BIO_RW);
|
||||
|
||||
blk_rq_bio_prep(q, rq, bio);
|
||||
blk_queue_bounce(q, &rq->bio);
|
||||
rq->buffer = rq->data = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
17
fs/splice.c
17
fs/splice.c
@ -289,12 +289,10 @@ __generic_file_splice_read(struct file *in, loff_t *ppos,
|
||||
nr_pages = PIPE_BUFFERS;
|
||||
|
||||
/*
|
||||
* Initiate read-ahead on this page range. however, don't call into
|
||||
* read-ahead if this is a non-zero offset (we are likely doing small
|
||||
* chunk splice and the page is already there) for a single page.
|
||||
* Don't try to 2nd guess the read-ahead logic, call into
|
||||
* page_cache_readahead() like the page cache reads would do.
|
||||
*/
|
||||
if (!loff || nr_pages > 1)
|
||||
page_cache_readahead(mapping, &in->f_ra, in, index, nr_pages);
|
||||
page_cache_readahead(mapping, &in->f_ra, in, index, nr_pages);
|
||||
|
||||
/*
|
||||
* Now fill in the holes:
|
||||
@ -378,10 +376,11 @@ __generic_file_splice_read(struct file *in, loff_t *ppos,
|
||||
* If in nonblock mode then dont block on waiting
|
||||
* for an in-flight io page
|
||||
*/
|
||||
if (flags & SPLICE_F_NONBLOCK)
|
||||
break;
|
||||
|
||||
lock_page(page);
|
||||
if (flags & SPLICE_F_NONBLOCK) {
|
||||
if (TestSetPageLocked(page))
|
||||
break;
|
||||
} else
|
||||
lock_page(page);
|
||||
|
||||
/*
|
||||
* page was truncated, stop here. if this isn't the
|
||||
|
Loading…
Reference in New Issue
Block a user