]> git.proxmox.com Git - mirror_qemu.git/commit - block/qcow2.c
qcow2: Fix open with 'file' in iothread
authorKevin Wolf <kwolf@redhat.com>
Thu, 25 May 2023 12:47:07 +0000 (14:47 +0200)
committerKevin Wolf <kwolf@redhat.com>
Tue, 30 May 2023 15:21:23 +0000 (17:21 +0200)
commitaa269ff888d70158fe0c26ed17814046bdc19bd5
tree163e0772a46d4f46622c1fae63e9963dd8cfd06c
parent2626d27f50f3c993936db04bc6e92d553e1dc914
qcow2: Fix open with 'file' in iothread

qcow2_open() doesn't work correctly when opening the 'file' child moves
bs to an iothread, for several reasons:

- It uses BDRV_POLL_WHILE() to wait for the qcow2_open_entry()
  coroutine, which involves dropping the AioContext lock for bs when it
  is not in the main context - but we don't hold it, so this crashes.

- It runs the qcow2_open_entry() coroutine in the current thread instead
  of the new AioContext of bs.

- qcow2_open_entry() doesn't notify the main loop when it's done.

This patches fixes these issues around delegating work to a coroutine.
Temporarily dropping the main AioContext lock is not necessary because
we know we run in the main thread.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-Id: <20230525124713.401149-7-kwolf@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
block.c
block/qcow2.c