]> www.infradead.org Git - users/willy/linux.git/commitdiff
mm: Convert __ksize() to struct slab
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 1 Oct 2021 03:04:21 +0000 (23:04 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 4 Oct 2021 03:21:41 +0000 (23:21 -0400)
slub and slob both use struct page here; convert them to struct slab.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
mm/slab.h
mm/slob.c
mm/slub.c

index 3c691ef6b492e8755631afd2328904e209693fa6..ac89b656de6737353f5ef64e42adc8edbbf76696 100644 (file)
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -14,7 +14,7 @@ static inline bool slab_test_cache(const struct slab *slab)
        return test_bit(PG_slab, &slab->flags);
 }
 
-static inline bool slab_test_multi_page(const struct slab *slab)
+static inline bool slab_test_multipage(const struct slab *slab)
 {
        return test_bit(PG_head, &slab->flags);
 }
@@ -67,7 +67,7 @@ static inline struct slab *virt_to_slab(const void *addr)
 
 static inline int slab_order(const struct slab *slab)
 {
-       if (!slab_test_multi_page(slab))
+       if (!slab_test_multipage(slab))
                return 0;
        return ((struct page *)slab)[1].compound_order;
 }
@@ -483,7 +483,7 @@ static inline struct kmem_cache *virt_to_cache(const void *obj)
        struct slab *slab;
 
        slab = virt_to_slab(obj);
-       if (WARN_ONCE(!SlabAllocation(slab), "%s: Object is not a Slab page!\n",
+       if (WARN_ONCE(!slab_test_cache(slab), "%s: Object is not a Slab page!\n",
                                        __func__))
                return NULL;
        return slab->slab_cache;
index 74d3f6e60666e09e2dbdd8f74c4f79f84b31ea2c..90996e8f7337233665df04f5d1ac2e4899776c70 100644 (file)
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -570,7 +570,7 @@ EXPORT_SYMBOL(kfree);
 /* can't use ksize for kmem_cache_alloc memory, only kmalloc */
 size_t __ksize(const void *block)
 {
-       struct page *sp;
+       struct slab *sp;
        int align;
        unsigned int *m;
 
@@ -578,9 +578,9 @@ size_t __ksize(const void *block)
        if (unlikely(block == ZERO_SIZE_PTR))
                return 0;
 
-       sp = virt_to_page(block);
-       if (unlikely(!PageSlab(sp)))
-               return page_size(sp);
+       sp = virt_to_slab(block);
+       if (unlikely(!slab_test_cache(sp)))
+               return slab_size(sp);
 
        align = max_t(size_t, ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);
        m = (unsigned int *)(block - align);
index 7e429a31b3263c8881f0e9918cab76b8bbd36d18..2780342395dc672a65484d0fd8c774e21b0f470b 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -4509,19 +4509,19 @@ void __check_heap_object(const void *ptr, unsigned long n, struct page *page,
 
 size_t __ksize(const void *object)
 {
-       struct page *page;
+       struct slab *slab;
 
        if (unlikely(object == ZERO_SIZE_PTR))
                return 0;
 
-       page = virt_to_head_page(object);
+       slab = virt_to_slab(object);
 
-       if (unlikely(!PageSlab(page))) {
-               WARN_ON(!PageCompound(page));
-               return page_size(page);
+       if (unlikely(!slab_test_cache(slab))) {
+               WARN_ON(!slab_test_multipage(slab));
+               return slab_size(slab);
        }
 
-       return slab_ksize(page->slab_cache);
+       return slab_ksize(slab->slab_cache);
 }
 EXPORT_SYMBOL(__ksize);