diff options
author | Jiri Kosina <jkosina@suse.com> | 2024-03-13 21:17:33 +0100 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.com> | 2024-03-13 21:17:33 +0100 |
commit | 2e21dee6a46a66e4c2ced778485e1044101edee4 (patch) | |
tree | b9a9565cf9e3954ad316c343715b43b401c51074 /fs/btrfs/disk-io.c | |
parent | 9a5b1521e2d0d7ace70c6e5eed073babcec91409 (diff) | |
parent | 90184f90c9ac559062a04aca72e5d05730164de0 (diff) |
Merge branch 'for-6.9/amd-sfh' into for-linus
- assorted fixes and optimizations for amd-sfh (Basavaraj Natikar)
Signed-off-by: Jiri Kosina <jkosina@suse.com>
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r-- | fs/btrfs/disk-io.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index c6907d533fe8..e71ef97d0a7c 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1336,8 +1336,17 @@ static struct btrfs_root *btrfs_get_root_ref(struct btrfs_fs_info *fs_info, again: root = btrfs_lookup_fs_root(fs_info, objectid); if (root) { - /* Shouldn't get preallocated anon_dev for cached roots */ - ASSERT(!anon_dev); + /* + * Some other caller may have read out the newly inserted + * subvolume already (for things like backref walk etc). Not + * that common but still possible. In that case, we just need + * to free the anon_dev. + */ + if (unlikely(anon_dev)) { + free_anon_bdev(anon_dev); + anon_dev = 0; + } + if (check_ref && btrfs_root_refs(&root->root_item) == 0) { btrfs_put_root(root); return ERR_PTR(-ENOENT); |