vmscan.c (0139aa7b7fa12ceef095d99dc36606a5b10ab83a) vmscan.c (9d5e6a9f22311b00a20ff9b072760ad3e73f0d99)
1/*
2 * linux/mm/vmscan.c
3 *
4 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds
5 *
6 * Swap reorganised 29.12.95, Stephen Tweedie.
7 * kswapd added: 7.1.96 sct
8 * Removed kswapd_ctl limits, and swap out as many pages as needed

--- 1360 unchanged lines hidden (view full) ---

1369{
1370 struct list_head *src = &lruvec->lists[lru];
1371 unsigned long nr_taken = 0;
1372 unsigned long scan;
1373
1374 for (scan = 0; scan < nr_to_scan && nr_taken < nr_to_scan &&
1375 !list_empty(src); scan++) {
1376 struct page *page;
1/*
2 * linux/mm/vmscan.c
3 *
4 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds
5 *
6 * Swap reorganised 29.12.95, Stephen Tweedie.
7 * kswapd added: 7.1.96 sct
8 * Removed kswapd_ctl limits, and swap out as many pages as needed

--- 1360 unchanged lines hidden (view full) ---

1369{
1370 struct list_head *src = &lruvec->lists[lru];
1371 unsigned long nr_taken = 0;
1372 unsigned long scan;
1373
1374 for (scan = 0; scan < nr_to_scan && nr_taken < nr_to_scan &&
1375 !list_empty(src); scan++) {
1376 struct page *page;
1377 int nr_pages;
1378
1379 page = lru_to_page(src);
1380 prefetchw_prev_lru_page(page, src, flags);
1381
1382 VM_BUG_ON_PAGE(!PageLRU(page), page);
1383
1384 switch (__isolate_lru_page(page, mode)) {
1385 case 0:
1377
1378 page = lru_to_page(src);
1379 prefetchw_prev_lru_page(page, src, flags);
1380
1381 VM_BUG_ON_PAGE(!PageLRU(page), page);
1382
1383 switch (__isolate_lru_page(page, mode)) {
1384 case 0:
1386 nr_pages = hpage_nr_pages(page);
1387 mem_cgroup_update_lru_size(lruvec, lru, -nr_pages);
1385 nr_taken += hpage_nr_pages(page);
1388 list_move(&page->lru, dst);
1386 list_move(&page->lru, dst);
1389 nr_taken += nr_pages;
1390 break;
1391
1392 case -EBUSY:
1393 /* else it is being freed elsewhere */
1394 list_move(&page->lru, src);
1395 continue;
1396
1397 default:

--- 199 unchanged lines hidden (view full) ---

1597 if (!sc->may_writepage)
1598 isolate_mode |= ISOLATE_CLEAN;
1599
1600 spin_lock_irq(&zone->lru_lock);
1601
1602 nr_taken = isolate_lru_pages(nr_to_scan, lruvec, &page_list,
1603 &nr_scanned, sc, isolate_mode, lru);
1604
1387 break;
1388
1389 case -EBUSY:
1390 /* else it is being freed elsewhere */
1391 list_move(&page->lru, src);
1392 continue;
1393
1394 default:

--- 199 unchanged lines hidden (view full) ---

1594 if (!sc->may_writepage)
1595 isolate_mode |= ISOLATE_CLEAN;
1596
1597 spin_lock_irq(&zone->lru_lock);
1598
1599 nr_taken = isolate_lru_pages(nr_to_scan, lruvec, &page_list,
1600 &nr_scanned, sc, isolate_mode, lru);
1601
1605 __mod_zone_page_state(zone, NR_LRU_BASE + lru, -nr_taken);
1602 update_lru_size(lruvec, lru, -nr_taken);
1606 __mod_zone_page_state(zone, NR_ISOLATED_ANON + file, nr_taken);
1603 __mod_zone_page_state(zone, NR_ISOLATED_ANON + file, nr_taken);
1604 reclaim_stat->recent_scanned[file] += nr_taken;
1607
1608 if (global_reclaim(sc)) {
1609 __mod_zone_page_state(zone, NR_PAGES_SCANNED, nr_scanned);
1610 if (current_is_kswapd())
1611 __count_zone_vm_events(PGSCAN_KSWAPD, zone, nr_scanned);
1612 else
1613 __count_zone_vm_events(PGSCAN_DIRECT, zone, nr_scanned);
1614 }

