• Chris Mason's avatar
    Btrfs: Fix locking around adding new space_info · 4184ea7f
    Chris Mason authored
    Storage allocated to different raid levels in btrfs is tracked by
    a btrfs_space_info structure, and all of the current space_infos are
    collected into a list_head.
    Most filesystems have 3 or 4 of these structs total, and the list is
    only changed when new raid levels are added or at unmount time.
    This commit adds rcu locking on the list head, and properly frees
    things at unmount time.  It also clears the space_info->full flag
    whenever new space is added to the FS.
    The locking for the space info list goes like this:
    reads: protected by rcu_read_lock()
    writes: protected by the chunk_mutex
    At unmount time we don't need special locking because all the readers
    are gone.
    Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
ctree.h 69.6 KB