summaryrefslogtreecommitdiffstats
path: root/mm/dmapool.c
diff options
context:
space:
mode:
authorVlastimil Babka <vbabka@suse.cz>2022-08-26 11:09:11 +0200
committerVlastimil Babka <vbabka@suse.cz>2022-10-24 16:49:55 +0200
commitbc29d5bd2ba977716e57572030290d6547ff3f6d (patch)
tree45ddfd8c7def630b94a8c880c1970babe657395d /mm/dmapool.c
parent247f34f7b80357943234f93f247a1ae6b6c3a740 (diff)
downloadlinux-bc29d5bd2ba977716e57572030290d6547ff3f6d.tar.gz
linux-bc29d5bd2ba977716e57572030290d6547ff3f6d.tar.bz2
linux-bc29d5bd2ba977716e57572030290d6547ff3f6d.zip
mm/slub: perform free consistency checks before call_rcu
For SLAB_TYPESAFE_BY_RCU caches we use call_rcu to perform empty slab freeing. The rcu callback rcu_free_slab() calls __free_slab() that currently includes checking the slab consistency for caches with SLAB_CONSISTENCY_CHECKS flags. This check needs the slab->objects field to be intact. Because in the next patch we want to allow rcu_head in struct slab to become larger in debug configurations and thus potentially overwrite more fields through a union than slab_list, we want to limit the fields used in rcu_free_slab(). Thus move the consistency checks to free_slab() before call_rcu(). This can be done safely even for SLAB_TYPESAFE_BY_RCU caches where accesses to the objects can still occur after freeing them. As a result, only the slab->slab_cache field has to be physically separate from rcu_head for the freeing callback to work. We also save some cycles in the rcu callback for caches with consistency checks enabled. Signed-off-by: Vlastimil Babka <vbabka@suse.cz> Reviewed-by: Hyeonggon Yoo <42.hyeyoo@gmail.com>
Diffstat (limited to 'mm/dmapool.c')
0 files changed, 0 insertions, 0 deletions