From: Nick Piggin Atomic operation removal from slab Signed-off-by: Nick Piggin Signed-off-by: Andrew Morton --- include/linux/page-flags.h | 6 ++---- mm/slab.c | 6 +++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff -puN include/linux/page-flags.h~mm-slab-less-atomics include/linux/page-flags.h --- devel/include/linux/page-flags.h~mm-slab-less-atomics 2006-01-25 11:21:40.000000000 -0800 +++ devel-akpm/include/linux/page-flags.h 2006-01-25 11:21:40.000000000 -0800 @@ -250,10 +250,8 @@ extern void __mod_page_state_offset(unsi #define __ClearPageActive(page) __clear_bit(PG_active, &(page)->flags) #define PageSlab(page) test_bit(PG_slab, &(page)->flags) -#define SetPageSlab(page) set_bit(PG_slab, &(page)->flags) -#define ClearPageSlab(page) clear_bit(PG_slab, &(page)->flags) -#define TestClearPageSlab(page) test_and_clear_bit(PG_slab, &(page)->flags) -#define TestSetPageSlab(page) test_and_set_bit(PG_slab, &(page)->flags) +#define __SetPageSlab(page) __set_bit(PG_slab, &(page)->flags) +#define __ClearPageSlab(page) __clear_bit(PG_slab, &(page)->flags) #ifdef CONFIG_HIGHMEM #define PageHighMem(page) is_highmem(page_zone(page)) diff -puN mm/slab.c~mm-slab-less-atomics mm/slab.c --- devel/mm/slab.c~mm-slab-less-atomics 2006-01-25 11:21:40.000000000 -0800 +++ devel-akpm/mm/slab.c 2006-01-25 11:21:40.000000000 -0800 @@ -1284,7 +1284,7 @@ static void *kmem_getpages(struct kmem_c atomic_add(i, &slab_reclaim_pages); add_page_state(nr_slab, i); while (i--) { - SetPageSlab(page); + __SetPageSlab(page); page++; } return addr; @@ -1300,8 +1300,8 @@ static void kmem_freepages(struct kmem_c const unsigned long nr_freed = i; while (i--) { - if (!TestClearPageSlab(page)) - BUG(); + BUG_ON(!PageSlab(page)); + __ClearPageSlab(page); page++; } sub_page_state(nr_slab, nr_freed); _