From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:53883) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TiN79-000357-2z for qemu-devel@nongnu.org; Tue, 11 Dec 2012 05:31:09 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TiN74-0000EO-Re for qemu-devel@nongnu.org; Tue, 11 Dec 2012 05:31:03 -0500 Received: from mx1.redhat.com ([209.132.183.28]:18629) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TiN74-0000EF-Il for qemu-devel@nongnu.org; Tue, 11 Dec 2012 05:30:58 -0500 Message-ID: <50C70B4D.1000505@redhat.com> Date: Tue, 11 Dec 2012 11:30:37 +0100 From: Kevin Wolf MIME-Version: 1.0 References: <1353488287-47077-1-git-send-email-borntraeger@de.ibm.com> <50AC9B96.9070908@redhat.com> <1354911963.3635.4.camel@br8hfpp0.de.ibm.com> <50C5A37F.9020300@redhat.com> <1355219892.4245.14.camel@br8hfpp0.de.ibm.com> In-Reply-To: <1355219892.4245.14.camel@br8hfpp0.de.ibm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH/RFC] block: Ensure that block size constraints are considered List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Heinz Graalfs Cc: Christian Borntraeger , jfrei@linux.vnet.ibm.com, qemu-devel@nongnu.org, Stefan Hajnoczi , agraf@suse.de Am 11.12.2012 10:58, schrieb Heinz Graalfs: > Hi Kevin, > > I'm using the bdrv_pread() function during boot partition detection ... > > In detail: > bdrv_pread() is called to read 32 bytes from a 2048 bytes formatted > disk. This results in setting up a read of 512 bytes (1 sector > multiplied by 512 current code in paio_submit()), which is wrong for a > O_DIRECT opened file, and produces the error. So this sounds like the real problem: bdrv_pread/pwrite assume 512 byte sectors. May it's better to fix it there instead of just fixing one code path in one backend. In any case this patch as submitted is wrong as it overflows the buffer passed to paio_submit. Test it with this patch: --- a/qemu-io.c +++ b/qemu-io.c @@ -1718,6 +1718,8 @@ static int openfile(char *name, int flags, int growable) bs = NULL; return 1; } + + bdrv_set_buffer_alignment(bs, 4096); } return 0; $ ./qemu-io -n -c 'read -p 0 512' /tmp/foo read 512/512 bytes at offset 0 512 bytes, 1 ops; 0.0001 sec (3.727 MiB/sec and 7633.5878 ops/sec) *** glibc detected *** ./qemu-io: double free or corruption (out): 0x00007fa22349b000 *** Kevin