From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:54311) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ugwf8-0000nL-2L for qemu-devel@nongnu.org; Mon, 27 May 2013 08:36:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ugwf0-0008SK-RU for qemu-devel@nongnu.org; Mon, 27 May 2013 08:36:30 -0400 Received: from mail-ee0-f51.google.com ([74.125.83.51]:46244) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ugwf0-0008SE-LD for qemu-devel@nongnu.org; Mon, 27 May 2013 08:36:22 -0400 Received: by mail-ee0-f51.google.com with SMTP id e51so3950847eek.24 for ; Mon, 27 May 2013 05:36:21 -0700 (PDT) Date: Mon, 27 May 2013 14:36:19 +0200 From: Stefan Hajnoczi Message-ID: <20130527123619.GD23204@stefanha-thinkpad.redhat.com> References: <20130524090516.GE21639@stefanha-thinkpad.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Subject: Re: [Qemu-devel] 'qemu-nbd' explicit flush List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Mark Trumpold Cc: Paolo Bonzini , "qemu-devel@nongnu.org" , "markt@tachyon.net" On Sat, May 25, 2013 at 09:42:08AM -0800, Mark Trumpold wrote: > On 5/24/13 1:05 AM, "Stefan Hajnoczi" wrote: > >On Thu, May 23, 2013 at 09:58:31PM +0000, Mark Trumpold wrote: > >One thing to be careful of is whether these operations are asynchronous. > >The signal is asynchronous, you have no way of knowing when qemu-nbd is > >finished flushing to the physical disk. > > Right, of course. I missed the obvious. I missed something too. Paolo may have already hinted at this when he posted a dd oflag=sync command-line option: blockdev --flushbufs is the wrong tool because ioctl(BLKFLSBUF) only writes out dirty pages to the block device. It does *not* guarantee to send a flush request to the device. Therefore, the underlying image file may not be put into an up-to-date state by qemu-nbd. I suggest trying the following instead of blockdev --flushbufs: python -c 'import os; os.fsync(open("/dev/loopX", "r+b"))' This should do the same as blockdev --flushbufs *plus* it sends and waits for the NBD FLUSH command. You may have to play with this command-line a little but the main idea is to open the block device and fsync it. Stefan