vmscan.c (32a331a72f3eec30f65fd929aeb4dfc514eca28f) | vmscan.c (1fe47c0beb2df2739b07b8e051425b6400abce5b) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds 4 * 5 * Swap reorganised 29.12.95, Stephen Tweedie. 6 * kswapd added: 7.1.96 sct 7 * Removed kswapd_ctl limits, and swap out as many pages as needed 8 * to bring the system back to freepages.high: 2.4.97, Rik van Riel. --- 2522 unchanged lines hidden (view full) --- 2531 spin_unlock_irq(&lruvec->lru_lock); 2532 2533 mem_cgroup_uncharge_list(&l_active); 2534 free_unref_page_list(&l_active); 2535 trace_mm_vmscan_lru_shrink_active(pgdat->node_id, nr_taken, nr_activate, 2536 nr_deactivate, nr_rotated, sc->priority, file); 2537} 2538 | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds 4 * 5 * Swap reorganised 29.12.95, Stephen Tweedie. 6 * kswapd added: 7.1.96 sct 7 * Removed kswapd_ctl limits, and swap out as many pages as needed 8 * to bring the system back to freepages.high: 2.4.97, Rik van Riel. --- 2522 unchanged lines hidden (view full) --- 2531 spin_unlock_irq(&lruvec->lru_lock); 2532 2533 mem_cgroup_uncharge_list(&l_active); 2534 free_unref_page_list(&l_active); 2535 trace_mm_vmscan_lru_shrink_active(pgdat->node_id, nr_taken, nr_activate, 2536 nr_deactivate, nr_rotated, sc->priority, file); 2537} 2538 |
2539unsigned long reclaim_pages(struct list_head *page_list) | 2539static unsigned int reclaim_page_list(struct list_head *page_list, 2540 struct pglist_data *pgdat) |
2540{ | 2541{ |
2541 int nid = NUMA_NO_NODE; 2542 unsigned int nr_reclaimed = 0; 2543 LIST_HEAD(node_page_list); | |
2544 struct reclaim_stat dummy_stat; | 2542 struct reclaim_stat dummy_stat; |
2545 struct page *page; 2546 unsigned int noreclaim_flag; | 2543 unsigned int nr_reclaimed; 2544 struct folio *folio; |
2547 struct scan_control sc = { 2548 .gfp_mask = GFP_KERNEL, 2549 .may_writepage = 1, 2550 .may_unmap = 1, 2551 .may_swap = 1, 2552 .no_demotion = 1, 2553 }; 2554 | 2545 struct scan_control sc = { 2546 .gfp_mask = GFP_KERNEL, 2547 .may_writepage = 1, 2548 .may_unmap = 1, 2549 .may_swap = 1, 2550 .no_demotion = 1, 2551 }; 2552 |
2553 nr_reclaimed = shrink_page_list(page_list, pgdat, &sc, &dummy_stat, false); 2554 while (!list_empty(page_list)) { 2555 folio = lru_to_folio(page_list); 2556 list_del(&folio->lru); 2557 folio_putback_lru(folio); 2558 } 2559 2560 return nr_reclaimed; 2561} 2562 2563unsigned long reclaim_pages(struct list_head *page_list) 2564{ 2565 int nid = NUMA_NO_NODE; 2566 unsigned int nr_reclaimed = 0; 2567 LIST_HEAD(node_page_list); 2568 struct page *page; 2569 unsigned int noreclaim_flag; 2570 |
|
2555 noreclaim_flag = memalloc_noreclaim_save(); 2556 2557 while (!list_empty(page_list)) { 2558 page = lru_to_page(page_list); 2559 if (nid == NUMA_NO_NODE) 2560 nid = page_to_nid(page); 2561 2562 if (nid == page_to_nid(page)) { 2563 ClearPageActive(page); 2564 list_move(&page->lru, &node_page_list); 2565 continue; 2566 } 2567 | 2571 noreclaim_flag = memalloc_noreclaim_save(); 2572 2573 while (!list_empty(page_list)) { 2574 page = lru_to_page(page_list); 2575 if (nid == NUMA_NO_NODE) 2576 nid = page_to_nid(page); 2577 2578 if (nid == page_to_nid(page)) { 2579 ClearPageActive(page); 2580 list_move(&page->lru, &node_page_list); 2581 continue; 2582 } 2583 |
2568 nr_reclaimed += shrink_page_list(&node_page_list, 2569 NODE_DATA(nid), 2570 &sc, &dummy_stat, false); 2571 while (!list_empty(&node_page_list)) { 2572 page = lru_to_page(&node_page_list); 2573 list_del(&page->lru); 2574 putback_lru_page(page); 2575 } 2576 | 2584 nr_reclaimed += reclaim_page_list(&node_page_list, NODE_DATA(nid)); |
2577 nid = NUMA_NO_NODE; 2578 } 2579 | 2585 nid = NUMA_NO_NODE; 2586 } 2587 |
2580 if (!list_empty(&node_page_list)) { 2581 nr_reclaimed += shrink_page_list(&node_page_list, 2582 NODE_DATA(nid), 2583 &sc, &dummy_stat, false); 2584 while (!list_empty(&node_page_list)) { 2585 page = lru_to_page(&node_page_list); 2586 list_del(&page->lru); 2587 putback_lru_page(page); 2588 } 2589 } | 2588 if (!list_empty(&node_page_list)) 2589 nr_reclaimed += reclaim_page_list(&node_page_list, NODE_DATA(nid)); |
2590 2591 memalloc_noreclaim_restore(noreclaim_flag); 2592 2593 return nr_reclaimed; 2594} 2595 2596static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan, 2597 struct lruvec *lruvec, struct scan_control *sc) --- 2237 unchanged lines hidden --- | 2590 2591 memalloc_noreclaim_restore(noreclaim_flag); 2592 2593 return nr_reclaimed; 2594} 2595 2596static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan, 2597 struct lruvec *lruvec, struct scan_control *sc) --- 2237 unchanged lines hidden --- |