freebsd with flexible iflib nic queues
Go to file
Matthew Dillon ea94c7b968 Synopsis of problem being fixed: Dan Nelson originally reported that
blocks of zeros could wind up in a file written to over NFS by a client.
    The problem only occurs a few times per several gigabytes of data.   This
    problem turned out to be bug #3 below.

    bug #1:

        B_CLUSTEROK must be cleared when an NFS buffer is reverted from
        stage 2 (ready for commit rpc) to stage 1 (ready for write).
        Reversions can occur when a dirty NFS buffer is redirtied with new
        data.

        Otherwise the VFS/BIO system may end up thinking that a stage 1
        NFS buffer is clusterable.  Stage 1 NFS buffers are not clusterable.

    bug #2:

        B_CLUSTEROK was inappropriately set for a 'short' NFS buffer (short
        buffers only occur near the EOF of the file).  Change to only set
        when the buffer is a full biosize (usually 8K).  This bug has no
        effect but should be fixed in -current anyway.  It need not be
        backported.

    bug #3:

        B_NEEDCOMMIT was inappropriately set in nfs_flush() (which is
	typically only called by the update daemon).  nfs_flush()
        does a multi-pass loop but due to the lack of vnode locking it
        is possible for new buffers to be added to the dirtyblkhd list
        while a flush operation is going on.  This may result in nfs_flush()
        setting B_NEEDCOMMIT on a buffer which has *NOT* yet gone through its
        stage 1 write, causing only the commit rpc to be made and thus
        causing the contents of the buffer to be thrown away (never sent to
        the server).

    The patch also contains some cleanup, which only applies to the commit
    into -current.

Reviewed by:	dg, julian
Originally Reported by: Dan Nelson <dnelson@emsphone.com>
1999-12-12 06:09:57 +00:00
bin I've been Brucified! I did evil things with typedefs, but I'll do it 1999-12-08 02:44:46 +00:00
contrib Do not add routes for localhost to the `dhclient' controlled interface. 1999-12-12 01:04:36 +00:00
crypto Add the PAM SSH RSA key authentication module. For example, you can add, 1999-11-29 07:09:44 +00:00
etc Suport multiple ``ifconfig_*?="DHCP"'' configurations. 1999-12-12 01:58:30 +00:00
games -Wall fixes. 1999-12-12 03:22:37 +00:00
gnu reactivate cvs subdir build 1999-12-11 17:32:07 +00:00
include Revert previous commit. 1999-12-09 09:35:36 +00:00
kerberos5 Bring in SRA for telnet. 1999-10-07 18:59:55 +00:00
kerberosIV Bring in SRA for telnet. 1999-10-07 18:59:55 +00:00
lib Add MAP_NOSYNC feature to mmap(), and MADV_NOSYNC and MADV_AUTOSYNC to 1999-12-12 03:19:33 +00:00
libexec Correct the ttys.5 and init.8 manpages with respect to the incorrect 1999-12-06 09:07:14 +00:00
release I shouldn't have incremented PART_OFF; it was wrong and broke label 1999-12-12 04:58:02 +00:00
sbin First version of HPFS stuff. 1999-12-09 19:10:13 +00:00
secure Dont build telenet if we are going for kerberised telnet; this just 1999-10-12 19:48:05 +00:00
share Add reference to RFC 1702, after learning how to have "T. Li" 1999-12-10 19:29:43 +00:00
sys Synopsis of problem being fixed: Dan Nelson originally reported that 1999-12-12 06:09:57 +00:00
tools Use install -C -p instead of cp -p. 1999-12-10 10:14:06 +00:00
usr.bin Finally give mk_cmds(1) a man page. 1999-12-12 02:43:07 +00:00
usr.sbin I shouldn't have incremented PART_OFF; it was wrong and broke label 1999-12-12 04:58:02 +00:00
COPYRIGHT Update to add the July 22, 1999 addendum. 1999-09-05 21:33:47 +00:00
Makefile Oops! bypassing Makefile.inc0 without adding a `world' target is not 1999-12-08 18:10:15 +00:00
Makefile.inc0 $Id$ -> $FreeBSD$ 1999-08-28 01:35:59 +00:00
Makefile.inc1 Build a.out tools if MACHINE_ARCH == i386 and MACHINE == pc98. 1999-12-12 03:54:58 +00:00
Makefile.upgrade $Id$ -> $FreeBSD$ 1999-08-28 01:35:59 +00:00
README $Id$ -> $FreeBSD$ 1999-08-28 01:35:59 +00:00
UPDATING "raw" -> "block" Block devices have been what are now gone, not "raw" 1999-12-06 22:42:01 +00:00

This is the top level of the FreeBSD source directory.  This file
was last revised on:
$FreeBSD$

For copyright information, please see the file COPYRIGHT in this
directory (additional copyright information also exists for some
sources in this tree - please see the specific source directories for
more information).

The Makefile in this directory supports a number of targets for
building components (or all) of the FreeBSD source tree, the most
commonly used one being ``world'', which rebuilds and installs
everything in the FreeBSD system from the source tree except the
kernel and the contents of /etc.  Please see the top of the Makefile
in this directory for more information on the standard build targets
and compile-time flags.

Building a kernel with config(8) is a somewhat more involved process,
documentation for which can be found at:
   http://www.freebsd.org/handbook/kernelconfig.html
And in the config(8) man page.

The sample kernel configuration files reside in the sys/i386/conf
sub-directory (assuming that you've installed the kernel sources), the
file named GENERIC being the one used to build your initial installation
kernel.  The file LINT contains entries for all possible devices, not
just those commonly used, and is meant more as a general reference
than an actual kernel configuration file (a kernel built from it
wouldn't even run).


Source Roadmap:
---------------
bin		System/User commands.

contrib		Packages contributed by 3rd parties.

crypto		Export controlled stuff (see crypto/README).

etc		Template files for /etc

games		Amusements.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberosIV	Kerberos package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

sbin		System commands.

secure		DES and DES-related utilities - NOT FOR EXPORT!

share		Shared resources.

sys		Kernel sources.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.


For information on synchronizing your source tree with one or more of
the FreeBSD Project's development branches, please see:

  http://www.freebsd.org/handbook/synching.html