Skip to content

Commit 0c24811

Browse files
Matthew Wilcox (Oracle)tehcaster
authored andcommitted
mm: Convert __ksize() to struct slab
In SLUB, use folios, and struct slab to access slab_cache field. In SLOB, use folios to properly resolve pointers beyond PAGE_SIZE offset of the object. [ [email protected]: use folios, and only convert folio_test_slab() == true folios to struct slab ] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Signed-off-by: Vlastimil Babka <[email protected]> Acked-by: Johannes Weiner <[email protected]> Reviewed-by: Roman Gushchin <[email protected]>
1 parent 82c1775 commit 0c24811

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

mm/slob.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -570,17 +570,17 @@ EXPORT_SYMBOL(kfree);
570570
/* can't use ksize for kmem_cache_alloc memory, only kmalloc */
571571
size_t __ksize(const void *block)
572572
{
573-
struct page *sp;
573+
struct folio *folio;
574574
int align;
575575
unsigned int *m;
576576

577577
BUG_ON(!block);
578578
if (unlikely(block == ZERO_SIZE_PTR))
579579
return 0;
580580

581-
sp = virt_to_page(block);
582-
if (unlikely(!PageSlab(sp)))
583-
return page_size(sp);
581+
folio = virt_to_folio(block);
582+
if (unlikely(!folio_test_slab(folio)))
583+
return folio_size(folio);
584584

585585
align = max_t(size_t, ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);
586586
m = (unsigned int *)(block - align);

mm/slub.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4527,19 +4527,17 @@ void __check_heap_object(const void *ptr, unsigned long n, struct page *page,
45274527

45284528
size_t __ksize(const void *object)
45294529
{
4530-
struct page *page;
4530+
struct folio *folio;
45314531

45324532
if (unlikely(object == ZERO_SIZE_PTR))
45334533
return 0;
45344534

4535-
page = virt_to_head_page(object);
4535+
folio = virt_to_folio(object);
45364536

4537-
if (unlikely(!PageSlab(page))) {
4538-
WARN_ON(!PageCompound(page));
4539-
return page_size(page);
4540-
}
4537+
if (unlikely(!folio_test_slab(folio)))
4538+
return folio_size(folio);
45414539

4542-
return slab_ksize(page->slab_cache);
4540+
return slab_ksize(folio_slab(folio)->slab_cache);
45434541
}
45444542
EXPORT_SYMBOL(__ksize);
45454543

0 commit comments

Comments
 (0)