aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWu Fengguang <wfg@mail.ustc.edu.cn>2006-03-22 03:08:28 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-03-22 10:54:00 -0500
commitfb8d14e172a29ba5ac69a73b61196be86fdfc3e1 (patch)
tree5b31eac00f8fc5860170d7f8b2e7e961dbda0ddf
parentc9b02d970c385a253edb36c87643b0df706b50b4 (diff)
[PATCH] mm: shrink_inactive_lis() nr_scan accounting fix
In shrink_inactive_list(), nr_scan is not accounted when nr_taken is 0. But 0 pages taken does not mean 0 pages scanned. Move the goto statement below the accounting code to fix it. Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--mm/vmscan.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 85e95f445022..486184d2b50c 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1132,9 +1132,6 @@ static unsigned long shrink_inactive_list(unsigned long max_scan,
1132 zone->pages_scanned += nr_scan; 1132 zone->pages_scanned += nr_scan;
1133 spin_unlock_irq(&zone->lru_lock); 1133 spin_unlock_irq(&zone->lru_lock);
1134 1134
1135 if (nr_taken == 0)
1136 goto done;
1137
1138 nr_scanned += nr_scan; 1135 nr_scanned += nr_scan;
1139 nr_freed = shrink_page_list(&page_list, sc); 1136 nr_freed = shrink_page_list(&page_list, sc);
1140 nr_reclaimed += nr_freed; 1137 nr_reclaimed += nr_freed;
@@ -1146,6 +1143,9 @@ static unsigned long shrink_inactive_list(unsigned long max_scan,
1146 __mod_page_state_zone(zone, pgscan_direct, nr_scan); 1143 __mod_page_state_zone(zone, pgscan_direct, nr_scan);
1147 __mod_page_state_zone(zone, pgsteal, nr_freed); 1144 __mod_page_state_zone(zone, pgsteal, nr_freed);
1148 1145
1146 if (nr_taken == 0)
1147 goto done;
1148
1149 spin_lock(&zone->lru_lock); 1149 spin_lock(&zone->lru_lock);
1150 /* 1150 /*
1151 * Put back any unfreeable pages. 1151 * Put back any unfreeable pages.
@@ -1166,8 +1166,9 @@ static unsigned long shrink_inactive_list(unsigned long max_scan,
1166 } 1166 }
1167 } 1167 }
1168 } while (nr_scanned < max_scan); 1168 } while (nr_scanned < max_scan);
1169 spin_unlock_irq(&zone->lru_lock); 1169 spin_unlock(&zone->lru_lock);
1170done: 1170done:
1171 local_irq_enable();
1171 pagevec_release(&pvec); 1172 pagevec_release(&pvec);
1172 return nr_reclaimed; 1173 return nr_reclaimed;
1173} 1174}