On 9/2/22 11:26, Vlastimil Babka wrote: > On 9/2/22 00:17, Joel Fernandes (Google) wrote: >> From: Vlastimil Babka <vbabka@xxxxxxx> >> >> Joel reports [1] that increasing the rcu_head size for debugging >> purposes used to work before struct slab was split from struct page, but >> now runs into the various SLAB_MATCH() sanity checks of the layout. >> >> This is because the rcu_head in struct page is in union with large >> sub-structures and has space to grow without exceeding their size, while >> in struct slab (for SLAB and SLUB) it's in union only with a list_head. >> >> On closer inspection (and after the previous patch) we can put all >> fields except slab_cache to a union with rcu_head, as slab_cache is >> sufficient for the rcu freeing callbacks to work and the rest can be >> overwritten by rcu_head without causing issues. >> >> This is only somewhat complicated by the need to keep SLUB's >> freelist+counters aligned for cmpxchg_double. As a result the fields >> need to be reordered so that slab_cache is first (after page flags) and >> the union with rcu_head follows. For consistency, do that for SLAB as >> well, although not necessary there. >> >> As a result, the rcu_head field in struct page and struct slab is no >> longer at the same offset, but that doesn't matter as there is no >> casting that would rely on that in the slab freeing callbacks, so we can >> just drop the respective SLAB_MATCH() check. >> >> Also we need to update the SLAB_MATCH() for compound_head to reflect the >> new ordering. >> >> While at it, also add a static_assert to check the alignment needed for >> cmpxchg_double so mistakes are found sooner than a runtime GPF. >> >> [1] https://lore.kernel.org/all/85afd876-d8bb-0804-b2c5-48ed3055e702@xxxxxxxxxxxxxxxxx/ >> >> Reported-by: Joel Fernandes <joel@xxxxxxxxxxxxxxxxx> >> Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> > > I've added patches 01 and 02 to slab tree for -next exposure before Joel's > full series posting, but it should be also ok if rcu tree carries them with > the whole patchset. I can then drop them from slab tree (there are no > dependencies with other stuff there) so we don't introduce duplicite commits > needlessly, just give me a heads up. Ah but in that case please apply the reviews from my posting [1] patch 1: Reviewed-by: Hyeonggon Yoo <42.hyeyoo@xxxxxxxxx> patch 2 Acked-by: Hyeonggon Yoo <42.hyeyoo@xxxxxxxxx> [1] https://lore.kernel.org/all/20220826090912.11292-1-vbabka@xxxxxxx/