Hi Tejun, On 2019/4/16 下午11:04, Tejun Heo wrote: > Hello, Jiufei. > > On Tue, Apr 16, 2019 at 08:09:02PM +0800, Jiufei Xue wrote: >> synchronize_rcu() didn't wait for call_rcu() callbacks, so inode wb >> switch may not go to the workqueue after synchronize_rcu(). Thus >> previous scheduled switches was not finished even flushing the >> workqueue, which will cause a NULL pointer dereferenced followed below. > > Isn't all that's needed replacing the synchronize_rcu() call with a > rcu_barrier() call? > 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. Thanks, Jiufei > Thanks. >