Message ID | 20230510203601.418015-5-kwolf@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | block: Honour graph read lock even in the main thread | expand |
On Wed, May 10, 2023 at 10:35:57PM +0200, Kevin Wolf wrote: > > If we take a reader lock, we can't call any functions that take a writer > lock internally without causing deadlocks once the reader lock is > actually enforced in the main thread, too. Take the reader lock only > where it is actually needed. > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> > --- > qemu-img.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) Reviewed-by: Eric Blake <eblake@redhat.com>
diff --git a/qemu-img.c b/qemu-img.c index 9f9f0a7629..27f48051b0 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -2938,8 +2938,6 @@ static BlockGraphInfoList *collect_image_info_list(bool image_opts, } bs = blk_bs(blk); - GRAPH_RDLOCK_GUARD_MAINLOOP(); - /* * Note that the returned BlockGraphInfo object will not have * information about this image's backing node, because we have opened @@ -2947,7 +2945,10 @@ static BlockGraphInfoList *collect_image_info_list(bool image_opts, * duplicate the backing chain information that we obtain by walking * the chain manually here. */ + bdrv_graph_rdlock_main_loop(); bdrv_query_block_graph_info(bs, &info, &err); + bdrv_graph_rdunlock_main_loop(); + if (err) { error_report_err(err); blk_unref(blk);
If we take a reader lock, we can't call any functions that take a writer lock internally without causing deadlocks once the reader lock is actually enforced in the main thread, too. Take the reader lock only where it is actually needed. Signed-off-by: Kevin Wolf <kwolf@redhat.com> --- qemu-img.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)