Message ID | 20190723091911.19598-1-naohiro.aota@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs-progs: check: initialize qgroup_item_count in earlier stage | expand |
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.aota@wdc.com> Reviewed-by: Qu Wenruo <wqu@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 { >
On Tue, Jul 23, 2019 at 06:19:11PM +0900, 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.aota@wdc.com> Applied, thanks.
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 {
"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> --- check/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)