• Filipe Manana's avatar
    btrfs: remove inode_lock from struct btrfs_root and use xarray locks · e2844cce
    Filipe Manana authored
    Currently we use the spinlock inode_lock from struct btrfs_root to
    serialize access to two different data structures:
    
    1) The delayed inodes xarray (struct btrfs_root::delayed_nodes);
    2) The inodes xarray (struct btrfs_root::inodes).
    
    Instead of using our own lock, we can use the spinlock that is part of the
    xarray implementation, by using the xa_lock() and xa_unlock() APIs and
    using the xarray APIs with the double underscore prefix that don't take
    the xarray locks and assume the caller is using xa_lock() and xa_unlock().
    
    So remove the spinlock inode_lock from struct btrfs_root and use the
    corresponding xarray locks. This brings 2 benefits:
    
    1) We reduce the size of struct btrfs_root, from 1336 bytes down to
       1328 bytes on a 64 bits release kernel config;
    
    2) We reduce lock contention by not using anymore the same lock for
       changing two different and unrelated xarrays.
    Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
    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>
    e2844cce
delayed-inode.c 61.8 KB