On 2019/7/23 下午5:19, Naohiro Aota wrote:
> "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.a...@wdc.com>

Reviewed-by: Qu Wenruo <w...@suse.com>

Thanks,
Qu

> ---
>  check/main.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/check/main.c b/check/main.c
> index bb57933b83fc..7248a8209532 100644
> --- a/check/main.c
> +++ b/check/main.c
> @@ -9965,6 +9965,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) {
> @@ -10291,7 +10292,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 {
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to