Skip to content

Commit fb62b58

Browse files
Vladimir Sementsov-Ogievskiykevmw
authored andcommitted
block/vvfat: child_vvfat_qcow: add .get_parent_aio_context, fix crash
Commit 3ca1f32 "block: BdrvChildClass: add .get_parent_aio_context handler" introduced new handler and commit 228ca37 "block: drop ctx argument from bdrv_root_attach_child" made a generic use of it. But 3ca1f32 didn't update child_vvfat_qcow. Fix that. Before that fix the command ./build/qemu-system-x86_64 -usb -device usb-storage,drive=fat16 \ -drive file=fat:rw:fat-type=16:"<path of a host folder>",id=fat16,format=raw,if=none crashes: 1 bdrv_child_get_parent_aio_context (c=0x559d62426d20) at ../block.c:1440 2 bdrv_attach_child_common (child_bs=0x559d62468190, child_name=0x559d606f9e3d "write-target", child_class=0x559d60c58d20 <child_vvfat_qcow>, child_role=3, perm=3, shared_perm=4, opaque=0x559d62445690, child=0x7ffc74c2acc8, tran=0x559d6246ddd0, errp=0x7ffc74c2ae60) at ../block.c:2795 3 bdrv_attach_child_noperm (parent_bs=0x559d62445690, child_bs=0x559d62468190, child_name=0x559d606f9e3d "write-target", child_class=0x559d60c58d20 <child_vvfat_qcow>, child_role=3, child=0x7ffc74c2acc8, tran=0x559d6246ddd0, errp=0x7ffc74c2ae60) at ../block.c:2855 4 bdrv_attach_child (parent_bs=0x559d62445690, child_bs=0x559d62468190, child_name=0x559d606f9e3d "write-target", child_class=0x559d60c58d20 <child_vvfat_qcow>, child_role=3, errp=0x7ffc74c2ae60) at ../block.c:2953 5 bdrv_open_child (filename=0x559d62464b80 "/var/tmp/vl.h3TIS4", options=0x559d6246ec20, bdref_key=0x559d606f9e3d "write-target", parent=0x559d62445690, child_class=0x559d60c58d20 <child_vvfat_qcow>, child_role=3, allow_none=false, errp=0x7ffc74c2ae60) at ../block.c:3351 6 enable_write_target (bs=0x559d62445690, errp=0x7ffc74c2ae60) at ../block/vvfat.c:3176 7 vvfat_open (bs=0x559d62445690, options=0x559d6244adb0, flags=155650, errp=0x7ffc74c2ae60) at ../block/vvfat.c:1236 8 bdrv_open_driver (bs=0x559d62445690, drv=0x559d60d4f7e0 <bdrv_vvfat>, node_name=0x0, options=0x559d6244adb0, open_flags=155650, errp=0x7ffc74c2af70) at ../block.c:1557 9 bdrv_open_common (bs=0x559d62445690, file=0x0, options=0x559d6244adb0, errp=0x7ffc74c2af70) at ... (gdb) fr 1 #1 0x0000559d603ea3bf in bdrv_child_get_parent_aio_context (c=0x559d62426d20) at ../block.c:1440 1440 return c->klass->get_parent_aio_context(c); (gdb) p c->klass $1 = (const BdrvChildClass *) 0x559d60c58d20 <child_vvfat_qcow> (gdb) p c->klass->get_parent_aio_context $2 = (AioContext *(*)(BdrvChild *)) 0x0 Fixes: 3ca1f32 Fixes: 228ca37 Reported-by: John Arbuckle <programmingkidx@gmail.com> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20210524101257.119377-2-vsementsov@virtuozzo.com> Tested-by: John Arbuckle <programmingkidx@gmail.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
1 parent 8eaf101 commit fb62b58

File tree

3 files changed

+4
-2
lines changed

3 files changed

+4
-2
lines changed

block.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1412,7 +1412,7 @@ static int bdrv_child_cb_update_filename(BdrvChild *c, BlockDriverState *base,
14121412
return 0;
14131413
}
14141414

1415-
static AioContext *bdrv_child_cb_get_parent_aio_context(BdrvChild *c)
1415+
AioContext *child_of_bds_get_parent_aio_context(BdrvChild *c)
14161416
{
14171417
BlockDriverState *bs = c->opaque;
14181418

@@ -1432,7 +1432,7 @@ const BdrvChildClass child_of_bds = {
14321432
.can_set_aio_ctx = bdrv_child_cb_can_set_aio_ctx,
14331433
.set_aio_ctx = bdrv_child_cb_set_aio_ctx,
14341434
.update_filename = bdrv_child_cb_update_filename,
1435-
.get_parent_aio_context = bdrv_child_cb_get_parent_aio_context,
1435+
.get_parent_aio_context = child_of_bds_get_parent_aio_context,
14361436
};
14371437

14381438
AioContext *bdrv_child_get_parent_aio_context(BdrvChild *c)

block/vvfat.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3130,6 +3130,7 @@ static void vvfat_qcow_options(BdrvChildRole role, bool parent_is_format,
31303130
static const BdrvChildClass child_vvfat_qcow = {
31313131
.parent_is_bds = true,
31323132
.inherit_options = vvfat_qcow_options,
3133+
.get_parent_aio_context = child_of_bds_get_parent_aio_context,
31333134
};
31343135

31353136
static int enable_write_target(BlockDriverState *bs, Error **errp)

include/block/block.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -701,6 +701,7 @@ bool bdrv_child_can_set_aio_context(BdrvChild *c, AioContext *ctx,
701701
bool bdrv_can_set_aio_context(BlockDriverState *bs, AioContext *ctx,
702702
GSList **ignore, Error **errp);
703703
AioContext *bdrv_child_get_parent_aio_context(BdrvChild *c);
704+
AioContext *child_of_bds_get_parent_aio_context(BdrvChild *c);
704705

705706
int bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz);
706707
int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo);

0 commit comments

Comments
 (0)