aboutsummaryrefslogtreecommitdiffstats
path: root/mm/vmscan.c
diff options
context:
space:
mode:
authorNick Piggin <npiggin@suse.de>2006-03-22 03:07:59 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-03-22 10:53:56 -0500
commit8d438f96d2b8eade6cbcd8adfc22dae6f5cbd6c0 (patch)
tree5248caf52ed9ba1dbb172d9e3bd3216c97ab3b84 /mm/vmscan.c
parent46453a6e194a8c55fe6cf3dc8e1c4f24e2abc013 (diff)
[PATCH] mm: PageLRU no testset
PG_lru is protected by zone->lru_lock. It does not need TestSet/TestClear operations. Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r--mm/vmscan.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index acb7611cd525..40fb37828e8c 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1042,9 +1042,10 @@ int isolate_lru_page(struct page *page)
1042 if (PageLRU(page)) { 1042 if (PageLRU(page)) {
1043 struct zone *zone = page_zone(page); 1043 struct zone *zone = page_zone(page);
1044 spin_lock_irq(&zone->lru_lock); 1044 spin_lock_irq(&zone->lru_lock);
1045 if (TestClearPageLRU(page)) { 1045 if (PageLRU(page)) {
1046 ret = 1; 1046 ret = 1;
1047 get_page(page); 1047 get_page(page);
1048 ClearPageLRU(page);
1048 if (PageActive(page)) 1049 if (PageActive(page))
1049 del_page_from_active_list(zone, page); 1050 del_page_from_active_list(zone, page);
1050 else 1051 else
@@ -1085,6 +1086,8 @@ static int isolate_lru_pages(int nr_to_scan, struct list_head *src,
1085 page = lru_to_page(src); 1086 page = lru_to_page(src);
1086 prefetchw_prev_lru_page(page, src, flags); 1087 prefetchw_prev_lru_page(page, src, flags);
1087 1088
1089 BUG_ON(!PageLRU(page));
1090
1088 list_del(&page->lru); 1091 list_del(&page->lru);
1089 if (unlikely(get_page_testone(page))) { 1092 if (unlikely(get_page_testone(page))) {
1090 /* 1093 /*
@@ -1100,8 +1103,7 @@ static int isolate_lru_pages(int nr_to_scan, struct list_head *src,
1100 * the page is not being freed elsewhere -- the page release 1103 * the page is not being freed elsewhere -- the page release
1101 * code relies on it. 1104 * code relies on it.
1102 */ 1105 */
1103 if (!TestClearPageLRU(page)) 1106 ClearPageLRU(page);
1104 BUG();
1105 list_add(&page->lru, dst); 1107 list_add(&page->lru, dst);
1106 nr_taken++; 1108 nr_taken++;
1107 } 1109 }
@@ -1156,8 +1158,8 @@ static void shrink_cache(struct zone *zone, struct scan_control *sc)
1156 */ 1158 */
1157 while (!list_empty(&page_list)) { 1159 while (!list_empty(&page_list)) {
1158 page = lru_to_page(&page_list); 1160 page = lru_to_page(&page_list);
1159 if (TestSetPageLRU(page)) 1161 BUG_ON(PageLRU(page));
1160 BUG(); 1162 SetPageLRU(page);
1161 list_del(&page->lru); 1163 list_del(&page->lru);
1162 if (PageActive(page)) 1164 if (PageActive(page))
1163 add_page_to_active_list(zone, page); 1165 add_page_to_active_list(zone, page);
@@ -1276,8 +1278,8 @@ refill_inactive_zone(struct zone *zone, struct scan_control *sc)
1276 while (!list_empty(&l_inactive)) { 1278 while (!list_empty(&l_inactive)) {
1277 page = lru_to_page(&l_inactive); 1279 page = lru_to_page(&l_inactive);
1278 prefetchw_prev_lru_page(page, &l_inactive, flags); 1280 prefetchw_prev_lru_page(page, &l_inactive, flags);
1279 if (TestSetPageLRU(page)) 1281 BUG_ON(PageLRU(page));
1280 BUG(); 1282 SetPageLRU(page);
1281 if (!TestClearPageActive(page)) 1283 if (!TestClearPageActive(page))
1282 BUG(); 1284 BUG();
1283 list_move(&page->lru, &zone->inactive_list); 1285 list_move(&page->lru, &zone->inactive_list);
@@ -1305,8 +1307,8 @@ refill_inactive_zone(struct zone *zone, struct scan_control *sc)
1305 while (!list_empty(&l_active)) { 1307 while (!list_empty(&l_active)) {
1306 page = lru_to_page(&l_active); 1308 page = lru_to_page(&l_active);
1307 prefetchw_prev_lru_page(page, &l_active, flags); 1309 prefetchw_prev_lru_page(page, &l_active, flags);
1308 if (TestSetPageLRU(page)) 1310 BUG_ON(PageLRU(page));
1309 BUG(); 1311 SetPageLRU(page);
1310 BUG_ON(!PageActive(page)); 1312 BUG_ON(!PageActive(page));
1311 list_move(&page->lru, &zone->active_list); 1313 list_move(&page->lru, &zone->active_list);
1312 pgmoved++; 1314 pgmoved++;