diff options
author | Nick Piggin <npiggin@suse.de> | 2006-03-22 03:08:00 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-22 10:53:57 -0500 |
commit | 674539115cc88473f623581e1d53c0e2ecef2179 (patch) | |
tree | 7a32501091d7370ff4387df68804f918a089c631 | |
parent | 4c84cacfa424264f7ad5287298d3ea4a3e935278 (diff) |
[PATCH] mm: less atomic ops
In the page release paths, we can be sure that nobody will mess with our
page->flags because the refcount has dropped to 0. So no need for atomic
operations here.
Signed-off-by: Nick Piggin <npiggin@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | include/linux/mm_inline.h | 2 | ||||
-rw-r--r-- | include/linux/page-flags.h | 2 | ||||
-rw-r--r-- | mm/swap.c | 4 |
3 files changed, 5 insertions, 3 deletions
diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h index 8ac854f7f190..3b6723dfaff3 100644 --- a/include/linux/mm_inline.h +++ b/include/linux/mm_inline.h | |||
@@ -32,7 +32,7 @@ del_page_from_lru(struct zone *zone, struct page *page) | |||
32 | { | 32 | { |
33 | list_del(&page->lru); | 33 | list_del(&page->lru); |
34 | if (PageActive(page)) { | 34 | if (PageActive(page)) { |
35 | ClearPageActive(page); | 35 | __ClearPageActive(page); |
36 | zone->nr_active--; | 36 | zone->nr_active--; |
37 | } else { | 37 | } else { |
38 | zone->nr_inactive--; | 38 | zone->nr_inactive--; |
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 5d1e7bd85107..da71d63df465 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
@@ -242,10 +242,12 @@ extern void __mod_page_state_offset(unsigned long offset, unsigned long delta); | |||
242 | #define PageLRU(page) test_bit(PG_lru, &(page)->flags) | 242 | #define PageLRU(page) test_bit(PG_lru, &(page)->flags) |
243 | #define SetPageLRU(page) set_bit(PG_lru, &(page)->flags) | 243 | #define SetPageLRU(page) set_bit(PG_lru, &(page)->flags) |
244 | #define ClearPageLRU(page) clear_bit(PG_lru, &(page)->flags) | 244 | #define ClearPageLRU(page) clear_bit(PG_lru, &(page)->flags) |
245 | #define __ClearPageLRU(page) __clear_bit(PG_lru, &(page)->flags) | ||
245 | 246 | ||
246 | #define PageActive(page) test_bit(PG_active, &(page)->flags) | 247 | #define PageActive(page) test_bit(PG_active, &(page)->flags) |
247 | #define SetPageActive(page) set_bit(PG_active, &(page)->flags) | 248 | #define SetPageActive(page) set_bit(PG_active, &(page)->flags) |
248 | #define ClearPageActive(page) clear_bit(PG_active, &(page)->flags) | 249 | #define ClearPageActive(page) clear_bit(PG_active, &(page)->flags) |
250 | #define __ClearPageActive(page) __clear_bit(PG_active, &(page)->flags) | ||
249 | 251 | ||
250 | #define PageSlab(page) test_bit(PG_slab, &(page)->flags) | 252 | #define PageSlab(page) test_bit(PG_slab, &(page)->flags) |
251 | #define SetPageSlab(page) set_bit(PG_slab, &(page)->flags) | 253 | #define SetPageSlab(page) set_bit(PG_slab, &(page)->flags) |
@@ -215,7 +215,7 @@ void fastcall __page_cache_release(struct page *page) | |||
215 | 215 | ||
216 | spin_lock_irqsave(&zone->lru_lock, flags); | 216 | spin_lock_irqsave(&zone->lru_lock, flags); |
217 | BUG_ON(!PageLRU(page)); | 217 | BUG_ON(!PageLRU(page)); |
218 | ClearPageLRU(page); | 218 | __ClearPageLRU(page); |
219 | del_page_from_lru(zone, page); | 219 | del_page_from_lru(zone, page); |
220 | spin_unlock_irqrestore(&zone->lru_lock, flags); | 220 | spin_unlock_irqrestore(&zone->lru_lock, flags); |
221 | } | 221 | } |
@@ -266,7 +266,7 @@ void release_pages(struct page **pages, int nr, int cold) | |||
266 | spin_lock_irq(&zone->lru_lock); | 266 | spin_lock_irq(&zone->lru_lock); |
267 | } | 267 | } |
268 | BUG_ON(!PageLRU(page)); | 268 | BUG_ON(!PageLRU(page)); |
269 | ClearPageLRU(page); | 269 | __ClearPageLRU(page); |
270 | del_page_from_lru(zone, page); | 270 | del_page_from_lru(zone, page); |
271 | } | 271 | } |
272 | 272 | ||