20.11.2020 19:36, Kevin Wolf wrote:
Am 20.11.2020 um 17:16 hat Vladimir Sementsov-Ogievskiy geschrieben:
Hi all!
As Peter recently noted, iotest 30 accidentally fails.
I found that Qemu crashes due to interleaving of graph-update
operations of parallel mirror and stream block-jobs.
I haven't found the time yet to properly look into this or your other
thread where you had a similar question, but there is one thing I'm
wondering: Why can the nested job even make progress and run its
completion handler?
When we modify the graph, we should have drained the subtree in
question, so in theory while one job finishes and modifies the graph,
there should be no way for the other job to make progress and get
interleaved - it shouldn't be able to start I/O requests and much less
to run its completion handler and modify the graph.
Are we missing drained sections somewhere or do they fail to achieve
what I think they should achieve?
It all looks like both jobs are reached their finish simultaneously. So, all
progress is done in both jobs. And they go concurrently to completion
procedures which interleaves. So, there no more io through blk, which is
restricted by drained sections.
--
Best regards,
Vladimir