On 19.01.22 12:11, Paolo Bonzini wrote:
On 1/5/22 12:13, Hanna Reitz wrote:
- assert(s->bus->dma->aiocb == NULL);
+
+        /*
+         * Wait for potentially still-scheduled BHs, like ide_trim_bh_cb() +         * (blk_drain() will only poll if there are in-flight requests on the +         * BlockBackend, which there may not necessarily be, e.g. when the
+         * guest has issued a zero-length TRIM request)
+         */
+        while (s->bus->dma->aiocb) {
+            bool progress = aio_poll(qemu_get_aio_context(), true);
+            assert(progress);
+        }


I think the right way to do this is to do  blk_inc_in_flight before scheduling the bottom half and blk_dec_in_flight in the BH callback. See virtio_blk_dma_restart_cb for an example.

Oh, yes, that sounds better.  Thanks!

Hanna


Reply via email to