Index: linux-2.6.18-rc4/include/linux/mm.h =================================================================== --- linux-2.6.18-rc4.orig/include/linux/mm.h 2006-08-06 11:20:11.000000000 -0700 +++ linux-2.6.18-rc4/include/linux/mm.h 2006-08-09 15:13:37.082773044 -0700 @@ -224,10 +224,13 @@ struct page { unsigned long flags; /* Atomic flags, some possibly * updated asynchronously */ atomic_t _count; /* Usage count, see below. */ - atomic_t _mapcount; /* Count of ptes mapped in mms, - * to show when page is mapped - * & limit reverse map searches. - */ + union { + atomic_t _mapcount; /* Count of ptes mapped in mms, + * to show when page is mapped + * & limit reverse map searches. + */ + int inuse; /* Sslab: objects in use */ + } union { struct { unsigned long private; /* Mapping-private opaque data: @@ -237,19 +240,25 @@ struct page { * indicates order in the buddy * system if PG_buddy is set. */ - struct address_space *mapping; /* If low bit clear, points to + union { + struct address_space *mapping; /* If low bit clear, points to * inode address_space, or NULL. * If page mapped as anonymous * memory, low bit is set, and * it points to anon_vma object: * see PAGE_MAPPING_ANON below. */ + struct sslab *slab; /* Pointer to slab */ + } }; #if NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS spinlock_t ptl; #endif }; - pgoff_t index; /* Our offset within mapping. */ + union { + pgoff_t index; /* Our offset within mapping. */ + void *object; /* Pointer to the first free slab object */ + } struct list_head lru; /* Pageout list, eg. active_list * protected by zone->lru_lock ! */