• Stefan Behrens's avatar
    Btrfs: eliminate the exceptional root_tree refs=0 · 69e9c6c6
    Stefan Behrens authored
    The fact that btrfs_root_refs() returned 0 for the tree_root caused
    bugs in the past, therefore it is set to 1 with this patch and
    (hopefully) all affected code is adapted to this change.
    
    I verified this change by temporarily adding WARN_ON() checks
    everywhere where btrfs_root_refs() is used, checking whether the
    logic of the code is changed by btrfs_root_refs() returning 1
    instead of 0 for root->root_key.objectid == BTRFS_ROOT_TREE_OBJECTID.
    With these added checks, I ran the xfstests './check -g auto'.
    
    The two roots chunk_root and log_root_tree that are only referenced
    by the superblock and the log_roots below the log_root_tree still
    have btrfs_root_refs() == 0, only the tree_root is changed.
    Signed-off-by: default avatarStefan Behrens <sbehrens@giantdisaster.de>
    Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
    Signed-off-by: default avatarChris Mason <chris.mason@fusionio.com>
    69e9c6c6
inode-map.c 14.3 KB