• N
    btrfs: Fix memory barriers usage with device stats counters · 9deae968
    Nikolay Borisov 提交于
    Commit addc3fa7 ("Btrfs: Fix the problem that the dirty flag of dev
    stats is cleared") reworked the way device stats changes are tracked. A
    new atomic dev_stats_ccnt counter was introduced which is incremented
    every time any of the device stats counters are changed. This serves as
    a flag whether there are any pending stats changes. However, this patch
    only partially implemented the correct memory barriers necessary:
    
    - It only ordered the stores to the counters but not the reads e.g.
      btrfs_run_dev_stats
    - It completely omitted any comments documenting the intended design and
      how the memory barriers pair with each-other
    
    This patch provides the necessary comments as well as adds a missing
    smp_rmb in btrfs_run_dev_stats. Furthermore since dev_stats_cnt is only
    a snapshot at best there was no point in reading the counter twice -
    once in btrfs_dev_stats_dirty and then again when assigning stats_cnt.
    Just collapse both reads into 1.
    
    Fixes: addc3fa7 ("Btrfs: Fix the problem that the dirty flag of dev stats is cleared")
    Signed-off-by: NNikolay Borisov <nborisov@suse.com>
    Reviewed-by: NMathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Reviewed-by: NDavid Sterba <dsterba@suse.com>
    Signed-off-by: NDavid Sterba <dsterba@suse.com>
    9deae968
volumes.h 16.2 KB