--- 4 unchanged lines hidden (view full) ---

1619
1620 nr_reclaimed = shrink_page_list(&page_list, zone, sc, TTU_UNMAP,
1621 &nr_dirty, &nr_unqueued_dirty, &nr_congested,
1622 &nr_writeback, &nr_immediate,
1623 false);
1624
1625 spin_lock_irq(&zone->lru_lock);
1626
1605
1606 if (global_reclaim(sc)) {
1607 __mod_zone_page_state(zone, NR_PAGES_SCANNED, nr_scanned);
1608 if (current_is_kswapd())
1609 __count_zone_vm_events(PGSCAN_KSWAPD, zone, nr_scanned);
1610 else
1611 __count_zone_vm_events(PGSCAN_DIRECT, zone, nr_scanned);
1612 }

--- 4 unchanged lines hidden (view full) ---

1617
1618 nr_reclaimed = shrink_page_list(&page_list, zone, sc, TTU_UNMAP,
1619 &nr_dirty, &nr_unqueued_dirty, &nr_congested,
1620 &nr_writeback, &nr_immediate,
1621 false);
1622
1623 spin_lock_irq(&zone->lru_lock);
1624
1627 reclaim_stat->recent_scanned[file] += nr_taken;
1628
1629 if (global_reclaim(sc)) {
1630 if (current_is_kswapd())
1631 __count_zone_vm_events(PGSTEAL_KSWAPD, zone,
1632 nr_reclaimed);
1633 else
1634 __count_zone_vm_events(PGSTEAL_DIRECT, zone,
1635 nr_reclaimed);
1636 }

--- 100 unchanged lines hidden (view full) ---

1737 while (!list_empty(list)) {
1738 page = lru_to_page(list);
1739 lruvec = mem_cgroup_page_lruvec(page, zone);
1740
1741 VM_BUG_ON_PAGE(PageLRU(page), page);
1742 SetPageLRU(page);
1743
1744 nr_pages = hpage_nr_pages(page);
1625 if (global_reclaim(sc)) {
1626 if (current_is_kswapd())
1627 __count_zone_vm_events(PGSTEAL_KSWAPD, zone,
1628 nr_reclaimed);
1629 else
1630 __count_zone_vm_events(PGSTEAL_DIRECT, zone,
1631 nr_reclaimed);
1632 }

--- 100 unchanged lines hidden (view full) ---

1733 while (!list_empty(list)) {
1734 page = lru_to_page(list);
1735 lruvec = mem_cgroup_page_lruvec(page, zone);
1736
1737 VM_BUG_ON_PAGE(PageLRU(page), page);
1738 SetPageLRU(page);
1739
1740 nr_pages = hpage_nr_pages(page);
1745 mem_cgroup_update_lru_size(lruvec, lru, nr_pages);
1741 update_lru_size(lruvec, lru, nr_pages);
1746 list_move(&page->lru, &lruvec->lists[lru]);
1747 pgmoved += nr_pages;
1748
1749 if (put_page_testzero(page)) {
1750 __ClearPageLRU(page);
1751 __ClearPageActive(page);
1752 del_page_from_lru_list(page, lruvec, lru);
1753
1754 if (unlikely(PageCompound(page))) {
1755 spin_unlock_irq(&zone->lru_lock);
1756 mem_cgroup_uncharge(page);
1757 (*get_compound_page_dtor(page))(page);
1758 spin_lock_irq(&zone->lru_lock);
1759 } else
1760 list_add(&page->lru, pages_to_free);
1761 }
1762 }
1742 list_move(&page->lru, &lruvec->lists[lru]);
1743 pgmoved += nr_pages;
1744
1745 if (put_page_testzero(page)) {
1746 __ClearPageLRU(page);
1747 __ClearPageActive(page);
1748 del_page_from_lru_list(page, lruvec, lru);
1749
1750 if (unlikely(PageCompound(page))) {
1751 spin_unlock_irq(&zone->lru_lock);
1752 mem_cgroup_uncharge(page);
1753 (*get_compound_page_dtor(page))(page);
1754 spin_lock_irq(&zone->lru_lock);
1755 } else
1756 list_add(&page->lru, pages_to_free);
1757 }
1758 }
1763 __mod_zone_page_state(zone, NR_LRU_BASE + lru, pgmoved);
1759
1764 if (!is_active_lru(lru))
1765 __count_vm_events(PGDEACTIVATE, pgmoved);
1766}
1767
1768static void shrink_active_list(unsigned long nr_to_scan,
1769 struct lruvec *lruvec,
1770 struct scan_control *sc,
1771 enum lru_list lru)

