Am 28.09.23 um 14:59 schrieb Fiona Ebner:
> + void bdrv_graph_wrlock(BlockDriverState *bs)
> + {
> +     AioContext *ctx = NULL;
> + 
> +     GLOBAL_STATE_CODE();
> ++    /*
> ++     * TODO Some callers hold an AioContext lock when this is called, which
> ++     * causes deadlocks. Reenable once the AioContext locking is cleaned up 
> (or
> ++     * AioContext locks are gone).
> ++     */
> ++#if 0
> +     assert(!qatomic_read(&has_writer));
> ++#endif
> + 
> +     /*
> +      * Release only non-mainloop AioContext. The mainloop often relies on 
> the
> +@@ -126,6 +137,7 @@ void bdrv_graph_wrlock(BlockDriverState *bs)
> +         }
> +     }
> + 
> ++#if 0
> +     /* Make sure that constantly arriving new I/O doesn't cause starvation 
> */
> +     bdrv_drain_all_begin_nopoll();
> + 
> +@@ -154,6 +166,7 @@ void bdrv_graph_wrlock(BlockDriverState *bs)
> +     } while (reader_count() >= 1);
> + 
> +     bdrv_drain_all_end();
> ++#endif
> + 
> +     if (ctx) {
> +         aio_context_acquire(bdrv_get_aio_context(bs));

I missed that there was another commit in between, so the #ifdeffery
doesn't get rid of the part releasing+acquiring the AioContext lock.
Should not be a real issue, but who knows.

I'll send a v2 to make it proper (and also want to pick another stable fix).


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to