diff options
author | Josef Bacik <josef@toxicpanda.com> | 2021-03-12 15:25:19 -0500 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2021-04-19 17:25:21 +0200 |
commit | bbae13f8ab22fb997403ee8a67f87432f4751a8d (patch) | |
tree | 263034fe4e33363791401cc0cd55f098670da354 /fs/btrfs/relocation.c | |
parent | 7934133fae5ea08346b224ecabffdbf14dd076c6 (diff) | |
download | lwn-bbae13f8ab22fb997403ee8a67f87432f4751a8d.tar.gz lwn-bbae13f8ab22fb997403ee8a67f87432f4751a8d.zip |
btrfs: handle btrfs_update_reloc_root failure in prepare_to_merge
btrfs_update_reloc_root will will return errors in the future, so handle
an error properly in prepare_to_merge.
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/relocation.c')
-rw-r--r-- | fs/btrfs/relocation.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 69f170b47a0e..ca97412d7262 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1870,10 +1870,21 @@ again: */ if (!err) btrfs_set_root_refs(&reloc_root->root_item, 1); - btrfs_update_reloc_root(trans, root); + ret = btrfs_update_reloc_root(trans, root); + /* + * Even if we have an error we need this reloc root back on our + * list so we can clean up properly. + */ list_add(&reloc_root->root_list, &reloc_roots); btrfs_put_root(root); + + if (ret) { + btrfs_abort_transaction(trans, ret); + if (!err) + err = ret; + break; + } } list_splice(&reloc_roots, &rc->reloc_roots); |