On Fri, 2024-07-12 at 08:38 -1000, tj@xxxxxxxxxx wrote: > > External email : Please do not click links or open attachments until > you have verified the sender or the content. > Hello, Boy. > > On Fri, Jul 12, 2024 at 01:39:51AM +0000, Boy Wu (吳勃誼) wrote: > ... > > I agree, but for multiple updaters, we not only need a spin lock > but > > also need u64_sync for 32bit SMP systems because u64_stats_fetch is > not > > protected by the spin lock blkg_stat_lock. If removing u64 sync, > then > > one CPU fetches data while another CPU is updating, may get a 64 > bits > > data with only 32 bits updated, while the other 32 bits are not > updated > > yet. We can see that blkcg_iostats_update is protected by both > u64_sync > > and the spin lock blkg_stat_lock in __blkcg_rstat_flush. > > Thus, I think we should keep the u64_sync and just add the spin > > lock blkg_stat_lock, not replace u64_sync with the spin lock. > > I don't get it. The only reader of blkg->iostat is > blkcg_print_one_stat(). > It can just grab the same spin lock that the updaters use, right? Why > do we > also need u64_sync for blkg->iostat? > > Thanks. > > -- > tejun I think I get your idea. You want to replace all the u64 sync for iostat. However, I have one question: why use blkg_stat_lock instead of adding a spin lock for each iostat like iostat.spinlock? We don't need to lock between updating different iostats, but only lock when updating the same iostat. -- Boy.Wu