From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60924) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WYnP0-0003JJ-V7 for qemu-devel@nongnu.org; Fri, 11 Apr 2014 22:10:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WYnOv-0002X3-NQ for qemu-devel@nongnu.org; Fri, 11 Apr 2014 22:10:42 -0400 Received: from youngberry.canonical.com ([91.189.89.112]:54962) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WYnOv-0002Wv-HO for qemu-devel@nongnu.org; Fri, 11 Apr 2014 22:10:37 -0400 Date: Fri, 11 Apr 2014 21:10:26 -0500 From: Serge Hallyn Message-ID: <20140412021026.GA4869@sergelap> References: <1397205095-29830-1-git-send-email-mjt@msgid.tls.msk.ru> <53489BF0.6090009@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <53489BF0.6090009@redhat.com> Subject: Re: [Qemu-devel] [PATCH for-2.0] kvm_physical_sync_dirty_bitmap: ignore ENOENT from kvm_vm_ioctl List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: Peter Maydell , Michael Tokarev , qemu-devel@nongnu.org, Mario Smarduch Quoting Paolo Bonzini (pbonzini@redhat.com): > Il 11/04/2014 04:31, Michael Tokarev ha scritto: > >ENOENT means the kernel has an empty dirty bitmap for this > >slot. Don't abort in that case. This appears to solve > >the bug reported at > > > >https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1303926 > > > >which first showed up with commit b533f658a98325d: fix return > >check for KVM_GET_DIRTY_LOG ioctl > > > >Cc: Serge Hallyn > >Signed-off-by: Michael Tokarev > >--- > > kvm-all.c | 10 ++++++++-- > > 1 file changed, 8 insertions(+), 2 deletions(-) > > > >diff --git a/kvm-all.c b/kvm-all.c > >index cd4111d..47fa948 100644 > >--- a/kvm-all.c > >+++ b/kvm-all.c > >@@ -441,13 +441,19 @@ static int kvm_physical_sync_dirty_bitmap(MemoryRegionSection *section) > > > > d.slot = mem->slot; > > > >- if (kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) < 0) { > >+ ret = kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d); > >+ if (ret >= 0) { > >+ /* regular case, process returned bitmap */ > >+ kvm_get_dirty_pages_log_range(section, d.dirty_bitmap); > >+ } else if (ret == -ENOENT) { > >+ /* kernel does not have dirty bitmap in this slot */ > >+ ret = 0; > >+ } else { > > DPRINTF("ioctl failed %d\n", errno); > > ret = -1; > > break; > > } > > > >- kvm_get_dirty_pages_log_range(section, d.dirty_bitmap); > > start_addr = mem->start_addr + mem->memory_size; > > } > > g_free(d.dirty_bitmap); > > > > I'd rather revert b533f658a98325d instead. That seems wrong though. If we want to ignore all errors that's one thing, but before that commit we just ignored all errors other than EPERM.