[lkml]   [2006]   [May]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH] AOP_TRUNCATED_PAGE victims in read_pages() belong in the LRU
    AOP_TRUNCATED_PAGE victims in read_pages() belong in the LRU

    Nick Piggin rightly pointed out that the introduction of AOP_TRUNCATED_PAGE to
    read_pages() was wrong to leave A_T_P victim pages in the page cache but not
    put them in the LRU. Failing to do so hid them from the VM.

    A_T_P just means that the aop method unlocked the page rather than performing
    IO. It would be very rare that the page was truncated between the unlock and
    testing A_T_P. So we leave the pages in the LRU for likely reuse soon rather
    than backing them back out of the page cache. We do this by matching the
    behaviour before the A_T_P introduction which added pages to the LRU regardless
    of what ->readpage() did.

    This doesn't include the unrelated cleanup in Nick's initial fix which changed
    read_pages() to return void to match its only caller's behaviour of ignoring

    Signed-off-by: Nick Piggin <>
    Signed-off-by: Zach Brown <>

    mm/readahead.c | 13 +++++--------
    1 file changed, 5 insertions(+), 8 deletions(-)

    Index: 2.6.17-rc3-git7-read_pages-fix/mm/readahead.c
    --- 2.6.17-rc3-git7-read_pages-fix.orig/mm/readahead.c
    +++ 2.6.17-rc3-git7-read_pages-fix/mm/readahead.c
    @@ -182,14 +182,11 @@ static int read_pages(struct address_spa
    if (!add_to_page_cache(page, mapping,
    page->index, GFP_KERNEL)) {
    - ret = mapping->a_ops->readpage(filp, page);
    - if (ret != AOP_TRUNCATED_PAGE) {
    - if (!pagevec_add(&lru_pvec, page))
    - __pagevec_lru_add(&lru_pvec);
    - continue;
    - } /* else fall through to release */
    - }
    - page_cache_release(page);
    + mapping->a_ops->readpage(filp, page);
    + if (!pagevec_add(&lru_pvec, page))
    + __pagevec_lru_add(&lru_pvec);
    + } else
    + page_cache_release(page);
    ret = 0;
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at
     \ /
      Last update: 2006-05-03 22:10    [W:0.022 / U:1.316 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site