From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51113) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aIyph-0004mO-IB for qemu-devel@nongnu.org; Tue, 12 Jan 2016 08:18:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aIype-0006us-D3 for qemu-devel@nongnu.org; Tue, 12 Jan 2016 08:17:57 -0500 Received: from mx1.redhat.com ([209.132.183.28]:52935) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aIype-0006uo-6u for qemu-devel@nongnu.org; Tue, 12 Jan 2016 08:17:54 -0500 Date: Tue, 12 Jan 2016 21:17:51 +0800 From: Fam Zheng Message-ID: <20160112131751.GC3903@ad.usersys.redhat.com> References: <567A4EB0.1040807@parallels.com> <1450856816-9816-1-git-send-email-den@openvz.org> <1450856816-9816-2-git-send-email-den@openvz.org> <20160111173106.GL9454@noname.redhat.com> <56949140.1010800@openvz.org> <20160112101031.GB4841@noname.redhat.com> <20160112113331.GA16191@ad.usersys.redhat.com> <20160112122806.GC4841@noname.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160112122806.GC4841@noname.redhat.com> Subject: Re: [Qemu-devel] [PATCH 1/5] block: added lock image option and callback List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kevin Wolf Cc: qemu-devel@nongnu.org, Max Reitz , Olga Krishtal , "Denis V. Lunev" On Tue, 01/12 13:28, Kevin Wolf wrote: > Am 12.01.2016 um 12:33 hat Fam Zheng geschrieben: > > On Tue, 01/12 11:10, Kevin Wolf wrote: > > > > > > The problem is that libvirt already takes a lock, as Dan mentioned in > > > another reply in this thread, so we can't enable locking in qemu by > > > default. It would always fail when run under libvirt. > > > > > > Unless I'm seriously mistaken, this means that flock() inside qemu is > > > dead. > > > > Yes, I see the problem with libvirt, but can we instead do these? > > > > 1) Do a soft flock() in QEMU invocation. If it fails, sliently ignore. > > 2) Do a hard flock() in qemu-img invocation. If it fails, report and exit. > > > > This way, if libvirt is holding flock, we can assume libvirt is actually > > "using" the image: 1) just works as before, but 2) will not break the qcow2. > > That is still a slight improvement, and does solve the reckless "qemu-img > > snapshot create" user's problem. > > This makes two assumptions: > > 1. qemu is only ever invoked by libvirt > 2. qemu-img is only ever invoked by human users > > Both of them are wrong. 1. just means that manually started QEMUs are > unprotected (which is already bad), but 2. means that qemu-img called by > libvirt fails (which is obviously not acceptable). No, my assumptions are: a. libvirt calls flock() when invoking qemu; b. libvirt doesn't call flock() when invoking qemu-img; (if I read the libvirt code correctly, input from libvirt folks needed); So, 1. means that multiple manually started QEMU instances writing to the same image are NOT protected, that's the limitation. 2. means that qemu-img called by either libvirt or a human user is prevented from corrupting an in-use qcow2. As long as I'm not wrong about b. Fam