Date: Wed, 12 Mar 1997 10:23:18 -0700 (MST) From: Terry Lambert <terry@lambert.org> To: jkh@time.cdrom.com (Jordan K. Hubbard) Cc: terry@lambert.org, jfieber@indiana.edu, mrcpu@cdsnet.net, hackers@FreeBSD.ORG Subject: Re: Maybe a showstopper, maybe not. Message-ID: <199703121723.KAA27592@phaeton.artisoft.com> In-Reply-To: <14986.858129528@time.cdrom.com> from "Jordan K. Hubbard" at Mar 11, 97 05:18:48 pm
next in thread | previous in thread | raw e-mail | index | archive | help
> > > That's truly bizarre. Do these "undeleted" files have *anything* > > > in common, so far as you can make out? > > > > They remain after an "rm -f"? > > > > Sorry, couldn't resist. ;-). > > I suppose I deserved that. I meant anything *else* of course. ;) > > > Gee, I wonder if this has anything to do with the cookie code and the > > multiple entry return wire protocol extension in the NFSv3 spec.... > > naw! > > Do you have a relatively small diff which would fix it? I don't. I have a relatively large diff that I would have to reintegrate into -current (which I'm not running because it's too unstable right now) that implements the changes that Doug Rabson and I talked about nearly a year and a half ago. Basically, it: 1) Splits the VOP into VOP_READDIR() to atomically read a directory block for a given offset, and VOP_GETDIR to copy out the data to the consumer buffer (the syscall and NFS code are treated as equal consumers of the VFS interface). 2) Modifies getdents to use the new interface 3) Modifies nfssrv to use the new interface 4) Incidently gets rid of VOP_READDIR cookies and implements the restart algorithm from my last posting The point being that the consumer buffer is probably smaller than the on disk buffer if the formats are different (they are for NFS, but not for syscalls, so you don't see the problem with syscalls). > If so, it > seems like John has the perfect test case, not to mention a strong > reason to have it brought in if it works. Most likely, what is happening is that the copy buffer is running out of space in the NFS case on the original copy, even though space remains in the buffer after it has been processed into the correct form for the transport. It is easy to test this with a small tool to dump raw directory blocks and note block boundries. If the problem is occurring on a directory block boundry, this is the culprit. Run the tool on a test directory, dumping to a file, then cause the error, then run the tool again. The tool isn't more than a couple hundred lines of C code to write, even if you go all out and format up the entries and support 4.3 and 4.4 FFS's. Regards, Terry Lambert terry@lambert.org --- Any opinions in this posting are my own and not those of my present or previous employers.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199703121723.KAA27592>