block: Fix AioContext locking in qmp_block_resize()
The AioContext must be unlocked before calling blk_co_unref(), because
it takes the AioContext lock internally in blk_unref_bh(), which is
scheduled in the main thread. If we don't unlock, the AioContext is
locked twice and nested event loops such as in bdrv_graph_wrlock() will
deadlock.
Cc: <qemu-stable@nongnu.org>
Fixes: https://issues.redhat.com/browse/RHEL-15965
Fixes: 0c7d204f50
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-ID: <20231208124352.30295-1-kwolf@redhat.com>
This commit is contained in:
parent
eaae59af40
commit
755ae3811f
@ -2400,8 +2400,9 @@ void coroutine_fn qmp_block_resize(const char *device, const char *node_name,
|
|||||||
|
|
||||||
bdrv_co_lock(bs);
|
bdrv_co_lock(bs);
|
||||||
bdrv_drained_end(bs);
|
bdrv_drained_end(bs);
|
||||||
blk_co_unref(blk);
|
|
||||||
bdrv_co_unlock(bs);
|
bdrv_co_unlock(bs);
|
||||||
|
|
||||||
|
blk_co_unref(blk);
|
||||||
}
|
}
|
||||||
|
|
||||||
void qmp_block_stream(const char *job_id, const char *device,
|
void qmp_block_stream(const char *job_id, const char *device,
|
||||||
|
Loading…
Reference in New Issue
Block a user