--- 17 unchanged lines hidden (view full) ---

1789 isolate_mode |= ISOLATE_UNMAPPED;
1790 if (!sc->may_writepage)
1791 isolate_mode |= ISOLATE_CLEAN;
1792
1793 spin_lock_irq(&zone->lru_lock);
1794
1795 nr_taken = isolate_lru_pages(nr_to_scan, lruvec, &l_hold,
1796 &nr_scanned, sc, isolate_mode, lru);
1760 if (!is_active_lru(lru))
1761 __count_vm_events(PGDEACTIVATE, pgmoved);
1762}
1763
1764static void shrink_active_list(unsigned long nr_to_scan,
1765 struct lruvec *lruvec,
1766 struct scan_control *sc,
1767 enum lru_list lru)

--- 17 unchanged lines hidden (view full) ---

1785 isolate_mode |= ISOLATE_UNMAPPED;
1786 if (!sc->may_writepage)
1787 isolate_mode |= ISOLATE_CLEAN;
1788
1789 spin_lock_irq(&zone->lru_lock);
1790
1791 nr_taken = isolate_lru_pages(nr_to_scan, lruvec, &l_hold,
1792 &nr_scanned, sc, isolate_mode, lru);
1797 if (global_reclaim(sc))
1798 __mod_zone_page_state(zone, NR_PAGES_SCANNED, nr_scanned);
1799
1793
1794 update_lru_size(lruvec, lru, -nr_taken);
1795 __mod_zone_page_state(zone, NR_ISOLATED_ANON + file, nr_taken);
1800 reclaim_stat->recent_scanned[file] += nr_taken;
1801
1796 reclaim_stat->recent_scanned[file] += nr_taken;
1797
1798 if (global_reclaim(sc))
1799 __mod_zone_page_state(zone, NR_PAGES_SCANNED, nr_scanned);
1802 __count_zone_vm_events(PGREFILL, zone, nr_scanned);
1800 __count_zone_vm_events(PGREFILL, zone, nr_scanned);
1803 __mod_zone_page_state(zone, NR_LRU_BASE + lru, -nr_taken);
1804 __mod_zone_page_state(zone, NR_ISOLATED_ANON + file, nr_taken);
1801
1805 spin_unlock_irq(&zone->lru_lock);
1806
1807 while (!list_empty(&l_hold)) {
1808 cond_resched();
1809 page = lru_to_page(&l_hold);
1810 list_del(&page->lru);
1811
1812 if (unlikely(!page_evictable(page))) {

--- 2042 unchanged lines hidden ---
1802 spin_unlock_irq(&zone->lru_lock);
1803
1804 while (!list_empty(&l_hold)) {
1805 cond_resched();
1806 page = lru_to_page(&l_hold);
1807 list_del(&page->lru);
1808
1809 if (unlikely(!page_evictable(page))) {

--- 2042 unchanged lines hidden ---