Am 20.10.2014 um 17:09 hat Zhang Haoyu geschrieben: > >> Hi, > >> > >> I noticed that bdrv_drain_all is performed in load_vmstate before > bdrv_snapshot_goto, > >> and bdrv_drain_all is performed in qmp_transaction before > internal_snapshot_prepare, > >> so is it also neccesary to perform bdrv_drain_all in savevm and delvm? > > > >Definitely yes for savevm. do_savevm() calls it indirectly via > >vm_stop(), so that part looks okay. > > > Yes, you are right. > > >delvm doesn't affect the currently running VM, and therefore doesn't > >interfere with guest requests that are in flight. So I think that a > >bdrv_drain_all() isn't needed there. > > > I'm worried about that there are still pending IOs while deleting snapshot, > then is it possible that there is concurrency problem between the > process of deleting snapshot > and the coroutine of io read/write(bdrv_co_do_rw) invoked by the > pending IOs? > This coroutine is also in main thread. > Am I missing something?
What kind of concurrency problem are you thinking of? I do see that there might be a chance of concurrency, but that doesn't automatically mean the requests are conflicting. Would you feel better with taking s->lock in qcow2_snapshot_delete()? This might actually be a valid concern. Kevin