From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56794) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c4kL1-0007HJ-Qr for qemu-devel@nongnu.org; Thu, 10 Nov 2016 03:04:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c4kL0-0004E9-TN for qemu-devel@nongnu.org; Thu, 10 Nov 2016 03:03:59 -0500 Date: Thu, 10 Nov 2016 09:03:46 +0100 From: Kevin Wolf Message-ID: <20161110080346.GB4981@noname.redhat.com> References: <1478645535-21236-1-git-send-email-eblake@redhat.com> <20161109134955.GA31111@stefanha-x1.localdomain> <86e5faa1-2360-c8c7-b531-6a1a72ee7116@redhat.com> <20161110021145.GB8422@lemon> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161110021145.GB8422@lemon> Subject: Re: [Qemu-devel] [Qemu-block] [PATCH for-2.8] block: Let write zeroes fallback work even with small max_transfer List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng Cc: Eric Blake , Stefan Hajnoczi , qemu-devel@nongnu.org, qemu-block@nongnu.org, qemu-stable@nongnu.org, Max Reitz , Ed Swierk , Stefan Hajnoczi , "Denis V . Lunev" Am 10.11.2016 um 03:11 hat Fam Zheng geschrieben: > On Wed, 11/09 14:06, Eric Blake wrote: > > On 11/09/2016 07:49 AM, Stefan Hajnoczi wrote: > > > On Tue, Nov 08, 2016 at 04:52:15PM -0600, Eric Blake wrote: > > >> Commit 443668ca rewrote the write_zeroes logic to guarantee that > > >> an unaligned request never crosses a cluster boundary. But > > >> in the rewrite, the new code assumed that at most one iteration > > >> would be needed to get to an alignment boundary. > > >> > > >> However, it is easy to trigger an assertion failure: the Linux > > >> kernel limits loopback devices to advertise a max_transfer of > > >> only 64k. Any operation that requires falling back to writes > > >> rather than more efficient zeroing must obey max_transfer during > > >> that fallback, which means an unaligned head may require multiple > > >> iterations of the write fallbacks before reaching the aligned > > >> boundaries, when layering a format with clusters larger than 64k > > >> atop the protocol of file access to a loopback device. > > >> > > >> Test case: > > >> > > >> $ qemu-img create -f qcow2 -o cluster_size=1M file 10M > > >> $ losetup /dev/loop2 /path/to/file > > >> $ qemu-io -f qcow2 /dev/loop2 > > >> qemu-io> w 7m 1k > > >> qemu-io> w -z 8003584 2093056 > > > > > > Please include a qemu-iotests test case to protect against regressions. > > > > None of the existing qemu-iotests use losetup; I guess the closest thing > > to do is crib from a test that uses passwordless sudo? > > > > It will certainly be a separate commit, but I'll give it my best shot to > > post something soon. > > Alternatively, maybe add a blkdebug option to emulate a small max_transfer at > the protocol layer? This sounds like the better option indeed. Kevin