From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41152) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XgFUh-0001yO-8N for qemu-devel@nongnu.org; Mon, 20 Oct 2014 12:07:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XgFUb-0007KP-1t for qemu-devel@nongnu.org; Mon, 20 Oct 2014 12:07:39 -0400 Received: from mx1.redhat.com ([209.132.183.28]:14764) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XgFUa-0007J1-QO for qemu-devel@nongnu.org; Mon, 20 Oct 2014 12:07:32 -0400 Date: Mon, 20 Oct 2014 18:07:24 +0200 From: Kevin Wolf Message-ID: <20141020160724.GS3585@noname.redhat.com> References: <201410202148499451733@sangfor.com> <20141020135955.GL3585@noname.redhat.com> <544525AA.6030609@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <544525AA.6030609@gmail.com> Subject: Re: [Qemu-devel] [question] savevm/delvm: Is it necessary to perform bdrv_drain_all before savevm and delvm? List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Zhang Haoyu Cc: Zhang Haoyu , qemu-devel , Stefan Hajnoczi , Max Reitz 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