truckman 670ac96738 MFC ffs_softdep.c 1.185
Original commit message:

  truckman    2005-09-29 21:50:26 UTC

   FreeBSD src repository

   Modified files:
     sys/ufs/ffs          ffs_softdep.c
   Log:
   After a rmdir()ed directory has been truncated, force an update of
   the directory's inode after queuing the dirrem that will decrement
   the parent directory's link count.  This will force the update of
   the parent directory's actual link to actually be scheduled.  Without
   this change the parent directory's actual link count would not be
   updated until ufs_inactive() cleared the inode of the newly removed
   directory, which might be deferred indefinitely.  ufs_inactive()
   will not be called as long as any process holds a reference to the
   removed directory, and ufs_inactive() will not clear the inode if
   the link count is non-zero, which could be the result of an earlier
   system crash.

   If a background fsck is run before the update of the parent directory's
   actual link count has been performed, or at least scheduled by
   putting the dirrem on the leaf directory's inodedep id_bufwait list,
   fsck will corrupt the file system by decrementing the parent
   directory's effective link count, which was previously correct
   because it already took the removal of the leaf directory into
   account, and setting the actual link count to the same value as the
   effective link count after the dangling, removed, leaf directory
   has been removed.  This happens because fsck acts based on the
   actual link count, which will be too high when fsck creates the
   file system snapshot that it references.

   This change has the fortunate side effect of more quickly cleaning
   up the large number dirrem structures that linger for an extended
   time after the removal of a large directory tree.  It also fixes a
   potential problem with the shutdown of the syncer thread timing out
   if the system is rebooted immediately after removing a large directory
   tree.

   Submitted by:   tegge
   MFC after:      3 days

   Revision  Changes    Path
   1.185     +2 -0      src/sys/ufs/ffs/ffs_softdep.c

Submitted by:	tegge
Approved by:	re (scottl)
2005-10-02 08:25:33 +00:00
2005-09-11 16:50:37 +00:00
2005-08-29 18:46:39 +00:00
2005-10-02 05:47:04 +00:00
2005-09-11 16:50:37 +00:00
2005-10-01 15:56:44 +00:00
2005-10-02 08:25:33 +00:00
2005-09-26 15:00:49 +00:00
2005-09-29 13:19:10 +00:00
2005-10-01 15:48:02 +00:00
2005-01-01 07:29:20 +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
``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.

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
Description
freebsd kernel with SKQ
Readme 2 GiB
Languages
C 63.3%
C++ 23.3%
Roff 5.1%
Shell 2.9%
Makefile 1.5%
Other 3.4%