diff options
author | Arnd Bergmann <arnd@arndb.de> | 2020-11-27 21:04:53 +0100 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2020-11-27 21:04:53 +0100 |
commit | 718e43b5f850a8fb52933ac5ecf29f5eef48a349 (patch) | |
tree | 7b300d58e0c4c654c62e9d9873097ad0a860367d /fs/btrfs/backref.c | |
parent | 85ccf83e5c5b032dad0d3b162f3408a7fc32c0e7 (diff) | |
parent | 3cea11cd5e3b00d91caf0b4730194039b45c5891 (diff) |
Backmerge tag 'v5.10-rc2' into arm/drivers
The SCMI pull request for the arm/drivers branch requires v5.10-rc2
because of dependencies with other git trees, so merge that in here.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'fs/btrfs/backref.c')
-rw-r--r-- | fs/btrfs/backref.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index b3268f4ea5f3..771a036867dc 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -544,7 +544,18 @@ static int resolve_indirect_ref(struct btrfs_fs_info *fs_info, int level = ref->level; struct btrfs_key search_key = ref->key_for_search; - root = btrfs_get_fs_root(fs_info, ref->root_id, false); + /* + * If we're search_commit_root we could possibly be holding locks on + * other tree nodes. This happens when qgroups does backref walks when + * adding new delayed refs. To deal with this we need to look in cache + * for the root, and if we don't find it then we need to search the + * tree_root's commit root, thus the btrfs_get_fs_root_commit_root usage + * here. + */ + if (path->search_commit_root) + root = btrfs_get_fs_root_commit_root(fs_info, path, ref->root_id); + else + root = btrfs_get_fs_root(fs_info, ref->root_id, false); if (IS_ERR(root)) { ret = PTR_ERR(root); goto out_free; |