Hello, On Wed, Apr 17, 2019 at 09:04:48AM +0800, Jiufei Xue wrote: > Yes, it can be fixed if we replace synchronize_rcu() with rcu_barrier(). > However, I'm worried that rcu_barrier() is too heavyweight and we have > encountered some hung tasks that rcu_barrier() waiting for callbacks that > other drivers queued but not handled correctly. rcu_barrier() wait for the pending callbacks to finish and none of the callbacks can block, so I don't think it'd be much worse than synchronize_rcu(). Also, it'd probably make sense to inc isw_nr_in_flight after call_rcu() in inode_switch_wbs(). Given that all inodes must be gone by umount, the actual race window isn't there but that ordering still makes a lot more sense. Thanks. -- tejun