• David Sterba's avatar
    btrfs: locking: use atomic for DREW lock writers · 0b548539
    David Sterba authored
    The DREW lock uses percpu variable to track lock counters and for that
    it needs to allocate the structure. In btrfs_read_tree_root() or
    btrfs_init_fs_root() this may add another error case or requires the
    NOFS scope protection.
    
    One way is to preallocate the structure as was suggested in
    https://lore.kernel.org/linux-btrfs/20221214021125.28289-1-robbieko@synology.com/
    
    We may avoid the allocation altogether if we don't use the percpu
    variables but an atomic for the writer counter. This should not make any
    difference, the DREW lock is used for truncate and NOCOW writes along
    with other IO operations.
    
    The percpu counter for writers has been there since the original commit
    8257b2dc "Btrfs: introduce btrfs_{start, end}_nocow_write() for
    each subvolume". The reason could be to avoid hammering the same
    cacheline from all the readers but then the writers do that anyway.
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    0b548539
locking.h 7.35 KB