freebsd kernel with SKQ
Go to file
Julian Elischer e9271f5376 Take out the single-threading code in fork.
After discussions with jeff, alc, (various Ironport people), david Xu,
and mostly Alfred (who found the problem) it has been demonstrated that this
is not needed for our implementations of threads and represents a real
(as in we've seen it happen a lot) deadlock danger.

Several points:
 Since forking multiple threads is not allowed, and posix states that
 any mutexes owned by othre threads wilol be owned in the child by
 phantom threads, and therads shouldn't ba accessing shared structures without
 protection, It can be proved that if this leads to the child process accessing
 inconsistent data, it's a programming error.

 The mode of thread_single() being used in fork() is the wrong one.
 It is using SINGLE_NO_EXIT when it should be using SINGLE_BOUNDARY.

 Even if this we used, System processes have no need to do it as they have
 no userland to get inconsistent.

  This commmit first fixes the above bugs to get tehm correct in CVS.
  then removes them with #ifdef.
  This is so that history contains the corrected version should it
  be needed in the future.
  This code may be needed if we implement the forkall() syscall from
  Solaris. It may be needed for other non-posix thread libraries
  at some time in the future, so let the code sit for a short while
  while I do some work on it anyhow.

This removes a reproducible lockup in NFS.
It may be argued that maybe doing a fork while holding a vnode lock may
not be the best idea in th efirst place but it shouldn't cause a deadlock.
The removal has been running under soak test for several days now.

This removal should be seriously considered for 7.0 and RELENG_6.

Note. There is code in the core-dumping code that may have a similar problem
with coredumping threaded processes

MFC After: 4 days
2007-10-23 17:54:15 +00:00
bin The exit status of a case statement where none of the patterns is matched 2007-10-04 16:14:48 +00:00
cddl Tweak the handling of "WITHOUT_LIBPTHREAD". Also remove the accidental 2007-10-09 23:31:11 +00:00
compat/opensolaris Use provider's ident to handle situations when disks are moved around 2007-05-06 01:39:39 +00:00
contrib Revert back to including the whole net/bpf.h again. 2007-10-20 20:23:39 +00:00
crypto This commit was generated by cvs2svn to compensate for changes in r172767, 2007-10-18 20:19:33 +00:00
etc 1. Determine the location of the rndc* binaries relative to $command 2007-10-22 09:38:44 +00:00
games Fix a couple of small typos, and remove a duplicate 2007-10-21 05:16:52 +00:00
gnu Added ".Lb libkse" support to mdoc(7). 2007-10-22 10:01:58 +00:00
include Back out iswascii change from prev. commit, iswascii was right, 2007-10-14 10:23:54 +00:00
kerberos5 Remove _FREEFALL_CONFIG hacks 2007-10-18 19:42:50 +00:00
lib Back out 2nd part of wrong iswascii() change in prev. commit. 2007-10-23 17:39:28 +00:00
libexec - Fix the handling of R_SPARC_OLO10, which is a bit of a special case 2007-10-16 19:17:48 +00:00
release IPFilter has been updated from 4.1.23 to 4.1.28. 2007-10-19 20:15:57 +00:00
rescue Disconnect netatm from the build as it is not MPSAFE and relies on 2007-07-14 21:49:24 +00:00
sbin Add the full module path name to the kld_file_stat structure 2007-10-22 04:12:57 +00:00
secure - Bump share library version which were missed in last bump 2007-06-18 18:47:54 +00:00
share Hide the implementation details about multiple threading libraries 2007-10-22 10:08:01 +00:00
sys Take out the single-threading code in fork. 2007-10-23 17:54:15 +00:00
tools cached -> nscd 2007-10-19 14:01:25 +00:00
usr.bin - Convert NO_INSTALLLIB option to a new syntax: makefiles should 2007-10-20 19:01:50 +00:00
usr.sbin Avoid leaking file descriptors 2007-10-23 07:35:17 +00:00
COPYRIGHT Welcome to 2007 2006-12-31 16:35:29 +00:00
LOCKS Document commit constraints for RELENG_6_*. 2006-01-13 06:51:43 +00:00
MAINTAINERS Update the maintainer id for em driver. 2007-05-23 21:47:19 +00:00
Makefile Do not bail out for cleanworld target just because 2007-10-18 08:41:52 +00:00
Makefile.inc1 If a required install tool is missing, provide a more friendly error 2007-10-15 13:50:46 +00:00
ObsoleteFiles.inc Remove the libmytinfow library that's available only in RELENG_6. 2007-10-22 12:31:23 +00:00
README Simply running ``make world'' will bomb unless you dig up the 2006-06-07 03:33:48 +00:00
UPDATING This time to the right branch 2007-10-21 04:27:07 +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, the kernel-modules and the contents of /etc.  The ``world''
target should only be used in cases where the source tree has not
changed from the currently running version.  See:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html
for more information, including setting make(1) variables.

The ``buildkernel'' and ``installkernel'' targets build and install
the kernel and the modules (see below).  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 is a somewhat more involved process, documentation
for which can be found at:
   http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html
And in the config(8) man page.
Note: If you want to build and install the kernel with the
``buildkernel'' and ``installkernel'' targets, you might need to build
world before.  More information is available in the handbook.

The sample kernel configuration files reside in the sys/<arch>/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 NOTES contains entries and documentation for all possible
devices, not just those commonly used.  It is the successor of the ancient
LINT file, but in contrast to LINT, it is not buildable as a kernel but a
pure reference and documentation file.


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

contrib		Packages contributed by 3rd parties.

crypto		Cryptography 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.

kerberos5	Kerberos5 (Heimdal) package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

rescue		Build system for statically linked /rescue utilities.

sbin		System commands.

secure		Cryptographic libraries and commands.

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/doc/en_US.ISO8859-1/books/handbook/synching.html