• Filipe Manana's avatar
    btrfs: add and use helpers for reading and writing last_trans_committed · 0124855f
    Filipe Manana authored
    Currently the last_trans_committed field of struct btrfs_fs_info is
    modified and read without any locking or other protection. For example
    early in the fsync path, skip_inode_logging() is called which reads
    fs_info->last_trans_committed, but at the same time we can have a
    transaction commit completing and updating that field.
    
    In the case of an fsync this is harmless and any data race should be
    rare and at most cause an unnecessary logging of an inode.
    
    To avoid data race warnings from tools like KCSAN and other issues such
    as load and store tearing (amongst others, see [1]), create helpers to
    access the last_trans_committed field of struct btrfs_fs_info using
    READ_ONCE() and WRITE_ONCE(), and use these helpers everywhere.
    
    [1] https://lwn.net/Articles/793253/Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    0124855f
tree-checker.c 62.6 KB