From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:58760) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QV0hZ-00015y-Jd for qemu-devel@nongnu.org; Fri, 10 Jun 2011 08:20:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QV0hV-0007ZJ-EF for qemu-devel@nongnu.org; Fri, 10 Jun 2011 08:20:37 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53266) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QV0hU-0007ZA-Q5 for qemu-devel@nongnu.org; Fri, 10 Jun 2011 08:20:33 -0400 Date: Fri, 10 Jun 2011 13:20:25 +0100 From: "Daniel P. Berrange" Message-ID: <20110610122025.GE18497@redhat.com> References: <20110610103305.GD18497@redhat.com> <87y619evre.fsf@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <87y619evre.fsf@linux.vnet.ibm.com> Subject: Re: [Qemu-devel] QEMU 9pfs intentionally returning short reads ? Reply-To: "Daniel P. Berrange" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Aneesh Kumar K.V" Cc: qemu-devel@nongnu.org On Fri, Jun 10, 2011 at 05:36:13PM +0530, Aneesh Kumar K.V wrote: > On Fri, 10 Jun 2011 11:33:05 +0100, "Daniel P. Berrange" wrote: > > I've been doing some work trying to run QEMU guests with a root filesystem > > exported from the host using virtio 9pfs. One of the issues that I have > > discovered is that the 9p FS running on QEMU appears to cap all reads at > > 4096 bytes[1]. Any larger read will return only partial data for plain > > files. > > > > But we should loop in kernel, requesting for multiple 9p request. > > kernel does > > size = fid->iounit ? fid->iounit : fid->clnt->msize - P9_IOHDRSZ; > if (count > size) > ret = v9fs_file_readn(filp, NULL, udata, count, *offset); > else > ret = p9_client_read(fid, NULL, udata, *offset, count); > > and v9fs_file_readn() does.. > > do { > n = p9_client_read(fid, data, udata, offset, count); > if (n <= 0) > break; > > if (data) > data += n; > if (udata) > udata += n; > > offset += n; > count -= n; > total += n; > } while (count > 0 && n == size); > > > I also did an strace of simple test and i see > > open("test", O_RDONLY) = 3 > read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192) = 8192 In my test I did # strace -e trace=read,open perl -e 'open FOO, "/usr/share/X11/XKeysymDB"; sysread FOO, $foo, 8192' open("/usr/share/X11/XKeysymDB", O_RDONLY) = 3 read(3, "! Copyright 1993 Massachusetts I"..., 8192) = 4096 Perhaps there is a guest kernel driver difference ? I'm using 2.6.35.13-91.fc14.x86_64 Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|