Date: Wed, 30 Jun 1999 17:12:56 -0700 (PDT) From: Matthew Dillon <dillon@apollo.backplane.com> To: Sheldon Hearn <sheldonh@uunet.co.za> Cc: Julian Elischer <julian@whistle.com>, cvs-committers@FreeBSD.ORG, cvs-all@FreeBSD.ORG Subject: Re: cvs commit: src/sys/nfs nfs_serv.c nfs_subs.c nfs_syscalls.c nfsm_subs.h Message-ID: <199907010012.RAA41668@apollo.backplane.com> References: <38064.930781830@axl.noc.iafrica.com>
next in thread | previous in thread | raw e-mail | index | archive | help
:On Wed, 30 Jun 1999 15:28:37 MST, Julian Elischer wrote: : :> this is all matts NFS fixes. :> I don't know if any PRs are associated. :> (are there?) : :Well, there are quite a few PR's suspended along the lines of "let's :revisit this when CURRENT's NFS fixes have been backported to STABLE". : :However, I was under the impression that this would require Matt's VM :changes to be backported as well. Has that already been done, or was I :wrong? : :Thanks, :Sheldon. There are a number of fixes that cannot be backported without backporting most of the VM changes. Lets see what I can remember... * mmap related problems. mmap() can cause garbage beyond the end of the file to become visible to userland. This occurs because mmap() will cause a VMIO backing page (such as one that might have previously been associated with a file fragment) to be fully validated. -CURRENT fixes this with rather involved fixes to the VM code that zero's areas of a partially valid page that are being forced to become all-valid. This is not solely an NFS related issue. It occurs with FFS too. * NFS/write/mmap interactions. When partially valid NFS buffers, such as those for which a byte-ranged fragment has been written, are mmap()'d, the VM system forces complete validation of the page. If an underlying partially validated buffer is lost and then re-aquired, the VM system uses the valid bits in the backing VMIO pages to revalidate the dirty range of the reconstituted buffer. This has the side effect of making it appear to NFS that the entire buffer is now valid (and perhaps even dirty) when, in fact, it is not, and can result in inappropriate commits of NUL data as well as usermode processes seeing NUL's instead of real data in later read(). -CURRENT fixes this problem by not allowing NFS to partially validate a page when doing a piecemeal write. Instead, NFS under -CURRENT now does a read-before-write of such a buffer. A special case is left for the write-append case to avoid the read-before-write. * NFS VM/syscall deadlocks. There was at least one deadlock or panic, I forget what it was exactly, that was fixed by a rewrite of nfs_getpages() which I really doubt could be backported without backporting some of the new VM system. * The operation of VM page flags has changed in that a number of flag adjustments that were manually strewn about the VM code before are now encapsulated in a single routine. Many of these changes were not MFC'd because they were thrown all together into a single large commit along with other more drastic changes to the VM system due to long delays in getting code reviewed in the midst of ongoing work. (i.e. I was being screamed at for every little thing which made it impossible to commit even the most innocuous code cleanups without going through a long review process). * There are still a ton of low-memory deadlock situations in -STABLE due to the fact that the new getnewbuf() and buffer cache changes were not backported. Since the buffer cache stuff in -CURRENT has just now gone through another big set of commits and is not 100% stable, it is not possible to backport those changes at this time and, in anycase, of all the people that *could* backport this stuff, I'm probably the only one with time to do it, but not without commit privs. It should be fairly easy to backport all the most recent fixes to the server side of NFS (nfs/nfs_serv.c) as well as other really recent fixes to NFS, since these do not depend on the new VM stuff. A lot of it has already been backported. IMHO, I really doubt that anything related to the VM or buffer cache subsystems that isn't a simple bug fix will ever be backported to -STABLE. The gap between -STABLE and -CURRENT continues to widen as more and more new pieces become dependant on the changes made to these subsystems. This isn't necessarily a bad thing, but people need to be aware of it. -Matt Matthew Dillon <dillon@backplane.com> To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199907010012.RAA41668>