Hello, Joonsoo. On Tue, Jan 17, 2017 at 09:07:54AM +0900, Joonsoo Kim wrote: > Long time no see! :) Yeah, happy new year! > IIUC, rcu_barrier() here prevents to destruct the kmem_cache until all > slab pages in it are freed. These slab pages are freed through call_rcu(). Hmm... why do we need that tho? SLAB_DESTROY_BY_RCU only needs to protect the slab pages, not kmem cache struct. I thought that this was because kmem cache destruction is allowed to release pages w/o RCU delaying it. > Your patch changes it to another call_rcu() and, I think, if sequence of > executing rcu callbacks is the same with sequence of adding rcu > callbacks, it would work. However, I'm not sure that it is > guaranteed by RCU API. Am I missing something? The call sequence doesn't matter. Whether you're using call_rcu() or rcu_barrier(), you're just waiting for a grace period to pass before continuing. It doens't give any other ordering guarantees, so the new code should be equivalent to the old one except for being asynchronous. Thanks. -- tejun -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>