• Josef Bacik's avatar
    btrfs: free data reloc tree on failed mount · 9e3aa805
    Josef Bacik authored
    While testing a weird problem with -o degraded, I noticed I was getting
    leaked root errors
    
      BTRFS warning (device loop0): writable mount is not allowed due to too many missing devices
      BTRFS error (device loop0): open_ctree failed
      BTRFS error (device loop0): leaked root -9-0 refcount 1
    
    This is the DATA_RELOC root, which gets read before the other fs roots,
    but is included in the fs roots radix tree.  Handle this by adding a
    btrfs_drop_and_free_fs_root() on the data reloc root if it exists.  This
    is ok to do here if we fail further up because we will only drop the ref
    if we delete the root from the radix tree, and all other cleanup won't
    be duplicated.
    
    CC: stable@vger.kernel.org # 5.8+
    Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
    Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    9e3aa805
disk-io.c 130 KB