summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/linux/mm_types.h4
-rw-r--r--mm/slab.c8
2 files changed, 8 insertions, 4 deletions
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 5922c3452592..680a5e4e8cd5 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -110,6 +110,10 @@ struct page {
};
struct list_head list; /* slobs list of pages */
+ struct { /* slab fields */
+ struct kmem_cache *slab_cache;
+ struct slab *slab_page;
+ };
};
/* Remainder is not double word aligned */
diff --git a/mm/slab.c b/mm/slab.c
index e901a36e2520..af05147d7abd 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -496,25 +496,25 @@ static bool slab_max_order_set __initdata;
*/
static inline void page_set_cache(struct page *page, struct kmem_cache *cache)
{
- page->lru.next = (struct list_head *)cache;
+ page->slab_cache = cache;
}
static inline struct kmem_cache *page_get_cache(struct page *page)
{
page = compound_head(page);
BUG_ON(!PageSlab(page));
- return (struct kmem_cache *)page->lru.next;
+ return page->slab_cache;
}
static inline void page_set_slab(struct page *page, struct slab *slab)
{
- page->lru.prev = (struct list_head *)slab;
+ page->slab_page = slab;
}
static inline struct slab *page_get_slab(struct page *page)
{
BUG_ON(!PageSlab(page));
- return (struct slab *)page->lru.prev;
+ return page->slab_page;
}
static inline struct kmem_cache *virt_to_cache(const void *obj)