On Wed 01-08-18 10:46:35, Dmitry Vyukov wrote: > I guess it would be useful to have such extensive comment for each > SLAB_TYPESAFE_BY_RCU use explaining why it is needed and how all the > tricky aspects are handled. > > For example, the one in jbd2 is interesting because it memsets the > whole object before freeing it into SLAB_TYPESAFE_BY_RCU slab: > > memset(jh, JBD2_POISON_FREE, sizeof(*jh)); > kmem_cache_free(jbd2_journal_head_cache, jh); > > I guess there are also tricky ways how it can all work in the end > (type-stable state is only a byte, or we check for all possible > combinations of being overwritten with JBD2_POISON_FREE). But at first > sight it does look fishy. The RCU access is used from a single place: fs/jbd2/transaction.c: jbd2_write_access_granted() There are also quite some comments explaining why what it does is safe. The overwrite by JBD2_POISON_FREE is much older than this RCU stuff (honestly I didn't know about it until this moment) and has nothing to do with the safety of RCU access. Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR