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