diff options
author | Nick Piggin <npiggin@suse.de> | 2006-03-22 03:08:40 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-22 10:54:02 -0500 |
commit | 7835e98b2e3c66dba79cb0ff8ebb90a2fe030c29 (patch) | |
tree | 405a96eade34845dabe2f125b6c5eb095846869d /mm/hugetlb.c | |
parent | 70dc991d66cac40fdb07346dba2b5d862d732c34 (diff) |
[PATCH] remove set_page_count() outside mm/
set_page_count usage outside mm/ is limited to setting the refcount to 1.
Remove set_page_count from outside mm/, and replace those users with
init_page_count() and set_page_refcounted().
This allows more debug checking, and tighter control on how code is allowed
to play around with page->_count.
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/hugetlb.c')
-rw-r--r-- | mm/hugetlb.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 39d49ecea8e8..20117a4b8ab6 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <asm/pgtable.h> | 18 | #include <asm/pgtable.h> |
19 | 19 | ||
20 | #include <linux/hugetlb.h> | 20 | #include <linux/hugetlb.h> |
21 | #include "internal.h" | ||
21 | 22 | ||
22 | const unsigned long hugetlb_zero = 0, hugetlb_infinity = ~0UL; | 23 | const unsigned long hugetlb_zero = 0, hugetlb_infinity = ~0UL; |
23 | static unsigned long nr_huge_pages, free_huge_pages; | 24 | static unsigned long nr_huge_pages, free_huge_pages; |
@@ -106,7 +107,7 @@ struct page *alloc_huge_page(struct vm_area_struct *vma, unsigned long addr) | |||
106 | return NULL; | 107 | return NULL; |
107 | } | 108 | } |
108 | spin_unlock(&hugetlb_lock); | 109 | spin_unlock(&hugetlb_lock); |
109 | set_page_count(page, 1); | 110 | set_page_refcounted(page); |
110 | for (i = 0; i < (HPAGE_SIZE/PAGE_SIZE); ++i) | 111 | for (i = 0; i < (HPAGE_SIZE/PAGE_SIZE); ++i) |
111 | clear_user_highpage(&page[i], addr); | 112 | clear_user_highpage(&page[i], addr); |
112 | return page; | 113 | return page; |
@@ -152,7 +153,7 @@ static void update_and_free_page(struct page *page) | |||
152 | 1 << PG_private | 1<< PG_writeback); | 153 | 1 << PG_private | 1<< PG_writeback); |
153 | } | 154 | } |
154 | page[1].lru.next = NULL; | 155 | page[1].lru.next = NULL; |
155 | set_page_count(page, 1); | 156 | set_page_refcounted(page); |
156 | __free_pages(page, HUGETLB_PAGE_ORDER); | 157 | __free_pages(page, HUGETLB_PAGE_ORDER); |
157 | } | 158 | } |
158 | 159 | ||