From 8ca6c0c3c71815bd3ee4f2b0854532fd3b53a4fa Mon Sep 17 00:00:00 2001 From: Naohiro Aota Date: Tue, 23 Jul 2019 18:19:11 +0900 Subject: [PATCH] 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 Reviewed-by: Qu Wenruo Signed-off-by: David Sterba --- check/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check/main.c b/check/main.c index 8b340e5e..0cc6fdba 100644 --- a/check/main.c +++ b/check/main.c @@ -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 {