diff options
author | davem <davem> | 2001-11-08 05:13:14 +0000 |
---|---|---|
committer | davem <davem> | 2001-11-08 05:13:14 +0000 |
commit | eb3e1cda26f83567d2491fad261d0c48a936430c (patch) | |
tree | 0e97cec09435b37c725e3c271fa6b28052f100f2 /mm | |
parent | 9d7226c0047d6fe99e2aa8a3946e64f0ea360e33 (diff) | |
download | netdev-vger-cvs-eb3e1cda26f83567d2491fad261d0c48a936430c.tar.gz |
Merge mainline to 2.4.15-pre1
Diffstat (limited to 'mm')
-rw-r--r-- | mm/page_alloc.c | 15 | ||||
-rw-r--r-- | mm/swap.c | 16 | ||||
-rw-r--r-- | mm/vmscan.c | 4 |
3 files changed, 20 insertions, 15 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index d26059077..c3234a648 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -80,9 +80,9 @@ static void __free_pages_ok (struct page *page, unsigned int order) BUG(); if (PageLocked(page)) BUG(); - if (PageActive(page)) + if (PageLRU(page)) BUG(); - if (PageInactive(page)) + if (PageActive(page)) BUG(); page->flags &= ~((1<<PG_referenced) | (1<<PG_dirty)); @@ -203,7 +203,10 @@ static struct page * rmqueue(zone_t *zone, unsigned int order) set_page_count(page, 1); if (BAD_RANGE(zone,page)) BUG(); - DEBUG_LRU_PAGE(page); + if (PageLRU(page)) + BUG(); + if (PageActive(page)) + BUG(); return page; } curr_order++; @@ -268,9 +271,9 @@ static struct page * balance_classzone(zone_t * classzone, unsigned int gfp_mask BUG(); if (PageLocked(page)) BUG(); - if (PageActive(page)) + if (PageLRU(page)) BUG(); - if (PageInactive(page)) + if (PageActive(page)) BUG(); if (PageDirty(page)) BUG(); @@ -425,7 +428,7 @@ unsigned long get_zeroed_page(unsigned int gfp_mask) void page_cache_release(struct page *page) { if (!PageReserved(page) && put_page_testzero(page)) { - if (PageActive(page) || PageInactive(page)) + if (PageLRU(page)) lru_cache_del(page); __free_pages_ok(page, 0); } @@ -38,7 +38,7 @@ pager_daemon_t pager_daemon = { */ static inline void activate_page_nolock(struct page * page) { - if (PageInactive(page)) { + if (PageLRU(page) && !PageActive(page)) { del_page_from_inactive_list(page); add_page_to_active_list(page); } @@ -57,7 +57,7 @@ void activate_page(struct page * page) */ void lru_cache_add(struct page * page) { - if (!PageActive(page) && !PageInactive(page)) { + if (!TestSetPageLRU(page)) { spin_lock(&pagemap_lru_lock); add_page_to_inactive_list(page); spin_unlock(&pagemap_lru_lock); @@ -73,12 +73,12 @@ void lru_cache_add(struct page * page) */ void __lru_cache_del(struct page * page) { - if (PageActive(page)) { - del_page_from_active_list(page); - } else if (PageInactive(page)) { - del_page_from_inactive_list(page); - } else { -// printk("VM: __lru_cache_del, found unknown page ?!\n"); + if (TestClearPageLRU(page)) { + if (PageActive(page)) { + del_page_from_active_list(page); + } else { + del_page_from_inactive_list(page); + } } } diff --git a/mm/vmscan.c b/mm/vmscan.c index 864a8d77d..c5d914f58 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -347,7 +347,9 @@ static int shrink_cache(int nr_pages, zone_t * classzone, unsigned int gfp_mask, page = list_entry(entry, struct page, lru); - if (unlikely(!PageInactive(page))) + if (unlikely(!PageLRU(page))) + BUG(); + if (unlikely(PageActive(page))) BUG(); list_del(entry); |