lkml.org 
[lkml]   [2008]   [Nov]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[patch v2] vmscan: protect zone rotation stats by lru lock
    Date
    The zone's rotation statistics must not be accessed without the
    corresponding LRU lock held. Fix an unprotected write in
    shrink_active_list().

    Acked-by: Rik van Riel <riel@redhat.com>
    Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Signed-off-by: Johannes Weiner <hannes@saeurebad.de>
    ---
    mm/vmscan.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    Applies to your tree, Linus, and should probably go into .28.

    --- a/mm/vmscan.c
    +++ b/mm/vmscan.c
    @@ -1243,32 +1243,32 @@ static void shrink_active_list(unsigned
    /* page_referenced clears PageReferenced */
    if (page_mapping_inuse(page) &&
    page_referenced(page, 0, sc->mem_cgroup))
    pgmoved++;

    list_add(&page->lru, &l_inactive);
    }

    + spin_lock_irq(&zone->lru_lock);
    /*
    * Count referenced pages from currently used mappings as
    * rotated, even though they are moved to the inactive list.
    * This helps balance scan pressure between file and anonymous
    * pages in get_scan_ratio.
    */
    zone->recent_rotated[!!file] += pgmoved;

    /*
    * Move the pages to the [file or anon] inactive list.
    */
    pagevec_init(&pvec, 1);

    pgmoved = 0;
    lru = LRU_BASE + file * LRU_FILE;
    - spin_lock_irq(&zone->lru_lock);
    while (!list_empty(&l_inactive)) {
    page = lru_to_page(&l_inactive);
    prefetchw_prev_lru_page(page, &l_inactive, flags);
    VM_BUG_ON(PageLRU(page));
    SetPageLRU(page);
    VM_BUG_ON(!PageActive(page));
    ClearPageActive(page);


    \
     
     \ /
      Last update: 2008-12-01 03:01    [W:0.018 / U:125.436 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site