diff options
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r-- | mm/vmscan.c | 27 |
1 files changed, 5 insertions, 22 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index 45711585684e..4046434046e6 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -70,13 +70,6 @@ struct scan_control { | |||
70 | 70 | ||
71 | int order; | 71 | int order; |
72 | 72 | ||
73 | /* | ||
74 | * Pages that have (or should have) IO pending. If we run into | ||
75 | * a lot of these, we're better off waiting a little for IO to | ||
76 | * finish rather than scanning more pages in the VM. | ||
77 | */ | ||
78 | int nr_io_pages; | ||
79 | |||
80 | /* Which cgroup do we reclaim from */ | 73 | /* Which cgroup do we reclaim from */ |
81 | struct mem_cgroup *mem_cgroup; | 74 | struct mem_cgroup *mem_cgroup; |
82 | 75 | ||
@@ -512,10 +505,8 @@ static unsigned long shrink_page_list(struct list_head *page_list, | |||
512 | */ | 505 | */ |
513 | if (sync_writeback == PAGEOUT_IO_SYNC && may_enter_fs) | 506 | if (sync_writeback == PAGEOUT_IO_SYNC && may_enter_fs) |
514 | wait_on_page_writeback(page); | 507 | wait_on_page_writeback(page); |
515 | else { | 508 | else |
516 | sc->nr_io_pages++; | ||
517 | goto keep_locked; | 509 | goto keep_locked; |
518 | } | ||
519 | } | 510 | } |
520 | 511 | ||
521 | referenced = page_referenced(page, 1, sc->mem_cgroup); | 512 | referenced = page_referenced(page, 1, sc->mem_cgroup); |
@@ -554,10 +545,8 @@ static unsigned long shrink_page_list(struct list_head *page_list, | |||
554 | if (PageDirty(page)) { | 545 | if (PageDirty(page)) { |
555 | if (sc->order <= PAGE_ALLOC_COSTLY_ORDER && referenced) | 546 | if (sc->order <= PAGE_ALLOC_COSTLY_ORDER && referenced) |
556 | goto keep_locked; | 547 | goto keep_locked; |
557 | if (!may_enter_fs) { | 548 | if (!may_enter_fs) |
558 | sc->nr_io_pages++; | ||
559 | goto keep_locked; | 549 | goto keep_locked; |
560 | } | ||
561 | if (!sc->may_writepage) | 550 | if (!sc->may_writepage) |
562 | goto keep_locked; | 551 | goto keep_locked; |
563 | 552 | ||
@@ -568,10 +557,8 @@ static unsigned long shrink_page_list(struct list_head *page_list, | |||
568 | case PAGE_ACTIVATE: | 557 | case PAGE_ACTIVATE: |
569 | goto activate_locked; | 558 | goto activate_locked; |
570 | case PAGE_SUCCESS: | 559 | case PAGE_SUCCESS: |
571 | if (PageWriteback(page) || PageDirty(page)) { | 560 | if (PageWriteback(page) || PageDirty(page)) |
572 | sc->nr_io_pages++; | ||
573 | goto keep; | 561 | goto keep; |
574 | } | ||
575 | /* | 562 | /* |
576 | * A synchronous write - probably a ramdisk. Go | 563 | * A synchronous write - probably a ramdisk. Go |
577 | * ahead and try to reclaim the page. | 564 | * ahead and try to reclaim the page. |
@@ -1344,7 +1331,6 @@ static unsigned long do_try_to_free_pages(struct zone **zones, gfp_t gfp_mask, | |||
1344 | 1331 | ||
1345 | for (priority = DEF_PRIORITY; priority >= 0; priority--) { | 1332 | for (priority = DEF_PRIORITY; priority >= 0; priority--) { |
1346 | sc->nr_scanned = 0; | 1333 | sc->nr_scanned = 0; |
1347 | sc->nr_io_pages = 0; | ||
1348 | if (!priority) | 1334 | if (!priority) |
1349 | disable_swap_token(); | 1335 | disable_swap_token(); |
1350 | nr_reclaimed += shrink_zones(priority, zones, sc); | 1336 | nr_reclaimed += shrink_zones(priority, zones, sc); |
@@ -1379,8 +1365,7 @@ static unsigned long do_try_to_free_pages(struct zone **zones, gfp_t gfp_mask, | |||
1379 | } | 1365 | } |
1380 | 1366 | ||
1381 | /* Take a nap, wait for some writeback to complete */ | 1367 | /* Take a nap, wait for some writeback to complete */ |
1382 | if (sc->nr_scanned && priority < DEF_PRIORITY - 2 && | 1368 | if (sc->nr_scanned && priority < DEF_PRIORITY - 2) |
1383 | sc->nr_io_pages > sc->swap_cluster_max) | ||
1384 | congestion_wait(WRITE, HZ/10); | 1369 | congestion_wait(WRITE, HZ/10); |
1385 | } | 1370 | } |
1386 | /* top priority shrink_caches still had more to do? don't OOM, then */ | 1371 | /* top priority shrink_caches still had more to do? don't OOM, then */ |
@@ -1514,7 +1499,6 @@ loop_again: | |||
1514 | if (!priority) | 1499 | if (!priority) |
1515 | disable_swap_token(); | 1500 | disable_swap_token(); |
1516 | 1501 | ||
1517 | sc.nr_io_pages = 0; | ||
1518 | all_zones_ok = 1; | 1502 | all_zones_ok = 1; |
1519 | 1503 | ||
1520 | /* | 1504 | /* |
@@ -1607,8 +1591,7 @@ loop_again: | |||
1607 | * OK, kswapd is getting into trouble. Take a nap, then take | 1591 | * OK, kswapd is getting into trouble. Take a nap, then take |
1608 | * another pass across the zones. | 1592 | * another pass across the zones. |
1609 | */ | 1593 | */ |
1610 | if (total_scanned && priority < DEF_PRIORITY - 2 && | 1594 | if (total_scanned && priority < DEF_PRIORITY - 2) |
1611 | sc.nr_io_pages > sc.swap_cluster_max) | ||
1612 | congestion_wait(WRITE, HZ/10); | 1595 | congestion_wait(WRITE, HZ/10); |
1613 | 1596 | ||
1614 | /* | 1597 | /* |