From: Josef Bacik Date: Thu, 10 Sep 2015 20:02:03 +0000 (-0400) Subject: Btrfs: use btrfs_get_fs_root in resolve_indirect_ref X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6082125f4e568830c58c70afe9ce600502ed6786;p=linux Btrfs: use btrfs_get_fs_root in resolve_indirect_ref The backref code will look up the fs_root we're trying to resolve our indirect refs for, unfortunately we use btrfs_read_fs_root_no_name, which returns -ENOENT if the ref is 0. This isn't helpful for the qgroup stuff with snapshot delete as it won't be able to search down the snapshot we are deleting, which will cause us to miss roots. So use btrfs_get_fs_root and send false for check_ref so we can always get the root we're looking for. Thanks, Signed-off-by: Josef Bacik (cherry picked from commit 9476e6cfdffdb9d57f22cded973e7a0bf84c7dbe) (cherry picked from commit 471c5220693a1aa787b76489f8b6948b98733516) --- diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index 8474ae3cb71e..741bdb994e52 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -355,7 +355,7 @@ static int __resolve_indirect_ref(struct btrfs_fs_info *fs_info, index = srcu_read_lock(&fs_info->subvol_srcu); - root = btrfs_read_fs_root_no_name(fs_info, &root_key); + root = btrfs_get_fs_root(fs_info, &root_key, false); if (IS_ERR(root)) { srcu_read_unlock(&fs_info->subvol_srcu, index); ret = PTR_ERR(root);