diff options
| author | Qu Wenruo <wqu@suse.com> | 2026-10-01 14:46:15 +0930 |
|---|---|---|
| committer | David Sterba <dsterba@suse.com> | 2026-10-12 19:16:24 +0200 |
| commit | dd906477cc2c33c82ec17e6301bd4be4ea588565 (patch) | |
| tree | 65975e622dd2703fa9843ee5bb5181b8e3f57cd7 /tools/perf/scripts/python/stackcollapse.py | |
| parent | 95e3b8dc32179b9d2895fca5605d11a763e9d658 (diff) | |
| download | linux-dd906477cc2c33c82ec17e6301bd4be4ea588565.tar.gz linux-dd906477cc2c33c82ec17e6301bd4be4ea588565.zip | |
btrfs: qgroup: do not treat "ret > 0" as error when deleting a qgroup
[BUG]
There is a bug report that when removing a child qgroup, if removing the
qgroup requires a rescan, it will delete the on-disk relation and qgroup
items but not the in-memory qgroup rb entry.
This makes all later qgroup rescan to fail.
[CAUSE]
The call chain looks like the following:
btrfs_remove_qgroup()
|- __del_qgroup_relation()
| |- quick_update_accounting()
| Which returns 1, showing this operation will require
| a qgroup rescan
|- if (ret) goto out;
Which skips the del_qgroup_rb() call, leaving the in-memory qgroup
rb entry still intact.
Then later qgroup rescan/update will always fail and mark qgroup
inconsistent:
btrfs_run_qgroups()
|- update_qgroup_info_item()
| |- btrfs_search_slot()
| Which returns -ENOENT, as the qgroup info item is already
| deleted.
|- qgroup_mark_inconsistent()
|- return -ENOENT;
[FIX]
Do not treat "ret > 0" as an error.
Reported-by: c.f.a@posteo.de
Link: https://lore.kernel.org/linux-btrfs/14846642-85d3-4afb-ad99-1b74b22f5f90@posteo.de/
Fixes: 9c8b35b1ba21 ("btrfs: quota: Automatically update related qgroups or mark INCONSISTENT flags when assigning/deleting a qgroup relations.")
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'tools/perf/scripts/python/stackcollapse.py')
0 files changed, 0 insertions, 0 deletions
