diff options
author | Liu Bo <bo.li.liu@oracle.com> | 2016-09-01 01:43:33 +0200 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2016-09-01 17:16:47 +0200 |
commit | a9b1fc851db054ddec703dc7951ed00620600b26 (patch) | |
tree | a1a6ffb52cf194aa5593f848a665ae9bf7fa4c5f /fs/btrfs/relocation.c | |
parent | Btrfs: kill invalid ASSERT() in process_all_refs() (diff) | |
download | linux-a9b1fc851db054ddec703dc7951ed00620600b26.tar.xz linux-a9b1fc851db054ddec703dc7951ed00620600b26.zip |
Btrfs: fix endless loop in balancing block groups
Qgroup function may overwrite the saved error 'err' with 0
in case quota is not enabled, and this ends up with a
endless loop in balance because we keep going back to balance
the same block group.
It really should use 'ret' instead.
Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Reviewed-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to '')
-rw-r--r-- | fs/btrfs/relocation.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 8a2c2a07987b..c0c13dc6fe12 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -4200,9 +4200,11 @@ restart: err = PTR_ERR(trans); goto out_free; } - err = qgroup_fix_relocated_data_extents(trans, rc); - if (err < 0) { - btrfs_abort_transaction(trans, err); + ret = qgroup_fix_relocated_data_extents(trans, rc); + if (ret < 0) { + btrfs_abort_transaction(trans, ret); + if (!err) + err = ret; goto out_free; } btrfs_commit_transaction(trans, rc->extent_root); |