btrfs-progs: check: initialize qgroup_item_count in earlier stage

"btrfsck -Q" segfaults because it does not call qgroup_set_item_count_ptr()
properly:

  # btrfsck -Q /dev/sdk
  Opening filesystem to check...
  Checking filesystem on /dev/sdk
  UUID: 34a35bbc-43f8-40f0-8043-65ed33f2e6c3
  Print quota groups for /dev/sdk
  UUID: 34a35bbc-43f8-40f0-8043-65ed33f2e6c3
  Segmentation fault (core dumped)

Since "struct task_ctx ctx" is global, we can just move
qgroup_set_item_count_ptr() much earlier stage in the check process to
avoid to forget initializing it.

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Naohiro Aota 2019-07-23 18:19:11 +09:00 committed by David Sterba
parent 27049a1e77
commit 8ca6c0c3c7
1 changed files with 1 additions and 1 deletions

View File

@ -9978,6 +9978,7 @@ static int cmd_check(const struct cmd_struct *cmd, int argc, char **argv)
radix_tree_init();
cache_tree_init(&root_cache);
qgroup_set_item_count_ptr(&ctx.item_count);
ret = check_mounted(argv[optind]);
if (!force) {
@ -10304,7 +10305,6 @@ static int cmd_check(const struct cmd_struct *cmd, int argc, char **argv)
}
if (info->quota_enabled) {
qgroup_set_item_count_ptr(&ctx.item_count);
if (!ctx.progress_enabled) {
fprintf(stderr, "[7/7] checking quota groups\n");
} else {