Subject: Re: kern/36429 (EIO with puffs/dtfs)
To: None <pooka@NetBSD.org, netbsd-bugs@netbsd.org, gnats-admin@netbsd.org,>
From: None <pooka@netbsd.org>
List: netbsd-bugs
Date: 06/05/2007 12:32:53
Synopsis: EIO with puffs/dtfs

State-Changed-From-To: open->analyzed
State-Changed-By: pooka@netbsd.org
State-Changed-When: Tue, 05 Jun 2007 15:32:49 +0300
State-Changed-Why:
Ok, so the problem is the following: after the write to the second 
page the size of the vnode is large enough so that the first page  
is going to be faulted in.  However, since the information about 
the file size extension is only in the kernel (not yet flushed),  
the read fault of the first page results in the file server thinking
someone is trying to read past eof and hence it returns 0 bytes,
which the nestiobuf code doesn't like and gives EIO.

I need to do a bit more vacation recovery before I can decide how
to really fix it.  By mounting with PUFFS_KFLAG_WTCACHE the problem 
does exist, as the cache is flushed immediately - that's the  
behaviour that most file servers actually want anyway.  You can
make dtfs do this by running it with -t.