1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-04 12:52:15 +00:00
freebsd/sys/ufs/ffs
Kirk McKusick 7aca6291e3 Add support to UFS2 to provide storage for extended attributes.
As this code is not actually used by any of the existing
interfaces, it seems unlikely to break anything (famous
last words).

The internal kernel interface to manipulate these attributes
is invoked using two new IO_ flags: IO_NORMAL and IO_EXT.
These flags may be specified in the ioflags word of VOP_READ,
VOP_WRITE, and VOP_TRUNCATE. Specifying IO_NORMAL means that
you want to do I/O to the normal data part of the file and
IO_EXT means that you want to do I/O to the extended attributes
part of the file. IO_NORMAL and IO_EXT are mutually exclusive
for VOP_READ and VOP_WRITE, but may be specified individually
or together in the case of VOP_TRUNCATE. For example, when
removing a file, VOP_TRUNCATE is called with both IO_NORMAL
and IO_EXT set. For backward compatibility, if neither IO_NORMAL
nor IO_EXT is set, then IO_NORMAL is assumed.

Note that the BA_ and IO_ flags have been `merged' so that they
may both be used in the same flags word. This merger is possible
by assigning the IO_ flags to the low sixteen bits and the BA_
flags the high sixteen bits. This works because the high sixteen
bits of the IO_ word is reserved for read-ahead and help with
write clustering so will never be used for flags. This merge
lets us get away from code of the form:

        if (ioflags & IO_SYNC)
                flags |= BA_SYNC;

For the future, I have considered adding a new field to the
vattr structure, va_extsize. This addition could then be
exported through the stat structure to allow applications to
find out the size of the extended attribute storage and also
would provide a more standard interface for truncating them
(via VOP_SETATTR rather than VOP_TRUNCATE).

I am also contemplating adding a pathconf parameter (for
concreteness, lets call it _PC_MAX_EXTSIZE) which would
let an application determine the maximum size of the extended
atribute storage.

Sponsored by:	DARPA & NAI Labs.
2002-07-19 07:29:39 +00:00
..
ffs_alloc.c Add support to UFS2 to provide storage for extended attributes. 2002-07-19 07:29:39 +00:00
ffs_balloc.c Add support to UFS2 to provide storage for extended attributes. 2002-07-19 07:29:39 +00:00
ffs_extern.h Add support to UFS2 to provide storage for extended attributes. 2002-07-19 07:29:39 +00:00
ffs_inode.c Add support to UFS2 to provide storage for extended attributes. 2002-07-19 07:29:39 +00:00
ffs_snapshot.c Warning fixes for 64 bits platforms. This eliminates all the 2002-06-23 18:17:27 +00:00
ffs_softdep_stub.c Add support to UFS2 to provide storage for extended attributes. 2002-07-19 07:29:39 +00:00
ffs_softdep.c Add support to UFS2 to provide storage for extended attributes. 2002-07-19 07:29:39 +00:00
ffs_subr.c Warning fixes for 64 bits platforms. This eliminates all the 2002-06-23 18:17:27 +00:00
ffs_tables.c This commit adds basic support for the UFS2 filesystem. The UFS2 2002-06-21 06:18:05 +00:00
ffs_vfsops.c Add the ffs bits necessary to support unloading of the ufs kernel 2002-07-01 11:00:47 +00:00
ffs_vnops.c This commit adds basic support for the UFS2 filesystem. The UFS2 2002-06-21 06:18:05 +00:00
fs.h This commit adds basic support for the UFS2 filesystem. The UFS2 2002-06-21 06:18:05 +00:00
README.snapshot Fix a type: s/your are/you are/ 2002-07-12 19:56:31 +00:00
README.softupdates Update to reflect current status. 2000-07-08 02:31:21 +00:00
softdep.h Add support to UFS2 to provide storage for extended attributes. 2002-07-19 07:29:39 +00:00

$FreeBSD$

Using Soft Updates

To enable the soft updates feature in your kernel, add option
SOFTUPDATES to your kernel configuration.

Once you are running a kernel with soft update support, you need to enable
it for whichever filesystems you wish to run with the soft update policy.
This is done with the -n option to tunefs(8) on the UNMOUNTED filesystems,
e.g. from single-user mode you'd do something like:

	tunefs -n enable /usr

To permanently enable soft updates on the /usr filesystem (or at least
until a corresponding ``tunefs -n disable'' is done).


Soft Updates Copyright Restrictions

As of June 2000 the restrictive copyright has been removed and 
replaced with a `Berkeley-style' copyright. The files implementing
soft updates now reside in the sys/ufs/ffs directory and are
compiled into the generic kernel by default.


Soft Updates Status

The soft updates code has been running in production on many
systems for the past two years generally quite successfully.
The two current sets of shortcomings are:

1) On filesystems that are chronically full, the two minute lag
   from the time a file is deleted until its free space shows up
   will result in premature filesystem full failures. This
   failure mode is most evident in small filesystems such as
   the root. For this reason, use of soft updates is not
   recommended on the root filesystem.

2) If your system routines runs parallel processes each of which
   remove many files, the kernel memory rate limiting code may
   not be able to slow removal operations to a level sustainable
   by the disk subsystem. The result is that the kernel runs out
   of memory and hangs.

Both of these problems are being addressed, but have not yet
been resolved. There are no other known problems at this time.


How Soft Updates Work

For more general information on soft updates, please see:
	http://www.mckusick.com/softdep/
	http://www.ece.cmu.edu/~ganger/papers/CSE-TR-254-95/

--
Marshall Kirk McKusick <mckusick@mckusick.com>
July 2000