diff options
author | Andy Whitcroft <apw@shadowen.org> | 2008-07-24 00:27:19 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-24 13:47:15 -0400 |
commit | 9023cb7e8564d95a1893f8cb6895a293be9a71fe (patch) | |
tree | 641e9918124a2a9e6642916ed9d23f97fbf95526 | |
parent | 8a38082d21cbc5ec961da7dda195e98a9a064dcf (diff) |
slob: record page flag overlays explicitly
SLOB reuses two page bits for internal purposes, it overlays PG_active and
PG_private. This is hidden away in slob.c. Document these overlays
explicitly in the main page-flags enum along with all the others.
Signed-off-by: Andy Whitcroft <apw@shadowen.org>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>
Cc: Christoph Lameter <cl@linux-foundation.org>
Cc: Matt Mackall <mpm@selenic.com>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | include/linux/page-flags.h | 7 | ||||
-rw-r--r-- | mm/slob.c | 12 |
2 files changed, 13 insertions, 6 deletions
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 3fc586b7b90b..54590a9a103e 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
@@ -105,6 +105,10 @@ enum pageflags { | |||
105 | PG_pinned = PG_owner_priv_1, | 105 | PG_pinned = PG_owner_priv_1, |
106 | PG_savepinned = PG_dirty, | 106 | PG_savepinned = PG_dirty, |
107 | 107 | ||
108 | /* SLOB */ | ||
109 | PG_slob_page = PG_active, | ||
110 | PG_slob_free = PG_private, | ||
111 | |||
108 | /* SLUB */ | 112 | /* SLUB */ |
109 | PG_slub_frozen = PG_active, | 113 | PG_slub_frozen = PG_active, |
110 | PG_slub_debug = PG_error, | 114 | PG_slub_debug = PG_error, |
@@ -173,6 +177,9 @@ PAGEFLAG(Reserved, reserved) __CLEARPAGEFLAG(Reserved, reserved) | |||
173 | PAGEFLAG(Private, private) __CLEARPAGEFLAG(Private, private) | 177 | PAGEFLAG(Private, private) __CLEARPAGEFLAG(Private, private) |
174 | __SETPAGEFLAG(Private, private) | 178 | __SETPAGEFLAG(Private, private) |
175 | 179 | ||
180 | __PAGEFLAG(SlobPage, slob_page) | ||
181 | __PAGEFLAG(SlobFree, slob_free) | ||
182 | |||
176 | __PAGEFLAG(SlubFrozen, slub_frozen) | 183 | __PAGEFLAG(SlubFrozen, slub_frozen) |
177 | __PAGEFLAG(SlubDebug, slub_debug) | 184 | __PAGEFLAG(SlubDebug, slub_debug) |
178 | 185 | ||
@@ -130,17 +130,17 @@ static LIST_HEAD(free_slob_large); | |||
130 | */ | 130 | */ |
131 | static inline int slob_page(struct slob_page *sp) | 131 | static inline int slob_page(struct slob_page *sp) |
132 | { | 132 | { |
133 | return test_bit(PG_active, &sp->flags); | 133 | return PageSlobPage((struct page *)sp); |
134 | } | 134 | } |
135 | 135 | ||
136 | static inline void set_slob_page(struct slob_page *sp) | 136 | static inline void set_slob_page(struct slob_page *sp) |
137 | { | 137 | { |
138 | __set_bit(PG_active, &sp->flags); | 138 | __SetPageSlobPage((struct page *)sp); |
139 | } | 139 | } |
140 | 140 | ||
141 | static inline void clear_slob_page(struct slob_page *sp) | 141 | static inline void clear_slob_page(struct slob_page *sp) |
142 | { | 142 | { |
143 | __clear_bit(PG_active, &sp->flags); | 143 | __ClearPageSlobPage((struct page *)sp); |
144 | } | 144 | } |
145 | 145 | ||
146 | /* | 146 | /* |
@@ -148,19 +148,19 @@ static inline void clear_slob_page(struct slob_page *sp) | |||
148 | */ | 148 | */ |
149 | static inline int slob_page_free(struct slob_page *sp) | 149 | static inline int slob_page_free(struct slob_page *sp) |
150 | { | 150 | { |
151 | return test_bit(PG_private, &sp->flags); | 151 | return PageSlobFree((struct page *)sp); |
152 | } | 152 | } |
153 | 153 | ||
154 | static void set_slob_page_free(struct slob_page *sp, struct list_head *list) | 154 | static void set_slob_page_free(struct slob_page *sp, struct list_head *list) |
155 | { | 155 | { |
156 | list_add(&sp->list, list); | 156 | list_add(&sp->list, list); |
157 | __set_bit(PG_private, &sp->flags); | 157 | __SetPageSlobFree((struct page *)sp); |
158 | } | 158 | } |
159 | 159 | ||
160 | static inline void clear_slob_page_free(struct slob_page *sp) | 160 | static inline void clear_slob_page_free(struct slob_page *sp) |
161 | { | 161 | { |
162 | list_del(&sp->list); | 162 | list_del(&sp->list); |
163 | __clear_bit(PG_private, &sp->flags); | 163 | __ClearPageSlobFree((struct page *)sp); |
164 | } | 164 | } |
165 | 165 | ||
166 | #define SLOB_UNIT sizeof(slob_t) | 166 | #define SLOB_UNIT sizeof(slob_t) |