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"<address@hidden> 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