lkml.org 
[lkml]   [2007]   [Jun]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 1/2] readahead: move synchronous readahead call out of splice loop
    Move synchronous page_cache_readahead_ondemand() call out of splice loop.

    This avoids one pointless page allocation/insertion in case of non-zero
    ra_pages, or many pointless readahead calls in case of zero ra_pages.

    Note that if a user sets ra_pages to less than PIPE_BUFFERS=16 pages, he will
    not get expected readahead behavior anyway. The splice code works in batches
    of 16 pages, which can be taken as another form of synchronous readahead.

    Signed-off-by: Fengguang Wu <wfg@mail.ustc.edu.cn>
    ---
    fs/splice.c | 11 ++++++-----
    1 file changed, 6 insertions(+), 5 deletions(-)

    --- linux-2.6.22-rc3-mm1.orig/fs/splice.c
    +++ linux-2.6.22-rc3-mm1/fs/splice.c
    @@ -299,12 +299,16 @@ __generic_file_splice_read(struct file *
    * Lookup the (hopefully) full range of pages we need.
    */
    spd.nr_pages = find_get_pages_contig(mapping, index, nr_pages, pages);
    + index += spd.nr_pages;

    /*
    * If find_get_pages_contig() returned fewer pages than we needed,
    - * allocate the rest.
    + * readahead/allocate the rest.
    */
    - index += spd.nr_pages;
    + if (spd.nr_pages < nr_pages)
    + page_cache_readahead_ondemand(mapping, &in->f_ra, in,
    + NULL, index, nr_pages - spd.nr_pages);
    +
    while (spd.nr_pages < nr_pages) {
    /*
    * Page could be there, find_get_pages_contig() breaks on
    @@ -312,9 +316,6 @@ __generic_file_splice_read(struct file *
    */
    page = find_get_page(mapping, index);
    if (!page) {
    - page_cache_readahead_ondemand(mapping, &in->f_ra, in,
    - NULL, index, nr_pages - spd.nr_pages);
    -
    /*
    * page didn't exist, allocate one.
    */
    --
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-06-12 05:13    [W:0.023 / U:88.688 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site