Skip site navigation (1)Skip section navigation (2)
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>