diff options
author | Wu Fengguang <wfg@mail.ustc.edu.cn> | 2006-03-22 03:08:28 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-22 10:54:00 -0500 |
commit | fb8d14e172a29ba5ac69a73b61196be86fdfc3e1 (patch) | |
tree | 5b31eac00f8fc5860170d7f8b2e7e961dbda0ddf | |
parent | c9b02d970c385a253edb36c87643b0df706b50b4 (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.c | 9 |
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); |
1170 | done: | 1170 | done: |
1171 | local_irq_enable(); | ||
1171 | pagevec_release(&pvec); | 1172 | pagevec_release(&pvec); |
1172 | return nr_reclaimed; | 1173 | return nr_reclaimed; |
1173 | } | 1174 | } |