Re: [PATCH v2 00/33] Separate struct slab from struct page
From: Hyeonggon Yoo <hidden>
Date: 2021-12-25 09:17:08
Also in:
cgroups, linux-iommu, linux-patches
On Wed, Dec 22, 2021 at 05:56:50PM +0100, Vlastimil Babka wrote:
On 12/14/21 13:57, Vlastimil Babka wrote:quoted
On 12/1/21 19:14, Vlastimil Babka wrote:quoted
Folks from non-slab subsystems are Cc'd only to patches affecting them, and this cover letter. Series also available in git, based on 5.16-rc3: https://git.kernel.org/pub/scm/linux/kernel/git/vbabka/linux.git/log/?h=slab-struct_slab-v2r2Pushed a new branch slab-struct-slab-v3r3 with accumulated fixes and small tweaks and a new patch from Hyeonggon Yoo on top. To avoid too much spam, here's a range diff:Hi, I've pushed another update branch slab-struct_slab-v4r1, and also to -next. I've shortened git commit log lines to make checkpatch happier, so no range-diff as it would be too long. I believe it would be useless spam to post the whole series now, shortly before xmas, so I will do it at rc8 time, to hopefully collect remaining reviews. But if anyone wants a mailed version, I can do that.
Hello Vlastimil, Merry Christmas! This is part 2 of reviewing/testing patches. # mm/kasan: Convert to struct folio and struct slab I'm not familiar with kasan yet but kasan runs well on my machine and kasan's bug report functionality too works fine. Tested-by: Hyeongogn Yoo <redacted> # mm: Convert struct page to struct slab in functions used by other subsystems I'm not familiar with kasan, but to ask: Does ____kasan_slab_free detect invalid free if someone frees an object that is not allocated from slab?
@@ -341,7 +341,7 @@ static inline bool ____kasan_slab_free(struct kmem_cache *cache, void *object, - if (unlikely(nearest_obj(cache, virt_to_head_page(object), object) != + if (unlikely(nearest_obj(cache, virt_to_slab(object), object) != object)) { kasan_report_invalid_free(tagged_object, ip); return true;
I'm asking this because virt_to_slab() will return NULL if folio_test_slab() returns false. That will cause NULL pointer dereference in nearest_obj. I don't think this change is intended. This makes me think some of virt_to_head_page() -> virt_to_slab() conversion need to be reviewed with caution. # mm/slab: Finish struct page to struct slab conversion Reviewed-by: Hyeonggon Yoo <redacted> # mm/slab: Convert most struct page to struct slab by spatch Tested-by: Hyeonggon Yoo <redacted> I'll come back with part 3 :) Enjoy your Christmas! Hyeonggon
Changes in v4: - rebase to 5.16-rc6 to avoid a conflict with mainline - collect acks/reviews/tested-by from Johannes, Roman, Hyeonggon Yoo - thanks! - in patch "mm/slub: Convert detached_freelist to use a struct slab" renamed free_nonslab_page() to free_large_kmalloc() and use folio there, as suggested by Roman - in "mm/memcg: Convert slab objcgs from struct page to struct slab" change one caller of slab_objcgs_check() to slab_objcgs() as suggested by Johannes, realize the other caller should be also changed, and remove slab_objcgs_check() completely.