1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-16 10:20:30 +00:00
Mirror of the FreeBSD src repository https://git.FreeBSD.org/src.git .
Go to file
Bruce Evans bad324ca54 Fixed livelock in getnewbuf().
It is possible for multiple process to sleep concurrently waiting
for a buffer.  When the buffer shortage is a shortage of space but
not a shortage of buffer headers, the processes took turns creating
empty buffers and waking each other to advertise the brelse() of
the empties; progress was never made because tsleep() always found
another high-priority process to run and everything was done at
splbio(), so vfs_update never had a chance to flush delayed writes,
not to mention that i/o never had a chance to complete.

The problem seems to be rare in practice, but it can easily be
reproduced by misusing block devices, at least for sufficently slow
devices on machines with a sufficiently small buffer cache.  E.g.,
`tar cvf /dev/fd0 /kernel' on an 8MB system with no disk in fd0
causes the problem quickly; the same command with a disk in fd0
causes the problem not quite as quickly; and people have reported
problems newfs'ing file systems on block devices.

Block devices only cause this problem indirectly.  They are pessimized
for time and space, and the space pessimization causes the shortage
(it manifests as internal fragmentation in buffer_map).

This should be fixed in 2.2.
1997-06-13 08:30:40 +00:00
bin Now [^abc] means the same as [!abc] like bash and *csh already does 1997-06-06 23:04:33 +00:00
contrib Merge with previous variant 1997-06-07 12:58:06 +00:00
crypto Bring in the Starter files for the contrib-crypto dir. 1997-05-03 09:16:07 +00:00
eBones Add include of <sys/types.h> no longer included by <stdio.h>. 1997-04-16 00:05:29 +00:00
etc Add ppp.log 1997-06-10 20:40:22 +00:00
games This file was somewhat out of date :-) 1997-06-07 09:30:11 +00:00
gnu support remote imports (you must have a local cvs with same path as 1997-06-09 10:08:07 +00:00
include Go to SHARED=copies by default. 1997-06-05 21:20:58 +00:00
lib getnetid() crashes if no /etc/netid file is present (it tries to fclose() 1997-06-12 18:42:43 +00:00
libexec Reset alarm before invoking ppplogin. 1997-06-03 12:56:47 +00:00
lkm Corrected accidental breakage in the last commit. 1997-05-26 01:02:41 +00:00
release YAMF22 1997-06-13 07:11:57 +00:00
sbin Remove __progname. Cosmetic in usage string. 1997-06-13 06:27:12 +00:00
secure Revert $FreeBSD$ to $Id$ 1997-02-22 14:40:44 +00:00
share xterm entry: 1997-06-13 05:30:50 +00:00
sys Fixed livelock in getnewbuf(). 1997-06-13 08:30:40 +00:00
tools Some helpful improvements : 1997-06-10 01:53:01 +00:00
usr.bin Work around a gcc bug (causing false warnings about integral constant being too large, even when the integral constant was e.g. 1). 1997-06-12 18:10:08 +00:00
usr.sbin YAMF22 1997-06-13 07:11:57 +00:00
COPYRIGHT This is the official 4.4 Lite copyright. 1994-09-11 07:53:28 +00:00
Makefile Remove sgml stuff from the build-tools target. It is no longer used 1997-06-08 15:04:06 +00:00
README Revert $FreeBSD$ to $Id$ 1997-02-23 09:21:14 +00:00

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

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.  Please see the top of the Makefile 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.

eBones		Kerberos package - NOT FOR EXPORT!

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.

lib		System libraries.

libexec		System daemons.

lkm		Loadable Kernel Modules.

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