diff for duplicates of <1463779979.22178.142.camel@linux.intel.com> diff --git a/a/1.txt b/N1/1.txt index 2979385..d652ffe 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -7,9 +7,9 @@ the separation of page out and page scan operations. It paves the way to group similar pages together and batch process them in the page out path for better efficiency. -After we have scanned a page in shrink_page_list andA -completed paging, the final disposition and cleanA -up of the page is consolidated into pg_finish.A A T +After we have scanned a page in shrink_page_list and +completed paging, the final disposition and clean +up of the page is consolidated into pg_finish. T he designated disposition of the page from page scanning in shrink_page_list is marked with one of the designation in pg_result. @@ -22,17 +22,17 @@ Tim Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com> --- -A mm/vmscan.c | 429 ++++++++++++++++++++++++++++++++++-------------------------- -A 1 file changed, 246 insertions(+), 183 deletions(-) + mm/vmscan.c | 429 ++++++++++++++++++++++++++++++++++-------------------------- + 1 file changed, 246 insertions(+), 183 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 142cb61..0eb3c67 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -873,6 +873,216 @@ static void page_check_dirty_writeback(struct page *page, -A mapping->a_ops->is_dirty_writeback(page, dirty, writeback); -A } -A + mapping->a_ops->is_dirty_writeback(page, dirty, writeback); + } + +enum pg_result { + PG_SPECULATIVE_REF, + PG_FREE, @@ -51,17 +51,17 @@ A + enum page_references references, + bool may_enter_fs, + bool lazyfree, -+ intA A *swap_ret, ++ int *swap_ret, + struct page *page) +{ + struct address_space *mapping; + -+ mapping =A A page_mapping(page); ++ mapping = page_mapping(page); + + /* -+ A * The page is mapped into the page tables of one or more -+ A * processes. Try to unmap it here. -+ A */ ++ * The page is mapped into the page tables of one or more ++ * processes. Try to unmap it here. ++ */ + if (page_mapped(page) && mapping) { + switch (*swap_ret = try_to_unmap(page, lazyfree ? + (ttu_flags | TTU_BATCH_FLUSH | TTU_LZFREE) : @@ -81,19 +81,19 @@ A + + if (PageDirty(page)) { + /* -+ A * Only kswapd can writeback filesystem pages to -+ A * avoid risk of stack overflow but only writeback -+ A * if many dirty pages have been encountered. -+ A */ ++ * Only kswapd can writeback filesystem pages to ++ * avoid risk of stack overflow but only writeback ++ * if many dirty pages have been encountered. ++ */ + if (page_is_file_cache(page) && + (!current_is_kswapd() || -+ A !test_bit(ZONE_DIRTY, &zone->flags))) { ++ !test_bit(ZONE_DIRTY, &zone->flags))) { + /* -+ A * Immediately reclaim when written back. -+ A * Similar in principal to deactivate_page() -+ A * except we already have the page isolated -+ A * and know it's dirty -+ A */ ++ * Immediately reclaim when written back. ++ * Similar in principal to deactivate_page() ++ * except we already have the page isolated ++ * and know it's dirty ++ */ + inc_zone_page_state(page, NR_VMSCAN_IMMEDIATE); + SetPageReclaim(page); + @@ -108,10 +108,10 @@ A + return PG_KEEP_LOCKED; + + /* -+ A * Page is dirty. Flush the TLB if a writable entry -+ A * potentially exists to avoid CPU writes after IO -+ A * starts and then write it out here. -+ A */ ++ * Page is dirty. Flush the TLB if a writable entry ++ * potentially exists to avoid CPU writes after IO ++ * starts and then write it out here. ++ */ + try_to_unmap_flush_dirty(); + switch (pageout(page, mapping, sc)) { + case PAGE_KEEP: @@ -125,9 +125,9 @@ A + return PG_KEEP; + + /* -+ A * A synchronous write - probably a ramdisk.A A Go -+ A * ahead and try to reclaim the page. -+ A */ ++ * A synchronous write - probably a ramdisk. Go ++ * ahead and try to reclaim the page. ++ */ + if (!trylock_page(page)) + return PG_KEEP; + if (PageDirty(page) || PageWriteback(page)) @@ -139,26 +139,26 @@ A + } + + /* -+ A * If the page has buffers, try to free the buffer mappings -+ A * associated with this page. If we succeed we try to free -+ A * the page as well. -+ A * -+ A * We do this even if the page is PageDirty(). -+ A * try_to_release_page() does not perform I/O, but it is -+ A * possible for a page to have PageDirty set, but it is actually -+ A * clean (all its buffers are clean).A A This happens if the -+ A * buffers were written out directly, with submit_bh(). ext3 -+ A * will do this, as well as the blockdev mapping. -+ A * try_to_release_page() will discover that cleanness and will -+ A * drop the buffers and mark the page clean - it can be freed. -+ A * -+ A * Rarely, pages can have buffers and no ->mapping.A A These are -+ A * the pages which were not successfully invalidated in -+ A * truncate_complete_page().A A We try to drop those buffers here -+ A * and if that worked, and the page is no longer mapped into -+ A * process address space (page_count == 1) it can be freed. -+ A * Otherwise, leave the page on the LRU so it is swappable. -+ A */ ++ * If the page has buffers, try to free the buffer mappings ++ * associated with this page. If we succeed we try to free ++ * the page as well. ++ * ++ * We do this even if the page is PageDirty(). ++ * try_to_release_page() does not perform I/O, but it is ++ * possible for a page to have PageDirty set, but it is actually ++ * clean (all its buffers are clean). This happens if the ++ * buffers were written out directly, with submit_bh(). ext3 ++ * will do this, as well as the blockdev mapping. ++ * try_to_release_page() will discover that cleanness and will ++ * drop the buffers and mark the page clean - it can be freed. ++ * ++ * Rarely, pages can have buffers and no ->mapping. These are ++ * the pages which were not successfully invalidated in ++ * truncate_complete_page(). We try to drop those buffers here ++ * and if that worked, and the page is no longer mapped into ++ * process address space (page_count == 1) it can be freed. ++ * Otherwise, leave the page on the LRU so it is swappable. ++ */ + if (page_has_private(page)) { + if (!try_to_release_page(page, sc->gfp_mask)) + return PG_ACTIVATE_LOCKED; @@ -168,12 +168,12 @@ A + return PG_FREE; + else { + /* -+ A * rare race with speculative reference. -+ A * the speculative reference will free -+ A * this page shortly, so we may -+ A * increment nr_reclaimed (and -+ A * leave it off the LRU). -+ A */ ++ * rare race with speculative reference. ++ * the speculative reference will free ++ * this page shortly, so we may ++ * increment nr_reclaimed (and ++ * leave it off the LRU). ++ */ + return PG_SPECULATIVE_REF; + } + } @@ -184,12 +184,12 @@ A + return PG_KEEP_LOCKED; + + /* -+ A * At this point, we have no other references and there is -+ A * no way to pick any more up (removed from LRU, removed -+ A * from pagecache). Can use non-atomic bitops now (and -+ A * we obviously don't have to worry about waking up a process -+ A * waiting on the page lock, because there are no references. -+ A */ ++ * At this point, we have no other references and there is ++ * no way to pick any more up (removed from LRU, removed ++ * from pagecache). Can use non-atomic bitops now (and ++ * we obviously don't have to worry about waking up a process ++ * waiting on the page lock, because there are no references. ++ */ + __ClearPageLocked(page); + return PG_FREE; +} @@ -212,9 +212,9 @@ A + + ++*nr_reclaimed; + /* -+ A * Is there need to periodically free_page_list? It would -+ A * appear not as the counts should be low -+ A */ ++ * Is there need to periodically free_page_list? It would ++ * appear not as the counts should be low ++ */ + list_add(&page->lru, free_pages); + return; + case PG_MLOCKED: @@ -243,90 +243,90 @@ A + } +} + -A /* -A * shrink_page_list() returns the number of reclaimed pages -A */ + /* + * shrink_page_list() returns the number of reclaimed pages + */ @@ -904,28 +1114,35 @@ static unsigned long shrink_page_list(struct list_head *page_list, -A struct page *page; -A int may_enter_fs; -A enum page_references references = PAGEREF_RECLAIM_CLEAN; + struct page *page; + int may_enter_fs; + enum page_references references = PAGEREF_RECLAIM_CLEAN; + enum pg_result pg_dispose = PG_UNKNOWN; -A bool dirty, writeback; -A bool lazyfree = false; + bool dirty, writeback; + bool lazyfree = false; - int ret = SWAP_SUCCESS; + int swap_ret = SWAP_SUCCESS; -A -A cond_resched(); -A -A page = lru_to_page(page_list); -A list_del(&page->lru); -A + + cond_resched(); + + page = lru_to_page(page_list); + list_del(&page->lru); + - if (!trylock_page(page)) - goto keep; + if (!trylock_page(page)) { + pg_dispose = PG_KEEP; + goto finish; + } -A -A VM_BUG_ON_PAGE(PageActive(page), page); -A VM_BUG_ON_PAGE(page_zone(page) != zone, page); -A -A sc->nr_scanned++; -A + + VM_BUG_ON_PAGE(PageActive(page), page); + VM_BUG_ON_PAGE(page_zone(page) != zone, page); + + sc->nr_scanned++; + - if (unlikely(!page_evictable(page))) - goto cull_mlocked; + if (unlikely(!page_evictable(page))) { + pg_dispose = PG_MLOCKED; + goto finish; + } -A + - if (!sc->may_unmap && page_mapped(page)) - goto keep_locked; + if (!sc->may_unmap && page_mapped(page)) { + pg_dispose = PG_KEEP_LOCKED; + goto finish; + } -A -A /* Double the slab pressure for mapped and swapcache pages */ -A if (page_mapped(page) || PageSwapCache(page)) + + /* Double the slab pressure for mapped and swapcache pages */ + if (page_mapped(page) || PageSwapCache(page)) @@ -998,7 +1215,8 @@ static unsigned long shrink_page_list(struct list_head *page_list, -A A A A A PageReclaim(page) && -A A A A A test_bit(ZONE_WRITEBACK, &zone->flags)) { -A nr_immediate++; + PageReclaim(page) && + test_bit(ZONE_WRITEBACK, &zone->flags)) { + nr_immediate++; - goto keep_locked; + pg_dispose = PG_KEEP_LOCKED; + goto finish; -A -A /* Case 2 above */ -A } else if (sane_reclaim(sc) || + + /* Case 2 above */ + } else if (sane_reclaim(sc) || @@ -1016,7 +1234,8 @@ static unsigned long shrink_page_list(struct list_head *page_list, -A A */ -A SetPageReclaim(page); -A nr_writeback++; + */ + SetPageReclaim(page); + nr_writeback++; - goto keep_locked; + pg_dispose = PG_KEEP_LOCKED; + goto finish; -A -A /* Case 3 above */ -A } else { + + /* Case 3 above */ + } else { @@ -1033,9 +1252,11 @@ static unsigned long shrink_page_list(struct list_head *page_list, -A -A switch (references) { -A case PAGEREF_ACTIVATE: + + switch (references) { + case PAGEREF_ACTIVATE: - goto activate_locked; + pg_dispose = PG_ACTIVATE_LOCKED; + goto finish; -A case PAGEREF_KEEP: + case PAGEREF_KEEP: - goto keep_locked; + pg_dispose = PG_KEEP_LOCKED; + goto finish; -A case PAGEREF_RECLAIM: -A case PAGEREF_RECLAIM_CLEAN: -A ; /* try to reclaim the page below */ + case PAGEREF_RECLAIM: + case PAGEREF_RECLAIM_CLEAN: + ; /* try to reclaim the page below */ @@ -1046,183 +1267,25 @@ static unsigned long shrink_page_list(struct list_head *page_list, -A A * Try to allocate it some swap space here. -A A */ -A if (PageAnon(page) && !PageSwapCache(page)) { + * Try to allocate it some swap space here. + */ + if (PageAnon(page) && !PageSwapCache(page)) { - if (!(sc->gfp_mask & __GFP_IO)) - goto keep_locked; - if (!add_to_swap(page, page_list)) @@ -339,9 +339,9 @@ A if (PageAnon(page) && !PageSwapCache(page)) { - } - - /* -- A * The page is mapped into the page tables of one or more -- A * processes. Try to unmap it here. -- A */ +- * The page is mapped into the page tables of one or more +- * processes. Try to unmap it here. +- */ - if (page_mapped(page) && mapping) { - switch (ret = try_to_unmap(page, lazyfree ? - (ttu_flags | TTU_BATCH_FLUSH | TTU_LZFREE) : @@ -359,24 +359,24 @@ A if (PageAnon(page) && !PageSwapCache(page)) { + if (!(sc->gfp_mask & __GFP_IO)) { + pg_dispose = PG_KEEP_LOCKED; + goto finish; -A } + } - } - - if (PageDirty(page)) { - /* -- A * Only kswapd can writeback filesystem pages to -- A * avoid risk of stack overflow but only writeback -- A * if many dirty pages have been encountered. -- A */ +- * Only kswapd can writeback filesystem pages to +- * avoid risk of stack overflow but only writeback +- * if many dirty pages have been encountered. +- */ - if (page_is_file_cache(page) && - (!current_is_kswapd() || -- A !test_bit(ZONE_DIRTY, &zone->flags))) { +- !test_bit(ZONE_DIRTY, &zone->flags))) { - /* -- A * Immediately reclaim when written back. -- A * Similar in principal to deactivate_page() -- A * except we already have the page isolated -- A * and know it's dirty -- A */ +- * Immediately reclaim when written back. +- * Similar in principal to deactivate_page() +- * except we already have the page isolated +- * and know it's dirty +- */ - inc_zone_page_state(page, NR_VMSCAN_IMMEDIATE); - SetPageReclaim(page); - @@ -391,10 +391,10 @@ A } - goto keep_locked; - - /* -- A * Page is dirty. Flush the TLB if a writable entry -- A * potentially exists to avoid CPU writes after IO -- A * starts and then write it out here. -- A */ +- * Page is dirty. Flush the TLB if a writable entry +- * potentially exists to avoid CPU writes after IO +- * starts and then write it out here. +- */ - try_to_unmap_flush_dirty(); - switch (pageout(page, mapping, sc)) { - case PAGE_KEEP: @@ -408,9 +408,9 @@ A } - goto keep; - - /* -- A * A synchronous write - probably a ramdisk.A A Go -- A * ahead and try to reclaim the page. -- A */ +- * A synchronous write - probably a ramdisk. Go +- * ahead and try to reclaim the page. +- */ - if (!trylock_page(page)) - goto keep; - if (PageDirty(page) || PageWriteback(page)) @@ -422,26 +422,26 @@ A } - } - - /* -- A * If the page has buffers, try to free the buffer mappings -- A * associated with this page. If we succeed we try to free -- A * the page as well. -- A * -- A * We do this even if the page is PageDirty(). -- A * try_to_release_page() does not perform I/O, but it is -- A * possible for a page to have PageDirty set, but it is actually -- A * clean (all its buffers are clean).A A This happens if the -- A * buffers were written out directly, with submit_bh(). ext3 -- A * will do this, as well as the blockdev mapping. -- A * try_to_release_page() will discover that cleanness and will -- A * drop the buffers and mark the page clean - it can be freed. -- A * -- A * Rarely, pages can have buffers and no ->mapping.A A These are -- A * the pages which were not successfully invalidated in -- A * truncate_complete_page().A A We try to drop those buffers here -- A * and if that worked, and the page is no longer mapped into -- A * process address space (page_count == 1) it can be freed. -- A * Otherwise, leave the page on the LRU so it is swappable. -- A */ +- * If the page has buffers, try to free the buffer mappings +- * associated with this page. If we succeed we try to free +- * the page as well. +- * +- * We do this even if the page is PageDirty(). +- * try_to_release_page() does not perform I/O, but it is +- * possible for a page to have PageDirty set, but it is actually +- * clean (all its buffers are clean). This happens if the +- * buffers were written out directly, with submit_bh(). ext3 +- * will do this, as well as the blockdev mapping. +- * try_to_release_page() will discover that cleanness and will +- * drop the buffers and mark the page clean - it can be freed. +- * +- * Rarely, pages can have buffers and no ->mapping. These are +- * the pages which were not successfully invalidated in +- * truncate_complete_page(). We try to drop those buffers here +- * and if that worked, and the page is no longer mapped into +- * process address space (page_count == 1) it can be freed. +- * Otherwise, leave the page on the LRU so it is swappable. +- */ - if (page_has_private(page)) { - if (!try_to_release_page(page, sc->gfp_mask)) - goto activate_locked; @@ -451,34 +451,34 @@ A } - goto free_it; - else { - /* -- A * rare race with speculative reference. -- A * the speculative reference will free -- A * this page shortly, so we may -- A * increment nr_reclaimed here (and -- A * leave it off the LRU). -- A */ +- * rare race with speculative reference. +- * the speculative reference will free +- * this page shortly, so we may +- * increment nr_reclaimed here (and +- * leave it off the LRU). +- */ - nr_reclaimed++; - continue; - } + if (!add_to_swap(page, page_list)) { + pg_dispose = PG_ACTIVATE_LOCKED; + goto finish; -A } + } + lazyfree = true; + may_enter_fs = 1; -A } -A + } + -lazyfree: - if (!mapping || !__remove_mapping(mapping, page, true)) - goto keep_locked; - - /* -- A * At this point, we have no other references and there is -- A * no way to pick any more up (removed from LRU, removed -- A * from pagecache). Can use non-atomic bitops now (and -- A * we obviously don't have to worry about waking up a process -- A * waiting on the page lock, because there are no references. -- A */ +- * At this point, we have no other references and there is +- * no way to pick any more up (removed from LRU, removed +- * from pagecache). Can use non-atomic bitops now (and +- * we obviously don't have to worry about waking up a process +- * waiting on the page lock, because there are no references. +- */ - __ClearPageLocked(page); -free_it: - if (ret == SWAP_LZFREE) @@ -491,11 +491,11 @@ A +finish: + pg_finish(page, pg_dispose, swap_ret, &nr_reclaimed, + &pgactivate, &ret_pages, &free_pages); -A + - /* -- A * Is there need to periodically free_page_list? It would -- A * appear not as the counts should be low -- A */ +- * Is there need to periodically free_page_list? It would +- * appear not as the counts should be low +- */ - list_add(&page->lru, &free_pages); - continue; - @@ -518,14 +518,8 @@ A -keep: - list_add(&page->lru, &ret_pages); - VM_BUG_ON_PAGE(PageLRU(page) || PageUnevictable(page), page); -A } -A -A mem_cgroup_uncharge_list(&free_pages); ---A + } + + mem_cgroup_uncharge_list(&free_pages); +-- 2.5.5 - --- -To unsubscribe, send a message with 'unsubscribe linux-mm' in -the body to majordomo@kvack.org. For more info on Linux MM, -see: http://www.linux-mm.org/ . -Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> diff --git a/a/content_digest b/N1/content_digest index 201283f..25beef5 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -24,9 +24,9 @@ "It paves the way to group similar pages together and batch\n" "process them in the page out path for better efficiency.\n" "\n" - "After we have scanned a page in shrink_page_list andA \n" - "completed paging, the final disposition and cleanA \n" - "up of the page is consolidated into pg_finish.A A T\n" + "After we have scanned a page in shrink_page_list and\302\240\n" + "completed paging, the final disposition and clean\302\240\n" + "up of the page is consolidated into pg_finish.\302\240\302\240T\n" "he designated disposition of the page from page scanning\n" "in shrink_page_list is marked with one of the designation in pg_result.\n" "\n" @@ -39,17 +39,17 @@ "\n" "Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>\n" "---\n" - "A mm/vmscan.c | 429 ++++++++++++++++++++++++++++++++++--------------------------\n" - "A 1 file changed, 246 insertions(+), 183 deletions(-)\n" + "\302\240mm/vmscan.c | 429 ++++++++++++++++++++++++++++++++++--------------------------\n" + "\302\2401 file changed, 246 insertions(+), 183 deletions(-)\n" "\n" "diff --git a/mm/vmscan.c b/mm/vmscan.c\n" "index 142cb61..0eb3c67 100644\n" "--- a/mm/vmscan.c\n" "+++ b/mm/vmscan.c\n" "@@ -873,6 +873,216 @@ static void page_check_dirty_writeback(struct page *page,\n" - "A \t\tmapping->a_ops->is_dirty_writeback(page, dirty, writeback);\n" - "A }\n" - "A \n" + "\302\240\t\tmapping->a_ops->is_dirty_writeback(page, dirty, writeback);\n" + "\302\240}\n" + "\302\240\n" "+enum pg_result {\n" "+\tPG_SPECULATIVE_REF,\n" "+\tPG_FREE,\n" @@ -68,17 +68,17 @@ "+\tenum page_references references,\n" "+\tbool may_enter_fs,\n" "+\tbool lazyfree,\n" - "+\tintA A *swap_ret,\n" + "+\tint\302\240\302\240*swap_ret,\n" "+\tstruct page *page)\n" "+{\n" "+\tstruct address_space *mapping;\n" "+\n" - "+\tmapping =A A page_mapping(page);\n" + "+\tmapping =\302\240\302\240page_mapping(page);\n" "+\n" "+\t/*\n" - "+\tA * The page is mapped into the page tables of one or more\n" - "+\tA * processes. Try to unmap it here.\n" - "+\tA */\n" + "+\t\302\240* The page is mapped into the page tables of one or more\n" + "+\t\302\240* processes. Try to unmap it here.\n" + "+\t\302\240*/\n" "+\tif (page_mapped(page) && mapping) {\n" "+\t\tswitch (*swap_ret = try_to_unmap(page, lazyfree ?\n" "+\t\t\t(ttu_flags | TTU_BATCH_FLUSH | TTU_LZFREE) :\n" @@ -98,19 +98,19 @@ "+\n" "+\tif (PageDirty(page)) {\n" "+\t\t/*\n" - "+\t\tA * Only kswapd can writeback filesystem pages to\n" - "+\t\tA * avoid risk of stack overflow but only writeback\n" - "+\t\tA * if many dirty pages have been encountered.\n" - "+\t\tA */\n" + "+\t\t\302\240* Only kswapd can writeback filesystem pages to\n" + "+\t\t\302\240* avoid risk of stack overflow but only writeback\n" + "+\t\t\302\240* if many dirty pages have been encountered.\n" + "+\t\t\302\240*/\n" "+\t\tif (page_is_file_cache(page) &&\n" "+\t\t\t\t(!current_is_kswapd() ||\n" - "+\t\t\t\tA !test_bit(ZONE_DIRTY, &zone->flags))) {\n" + "+\t\t\t\t\302\240!test_bit(ZONE_DIRTY, &zone->flags))) {\n" "+\t\t\t/*\n" - "+\t\t\tA * Immediately reclaim when written back.\n" - "+\t\t\tA * Similar in principal to deactivate_page()\n" - "+\t\t\tA * except we already have the page isolated\n" - "+\t\t\tA * and know it's dirty\n" - "+\t\t\tA */\n" + "+\t\t\t\302\240* Immediately reclaim when written back.\n" + "+\t\t\t\302\240* Similar in principal to deactivate_page()\n" + "+\t\t\t\302\240* except we already have the page isolated\n" + "+\t\t\t\302\240* and know it's dirty\n" + "+\t\t\t\302\240*/\n" "+\t\t\tinc_zone_page_state(page, NR_VMSCAN_IMMEDIATE);\n" "+\t\t\tSetPageReclaim(page);\n" "+\n" @@ -125,10 +125,10 @@ "+\t\t\treturn PG_KEEP_LOCKED;\n" "+\n" "+\t\t/*\n" - "+\t\tA * Page is dirty. Flush the TLB if a writable entry\n" - "+\t\tA * potentially exists to avoid CPU writes after IO\n" - "+\t\tA * starts and then write it out here.\n" - "+\t\tA */\n" + "+\t\t\302\240* Page is dirty. Flush the TLB if a writable entry\n" + "+\t\t\302\240* potentially exists to avoid CPU writes after IO\n" + "+\t\t\302\240* starts and then write it out here.\n" + "+\t\t\302\240*/\n" "+\t\ttry_to_unmap_flush_dirty();\n" "+\t\tswitch (pageout(page, mapping, sc)) {\n" "+\t\tcase PAGE_KEEP:\n" @@ -142,9 +142,9 @@ "+\t\t\t\treturn PG_KEEP;\n" "+\n" "+\t\t\t/*\n" - "+\t\t\tA * A synchronous write - probably a ramdisk.A A Go\n" - "+\t\t\tA * ahead and try to reclaim the page.\n" - "+\t\t\tA */\n" + "+\t\t\t\302\240* A synchronous write - probably a ramdisk.\302\240\302\240Go\n" + "+\t\t\t\302\240* ahead and try to reclaim the page.\n" + "+\t\t\t\302\240*/\n" "+\t\t\tif (!trylock_page(page))\n" "+\t\t\t\treturn PG_KEEP;\n" "+\t\t\tif (PageDirty(page) || PageWriteback(page))\n" @@ -156,26 +156,26 @@ "+\t}\n" "+\n" "+\t/*\n" - "+\tA * If the page has buffers, try to free the buffer mappings\n" - "+\tA * associated with this page. If we succeed we try to free\n" - "+\tA * the page as well.\n" - "+\tA *\n" - "+\tA * We do this even if the page is PageDirty().\n" - "+\tA * try_to_release_page() does not perform I/O, but it is\n" - "+\tA * possible for a page to have PageDirty set, but it is actually\n" - "+\tA * clean (all its buffers are clean).A A This happens if the\n" - "+\tA * buffers were written out directly, with submit_bh(). ext3\n" - "+\tA * will do this, as well as the blockdev mapping.\n" - "+\tA * try_to_release_page() will discover that cleanness and will\n" - "+\tA * drop the buffers and mark the page clean - it can be freed.\n" - "+\tA *\n" - "+\tA * Rarely, pages can have buffers and no ->mapping.A A These are\n" - "+\tA * the pages which were not successfully invalidated in\n" - "+\tA * truncate_complete_page().A A We try to drop those buffers here\n" - "+\tA * and if that worked, and the page is no longer mapped into\n" - "+\tA * process address space (page_count == 1) it can be freed.\n" - "+\tA * Otherwise, leave the page on the LRU so it is swappable.\n" - "+\tA */\n" + "+\t\302\240* If the page has buffers, try to free the buffer mappings\n" + "+\t\302\240* associated with this page. If we succeed we try to free\n" + "+\t\302\240* the page as well.\n" + "+\t\302\240*\n" + "+\t\302\240* We do this even if the page is PageDirty().\n" + "+\t\302\240* try_to_release_page() does not perform I/O, but it is\n" + "+\t\302\240* possible for a page to have PageDirty set, but it is actually\n" + "+\t\302\240* clean (all its buffers are clean).\302\240\302\240This happens if the\n" + "+\t\302\240* buffers were written out directly, with submit_bh(). ext3\n" + "+\t\302\240* will do this, as well as the blockdev mapping.\n" + "+\t\302\240* try_to_release_page() will discover that cleanness and will\n" + "+\t\302\240* drop the buffers and mark the page clean - it can be freed.\n" + "+\t\302\240*\n" + "+\t\302\240* Rarely, pages can have buffers and no ->mapping.\302\240\302\240These are\n" + "+\t\302\240* the pages which were not successfully invalidated in\n" + "+\t\302\240* truncate_complete_page().\302\240\302\240We try to drop those buffers here\n" + "+\t\302\240* and if that worked, and the page is no longer mapped into\n" + "+\t\302\240* process address space (page_count == 1) it can be freed.\n" + "+\t\302\240* Otherwise, leave the page on the LRU so it is swappable.\n" + "+\t\302\240*/\n" "+\tif (page_has_private(page)) {\n" "+\t\tif (!try_to_release_page(page, sc->gfp_mask))\n" "+\t\t\treturn PG_ACTIVATE_LOCKED;\n" @@ -185,12 +185,12 @@ "+\t\t\t\treturn PG_FREE;\n" "+\t\t\telse {\n" "+\t\t\t\t/*\n" - "+\t\t\t\tA * rare race with speculative reference.\n" - "+\t\t\t\tA * the speculative reference will free\n" - "+\t\t\t\tA * this page shortly, so we may\n" - "+\t\t\t\tA * increment nr_reclaimed (and\n" - "+\t\t\t\tA * leave it off the LRU).\n" - "+\t\t\t\tA */\n" + "+\t\t\t\t\302\240* rare race with speculative reference.\n" + "+\t\t\t\t\302\240* the speculative reference will free\n" + "+\t\t\t\t\302\240* this page shortly, so we may\n" + "+\t\t\t\t\302\240* increment nr_reclaimed (and\n" + "+\t\t\t\t\302\240* leave it off the LRU).\n" + "+\t\t\t\t\302\240*/\n" "+\t\t\t\treturn PG_SPECULATIVE_REF;\n" "+\t\t\t}\n" "+\t\t}\n" @@ -201,12 +201,12 @@ "+\t\treturn PG_KEEP_LOCKED;\n" "+\n" "+\t/*\n" - "+\tA * At this point, we have no other references and there is\n" - "+\tA * no way to pick any more up (removed from LRU, removed\n" - "+\tA * from pagecache). Can use non-atomic bitops now (and\n" - "+\tA * we obviously don't have to worry about waking up a process\n" - "+\tA * waiting on the page lock, because there are no references.\n" - "+\tA */\n" + "+\t\302\240* At this point, we have no other references and there is\n" + "+\t\302\240* no way to pick any more up (removed from LRU, removed\n" + "+\t\302\240* from pagecache). Can use non-atomic bitops now (and\n" + "+\t\302\240* we obviously don't have to worry about waking up a process\n" + "+\t\302\240* waiting on the page lock, because there are no references.\n" + "+\t\302\240*/\n" "+\t__ClearPageLocked(page);\n" "+\treturn PG_FREE;\n" "+}\n" @@ -229,9 +229,9 @@ "+\n" "+\t\t++*nr_reclaimed;\n" "+\t\t/*\n" - "+\t\tA * Is there need to periodically free_page_list? It would\n" - "+\t\tA * appear not as the counts should be low\n" - "+\t\tA */\n" + "+\t\t\302\240* Is there need to periodically free_page_list? It would\n" + "+\t\t\302\240* appear not as the counts should be low\n" + "+\t\t\302\240*/\n" "+\t\tlist_add(&page->lru, free_pages);\n" "+\t\treturn;\n" "+\tcase PG_MLOCKED:\n" @@ -260,90 +260,90 @@ "+\t}\n" "+}\n" "+\n" - "A /*\n" - "A * shrink_page_list() returns the number of reclaimed pages\n" - "A */\n" + "\302\240/*\n" + "\302\240 * shrink_page_list() returns the number of reclaimed pages\n" + "\302\240 */\n" "@@ -904,28 +1114,35 @@ static unsigned long shrink_page_list(struct list_head *page_list,\n" - "A \t\tstruct page *page;\n" - "A \t\tint may_enter_fs;\n" - "A \t\tenum page_references references = PAGEREF_RECLAIM_CLEAN;\n" + "\302\240\t\tstruct page *page;\n" + "\302\240\t\tint may_enter_fs;\n" + "\302\240\t\tenum page_references references = PAGEREF_RECLAIM_CLEAN;\n" "+\t\tenum pg_result pg_dispose = PG_UNKNOWN;\n" - "A \t\tbool dirty, writeback;\n" - "A \t\tbool lazyfree = false;\n" + "\302\240\t\tbool dirty, writeback;\n" + "\302\240\t\tbool lazyfree = false;\n" "-\t\tint ret = SWAP_SUCCESS;\n" "+\t\tint swap_ret = SWAP_SUCCESS;\n" - "A \n" - "A \t\tcond_resched();\n" - "A \n" - "A \t\tpage = lru_to_page(page_list);\n" - "A \t\tlist_del(&page->lru);\n" - "A \n" + "\302\240\n" + "\302\240\t\tcond_resched();\n" + "\302\240\n" + "\302\240\t\tpage = lru_to_page(page_list);\n" + "\302\240\t\tlist_del(&page->lru);\n" + "\302\240\n" "-\t\tif (!trylock_page(page))\n" "-\t\t\tgoto keep;\n" "+\t\tif (!trylock_page(page)) {\n" "+\t\t\tpg_dispose = PG_KEEP;\n" "+\t\t\tgoto finish;\n" "+\t\t}\n" - "A \n" - "A \t\tVM_BUG_ON_PAGE(PageActive(page), page);\n" - "A \t\tVM_BUG_ON_PAGE(page_zone(page) != zone, page);\n" - "A \n" - "A \t\tsc->nr_scanned++;\n" - "A \n" + "\302\240\n" + "\302\240\t\tVM_BUG_ON_PAGE(PageActive(page), page);\n" + "\302\240\t\tVM_BUG_ON_PAGE(page_zone(page) != zone, page);\n" + "\302\240\n" + "\302\240\t\tsc->nr_scanned++;\n" + "\302\240\n" "-\t\tif (unlikely(!page_evictable(page)))\n" "-\t\t\tgoto cull_mlocked;\n" "+\t\tif (unlikely(!page_evictable(page))) {\n" "+\t\t\tpg_dispose = PG_MLOCKED;\n" "+\t\t\tgoto finish;\n" "+\t\t}\n" - "A \n" + "\302\240\n" "-\t\tif (!sc->may_unmap && page_mapped(page))\n" "-\t\t\tgoto keep_locked;\n" "+\t\tif (!sc->may_unmap && page_mapped(page)) {\n" "+\t\t\tpg_dispose = PG_KEEP_LOCKED;\n" "+\t\t\tgoto finish;\n" "+\t\t}\n" - "A \n" - "A \t\t/* Double the slab pressure for mapped and swapcache pages */\n" - "A \t\tif (page_mapped(page) || PageSwapCache(page))\n" + "\302\240\n" + "\302\240\t\t/* Double the slab pressure for mapped and swapcache pages */\n" + "\302\240\t\tif (page_mapped(page) || PageSwapCache(page))\n" "@@ -998,7 +1215,8 @@ static unsigned long shrink_page_list(struct list_head *page_list,\n" - "A \t\t\tA A A A PageReclaim(page) &&\n" - "A \t\t\tA A A A test_bit(ZONE_WRITEBACK, &zone->flags)) {\n" - "A \t\t\t\tnr_immediate++;\n" + "\302\240\t\t\t\302\240\302\240\302\240\302\240PageReclaim(page) &&\n" + "\302\240\t\t\t\302\240\302\240\302\240\302\240test_bit(ZONE_WRITEBACK, &zone->flags)) {\n" + "\302\240\t\t\t\tnr_immediate++;\n" "-\t\t\t\tgoto keep_locked;\n" "+\t\t\t\tpg_dispose = PG_KEEP_LOCKED;\n" "+\t\t\t\tgoto finish;\n" - "A \n" - "A \t\t\t/* Case 2 above */\n" - "A \t\t\t} else if (sane_reclaim(sc) ||\n" + "\302\240\n" + "\302\240\t\t\t/* Case 2 above */\n" + "\302\240\t\t\t} else if (sane_reclaim(sc) ||\n" "@@ -1016,7 +1234,8 @@ static unsigned long shrink_page_list(struct list_head *page_list,\n" - "A \t\t\t\tA */\n" - "A \t\t\t\tSetPageReclaim(page);\n" - "A \t\t\t\tnr_writeback++;\n" + "\302\240\t\t\t\t\302\240*/\n" + "\302\240\t\t\t\tSetPageReclaim(page);\n" + "\302\240\t\t\t\tnr_writeback++;\n" "-\t\t\t\tgoto keep_locked;\n" "+\t\t\t\tpg_dispose = PG_KEEP_LOCKED;\n" "+\t\t\t\tgoto finish;\n" - "A \n" - "A \t\t\t/* Case 3 above */\n" - "A \t\t\t} else {\n" + "\302\240\n" + "\302\240\t\t\t/* Case 3 above */\n" + "\302\240\t\t\t} else {\n" "@@ -1033,9 +1252,11 @@ static unsigned long shrink_page_list(struct list_head *page_list,\n" - "A \n" - "A \t\tswitch (references) {\n" - "A \t\tcase PAGEREF_ACTIVATE:\n" + "\302\240\n" + "\302\240\t\tswitch (references) {\n" + "\302\240\t\tcase PAGEREF_ACTIVATE:\n" "-\t\t\tgoto activate_locked;\n" "+\t\t\tpg_dispose = PG_ACTIVATE_LOCKED;\n" "+\t\t\tgoto finish;\n" - "A \t\tcase PAGEREF_KEEP:\n" + "\302\240\t\tcase PAGEREF_KEEP:\n" "-\t\t\tgoto keep_locked;\n" "+\t\t\tpg_dispose = PG_KEEP_LOCKED;\n" "+\t\t\tgoto finish;\n" - "A \t\tcase PAGEREF_RECLAIM:\n" - "A \t\tcase PAGEREF_RECLAIM_CLEAN:\n" - "A \t\t\t; /* try to reclaim the page below */\n" + "\302\240\t\tcase PAGEREF_RECLAIM:\n" + "\302\240\t\tcase PAGEREF_RECLAIM_CLEAN:\n" + "\302\240\t\t\t; /* try to reclaim the page below */\n" "@@ -1046,183 +1267,25 @@ static unsigned long shrink_page_list(struct list_head *page_list,\n" - "A \t\tA * Try to allocate it some swap space here.\n" - "A \t\tA */\n" - "A \t\tif (PageAnon(page) && !PageSwapCache(page)) {\n" + "\302\240\t\t\302\240* Try to allocate it some swap space here.\n" + "\302\240\t\t\302\240*/\n" + "\302\240\t\tif (PageAnon(page) && !PageSwapCache(page)) {\n" "-\t\t\tif (!(sc->gfp_mask & __GFP_IO))\n" "-\t\t\t\tgoto keep_locked;\n" "-\t\t\tif (!add_to_swap(page, page_list))\n" @@ -356,9 +356,9 @@ "-\t\t}\n" "-\n" "-\t\t/*\n" - "-\t\tA * The page is mapped into the page tables of one or more\n" - "-\t\tA * processes. Try to unmap it here.\n" - "-\t\tA */\n" + "-\t\t\302\240* The page is mapped into the page tables of one or more\n" + "-\t\t\302\240* processes. Try to unmap it here.\n" + "-\t\t\302\240*/\n" "-\t\tif (page_mapped(page) && mapping) {\n" "-\t\t\tswitch (ret = try_to_unmap(page, lazyfree ?\n" "-\t\t\t\t(ttu_flags | TTU_BATCH_FLUSH | TTU_LZFREE) :\n" @@ -376,24 +376,24 @@ "+\t\t\tif (!(sc->gfp_mask & __GFP_IO)) {\n" "+\t\t\t\tpg_dispose = PG_KEEP_LOCKED;\n" "+\t\t\t\tgoto finish;\n" - "A \t\t\t}\n" + "\302\240\t\t\t}\n" "-\t\t}\n" "-\n" "-\t\tif (PageDirty(page)) {\n" "-\t\t\t/*\n" - "-\t\t\tA * Only kswapd can writeback filesystem pages to\n" - "-\t\t\tA * avoid risk of stack overflow but only writeback\n" - "-\t\t\tA * if many dirty pages have been encountered.\n" - "-\t\t\tA */\n" + "-\t\t\t\302\240* Only kswapd can writeback filesystem pages to\n" + "-\t\t\t\302\240* avoid risk of stack overflow but only writeback\n" + "-\t\t\t\302\240* if many dirty pages have been encountered.\n" + "-\t\t\t\302\240*/\n" "-\t\t\tif (page_is_file_cache(page) &&\n" "-\t\t\t\t\t(!current_is_kswapd() ||\n" - "-\t\t\t\t\tA !test_bit(ZONE_DIRTY, &zone->flags))) {\n" + "-\t\t\t\t\t\302\240!test_bit(ZONE_DIRTY, &zone->flags))) {\n" "-\t\t\t\t/*\n" - "-\t\t\t\tA * Immediately reclaim when written back.\n" - "-\t\t\t\tA * Similar in principal to deactivate_page()\n" - "-\t\t\t\tA * except we already have the page isolated\n" - "-\t\t\t\tA * and know it's dirty\n" - "-\t\t\t\tA */\n" + "-\t\t\t\t\302\240* Immediately reclaim when written back.\n" + "-\t\t\t\t\302\240* Similar in principal to deactivate_page()\n" + "-\t\t\t\t\302\240* except we already have the page isolated\n" + "-\t\t\t\t\302\240* and know it's dirty\n" + "-\t\t\t\t\302\240*/\n" "-\t\t\t\tinc_zone_page_state(page, NR_VMSCAN_IMMEDIATE);\n" "-\t\t\t\tSetPageReclaim(page);\n" "-\n" @@ -408,10 +408,10 @@ "-\t\t\t\tgoto keep_locked;\n" "-\n" "-\t\t\t/*\n" - "-\t\t\tA * Page is dirty. Flush the TLB if a writable entry\n" - "-\t\t\tA * potentially exists to avoid CPU writes after IO\n" - "-\t\t\tA * starts and then write it out here.\n" - "-\t\t\tA */\n" + "-\t\t\t\302\240* Page is dirty. Flush the TLB if a writable entry\n" + "-\t\t\t\302\240* potentially exists to avoid CPU writes after IO\n" + "-\t\t\t\302\240* starts and then write it out here.\n" + "-\t\t\t\302\240*/\n" "-\t\t\ttry_to_unmap_flush_dirty();\n" "-\t\t\tswitch (pageout(page, mapping, sc)) {\n" "-\t\t\tcase PAGE_KEEP:\n" @@ -425,9 +425,9 @@ "-\t\t\t\t\tgoto keep;\n" "-\n" "-\t\t\t\t/*\n" - "-\t\t\t\tA * A synchronous write - probably a ramdisk.A A Go\n" - "-\t\t\t\tA * ahead and try to reclaim the page.\n" - "-\t\t\t\tA */\n" + "-\t\t\t\t\302\240* A synchronous write - probably a ramdisk.\302\240\302\240Go\n" + "-\t\t\t\t\302\240* ahead and try to reclaim the page.\n" + "-\t\t\t\t\302\240*/\n" "-\t\t\t\tif (!trylock_page(page))\n" "-\t\t\t\t\tgoto keep;\n" "-\t\t\t\tif (PageDirty(page) || PageWriteback(page))\n" @@ -439,26 +439,26 @@ "-\t\t}\n" "-\n" "-\t\t/*\n" - "-\t\tA * If the page has buffers, try to free the buffer mappings\n" - "-\t\tA * associated with this page. If we succeed we try to free\n" - "-\t\tA * the page as well.\n" - "-\t\tA *\n" - "-\t\tA * We do this even if the page is PageDirty().\n" - "-\t\tA * try_to_release_page() does not perform I/O, but it is\n" - "-\t\tA * possible for a page to have PageDirty set, but it is actually\n" - "-\t\tA * clean (all its buffers are clean).A A This happens if the\n" - "-\t\tA * buffers were written out directly, with submit_bh(). ext3\n" - "-\t\tA * will do this, as well as the blockdev mapping.\n" - "-\t\tA * try_to_release_page() will discover that cleanness and will\n" - "-\t\tA * drop the buffers and mark the page clean - it can be freed.\n" - "-\t\tA *\n" - "-\t\tA * Rarely, pages can have buffers and no ->mapping.A A These are\n" - "-\t\tA * the pages which were not successfully invalidated in\n" - "-\t\tA * truncate_complete_page().A A We try to drop those buffers here\n" - "-\t\tA * and if that worked, and the page is no longer mapped into\n" - "-\t\tA * process address space (page_count == 1) it can be freed.\n" - "-\t\tA * Otherwise, leave the page on the LRU so it is swappable.\n" - "-\t\tA */\n" + "-\t\t\302\240* If the page has buffers, try to free the buffer mappings\n" + "-\t\t\302\240* associated with this page. If we succeed we try to free\n" + "-\t\t\302\240* the page as well.\n" + "-\t\t\302\240*\n" + "-\t\t\302\240* We do this even if the page is PageDirty().\n" + "-\t\t\302\240* try_to_release_page() does not perform I/O, but it is\n" + "-\t\t\302\240* possible for a page to have PageDirty set, but it is actually\n" + "-\t\t\302\240* clean (all its buffers are clean).\302\240\302\240This happens if the\n" + "-\t\t\302\240* buffers were written out directly, with submit_bh(). ext3\n" + "-\t\t\302\240* will do this, as well as the blockdev mapping.\n" + "-\t\t\302\240* try_to_release_page() will discover that cleanness and will\n" + "-\t\t\302\240* drop the buffers and mark the page clean - it can be freed.\n" + "-\t\t\302\240*\n" + "-\t\t\302\240* Rarely, pages can have buffers and no ->mapping.\302\240\302\240These are\n" + "-\t\t\302\240* the pages which were not successfully invalidated in\n" + "-\t\t\302\240* truncate_complete_page().\302\240\302\240We try to drop those buffers here\n" + "-\t\t\302\240* and if that worked, and the page is no longer mapped into\n" + "-\t\t\302\240* process address space (page_count == 1) it can be freed.\n" + "-\t\t\302\240* Otherwise, leave the page on the LRU so it is swappable.\n" + "-\t\t\302\240*/\n" "-\t\tif (page_has_private(page)) {\n" "-\t\t\tif (!try_to_release_page(page, sc->gfp_mask))\n" "-\t\t\t\tgoto activate_locked;\n" @@ -468,34 +468,34 @@ "-\t\t\t\t\tgoto free_it;\n" "-\t\t\t\telse {\n" "-\t\t\t\t\t/*\n" - "-\t\t\t\t\tA * rare race with speculative reference.\n" - "-\t\t\t\t\tA * the speculative reference will free\n" - "-\t\t\t\t\tA * this page shortly, so we may\n" - "-\t\t\t\t\tA * increment nr_reclaimed here (and\n" - "-\t\t\t\t\tA * leave it off the LRU).\n" - "-\t\t\t\t\tA */\n" + "-\t\t\t\t\t\302\240* rare race with speculative reference.\n" + "-\t\t\t\t\t\302\240* the speculative reference will free\n" + "-\t\t\t\t\t\302\240* this page shortly, so we may\n" + "-\t\t\t\t\t\302\240* increment nr_reclaimed here (and\n" + "-\t\t\t\t\t\302\240* leave it off the LRU).\n" + "-\t\t\t\t\t\302\240*/\n" "-\t\t\t\t\tnr_reclaimed++;\n" "-\t\t\t\t\tcontinue;\n" "-\t\t\t\t}\n" "+\t\t\tif (!add_to_swap(page, page_list)) {\n" "+\t\t\t\tpg_dispose = PG_ACTIVATE_LOCKED;\n" "+\t\t\t\tgoto finish;\n" - "A \t\t\t}\n" + "\302\240\t\t\t}\n" "+\t\t\tlazyfree = true;\n" "+\t\t\tmay_enter_fs = 1;\n" - "A \t\t}\n" - "A \n" + "\302\240\t\t}\n" + "\302\240\n" "-lazyfree:\n" "-\t\tif (!mapping || !__remove_mapping(mapping, page, true))\n" "-\t\t\tgoto keep_locked;\n" "-\n" "-\t\t/*\n" - "-\t\tA * At this point, we have no other references and there is\n" - "-\t\tA * no way to pick any more up (removed from LRU, removed\n" - "-\t\tA * from pagecache). Can use non-atomic bitops now (and\n" - "-\t\tA * we obviously don't have to worry about waking up a process\n" - "-\t\tA * waiting on the page lock, because there are no references.\n" - "-\t\tA */\n" + "-\t\t\302\240* At this point, we have no other references and there is\n" + "-\t\t\302\240* no way to pick any more up (removed from LRU, removed\n" + "-\t\t\302\240* from pagecache). Can use non-atomic bitops now (and\n" + "-\t\t\302\240* we obviously don't have to worry about waking up a process\n" + "-\t\t\302\240* waiting on the page lock, because there are no references.\n" + "-\t\t\302\240*/\n" "-\t\t__ClearPageLocked(page);\n" "-free_it:\n" "-\t\tif (ret == SWAP_LZFREE)\n" @@ -508,11 +508,11 @@ "+finish:\n" "+\t\tpg_finish(page, pg_dispose, swap_ret, &nr_reclaimed,\n" "+\t\t\t\t&pgactivate, &ret_pages, &free_pages);\n" - "A \n" + "\302\240\n" "-\t\t/*\n" - "-\t\tA * Is there need to periodically free_page_list? It would\n" - "-\t\tA * appear not as the counts should be low\n" - "-\t\tA */\n" + "-\t\t\302\240* Is there need to periodically free_page_list? It would\n" + "-\t\t\302\240* appear not as the counts should be low\n" + "-\t\t\302\240*/\n" "-\t\tlist_add(&page->lru, &free_pages);\n" "-\t\tcontinue;\n" "-\n" @@ -535,16 +535,10 @@ "-keep:\n" "-\t\tlist_add(&page->lru, &ret_pages);\n" "-\t\tVM_BUG_ON_PAGE(PageLRU(page) || PageUnevictable(page), page);\n" - "A \t}\n" - "A \n" - "A \tmem_cgroup_uncharge_list(&free_pages);\n" - "--A \n" - "2.5.5\n" - "\n" - "--\n" - "To unsubscribe, send a message with 'unsubscribe linux-mm' in\n" - "the body to majordomo@kvack.org. For more info on Linux MM,\n" - "see: http://www.linux-mm.org/ .\n" - "Don't email: <a href=mailto:\"dont@kvack.org\"> email@kvack.org </a>" + "\302\240\t}\n" + "\302\240\n" + "\302\240\tmem_cgroup_uncharge_list(&free_pages);\n" + "--\302\240\n" + 2.5.5 -37543f4071cb0cf26c80ed97cefd5674405c16d58d8f7c2b36fe7222ff4761d1 +dc2b394648f4fb6a5d53a0f9a0bd00f1240fd45c2bf3e03d871112dc322a0649
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.