summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mm/slab.h2
-rw-r--r--mm/slab_common.c9
-rw-r--r--mm/slub.c2
3 files changed, 7 insertions, 6 deletions
diff --git a/mm/slab.h b/mm/slab.h
index 54deeb0428c6..64f06431cc97 100644
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -84,7 +84,7 @@ struct slab {
};
struct rcu_head rcu_head;
};
- unsigned int __unused;
+ unsigned int object_size;
atomic_t __page_refcount;
#ifdef CONFIG_MEMCG
diff --git a/mm/slab_common.c b/mm/slab_common.c
index 6ec0f6543f34..f209b8cf4965 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -963,13 +963,12 @@ size_t __ksize(const void *object)
if (WARN_ON(object != folio_address(folio)))
return 0;
return folio_size(folio);
- }
-
+ } else {
#ifdef CONFIG_SLUB_DEBUG
- skip_orig_size_check(folio_slab(folio)->slab_cache, object);
+ skip_orig_size_check(folio_slab(folio)->slab_cache, object);
#endif
-
- return slab_ksize(folio_slab(folio)->slab_cache);
+ return folio_slab(folio)->object_size;
+ }
}
/**
diff --git a/mm/slub.c b/mm/slub.c
index 2ef88bbf56a3..45e95133653e 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -2366,6 +2366,7 @@ static struct slab *allocate_slab(struct kmem_cache *s, gfp_t flags, int node)
}
slab->objects = oo_objects(oo);
+ slab->object_size = slab_ksize(s);
slab->inuse = 0;
slab->frozen = 0;
@@ -2414,6 +2415,7 @@ static void __free_slab(struct kmem_cache *s, struct slab *slab)
int order = folio_order(folio);
int pages = 1 << order;
+ slab->object_size = -1; /* page->_mapcount */
__slab_clear_pfmemalloc(slab);
folio->mapping = NULL;
/* Make the mapping reset visible before clearing the flag */