On Fri, Aug 13, 2021 at 6:34 PM Xiao Ni <xni@xxxxxxxxxx> wrote: > > Hi Song > > It can improve the performance. It needs to add rcu lock when calling > rcu_dereference. > Now it has a bug. It doesn't use rcu lock to protect. In the second > loop, it doesn't need > to use rcu_dereference when getting rdev. So to resolve this bug, we can remove > rcu_dereference directly. In the second loop, we only use rdev and rrdev when bio and repl_bio exists. So we shouldn't trigger the "bug" in any cases, right? Please: 1) If you do think this is a bug, add a fix tag, so we can back port to stable. (while I still think it is not a real bug). 2) move struct md_rdev *rdev = rcu_dereference(conf->mirrors[disk].rdev); to under "if (r10_bio->devs[disk].bio)"; and the rrdev ... to "if (repl_bio)". And add a comment there so it is more clear in the code. Thanks, Song