Changes from version 0.5a to version 0.5b
=========================================
	- Now that we have sysctl(), the immutable flag cannot be changed when
	  the system is running at security level > 0.
	- Some cleanups in the code.
	- More consistency checks on directories.
	- The ext2.diff patch from Tom May <ftom@netcom.com> has been
	  integrated.  This patch replaces expensive "/" and "%" with
	  cheap ">>" and "&" where possible.

Changes from version 0.5 to version 0.5a
========================================
	- Zero the partial block following the end of the file when a file
	  is truncated.
	- Dates updated in the copyright.
	- More checks when the filesystem is mounted: the count of blocks,
	  fragments, and inodes per group is checked against the block size.
	- The buffers used by the error routines are now static variables, to
	  avoid using space on the kernel stack, as requested by Linus.
	- Some cleanups in the error messages (some versions of syslog contain
	  a bug which truncates an error message if it contains '\n').
	- Check that no data can be written to a file past the 2GB limit.
	- The famous readdir() bug has been fixed by Stephen Tweedie.
	- Added a revision level in the superblock.
	- Full support for O_SYNC flag of the open system call.
	- New mount options: `resuid=#uid' and `resgid=#gid'.  `resuid' causes
	  ext2fs to consider user #uid like root for the reserved blocks.
	  `resgid' acts the same way with group #gid.  New fields in the
	  superblock contain default values for resuid and resgid and can
	  be modified by tune2fs.
	  Idea comes from Rene Cougnenc <cougnenc@renux.frmug.fr.net>.
	- New mount options: `bsddf' and `minixdf'.  `bsddf' causes ext2fs
	  to remove the blocks used for FS structures from the total block
	  count in statfs.  With `minixdf', ext2fs mimics Minix behavior
	  in statfs (i.e. it returns the total number of blocks on the
	  partition).  This is intended to make bde happy :-)
	- New file attributes:
	  - Immutable files cannot be modified.  Data cannot be written to
	    these files.  They cannot be removed, renamed and new links cannot
	    be created.  Even root cannot modify the files.  He has to remove
	    the immutable attribute first.
	  - Append-only files: can only be written in append-mode when writing.
	    They cannot be removed, renamed and new links cannot be created.
	    Note: files may only be added to an append-only directory.
	  - No-dump files: the attribute is not used by the kernel.  My port
	    of dump uses it to avoid backing up files which are not important.
	- New check in ext2_check_dir_entry: the inode number is checked.
	- Support for big file systems: the copy of the FS descriptor is now
	  dynamically allocated (previous versions used a fixed size array).
	  This allows to mount 2GB+ FS.
	- Reorganization of the ext2_inode structure to allow other operating
	  systems to create specific fields if they use ext2fs as their native
	  file system.  Currently, ext2fs is only implemented in Linux but
	  will soon be part of Gnu Hurd and of Masix.

Changes from version 0.4b to version 0.5
========================================
	- New superblock fields: s_lastcheck and s_checkinterval added
	  by Uwe Ohse <uwe@tirka.gun.de> to implement timedependent checks
	  of the file system
	- Real random numbers for secure rm added by Pierre del Perugia
	  <delperug@gla.ecoledoc.ibp.fr>
	- The mount warnings related to the state of a fs are not printed
	  if the fs is mounted read-only, idea by Nick Holloway
	  <alfie@dcs.warwick.ac.uk>

Changes from version 0.4a to version 0.4b
=========================================
	- Copyrights changed to include the name of my laboratory.
	- Clean up of balloc.c and ialloc.c.
	- More consistency checks.
	- Block preallocation added by Stephen Tweedie.
	- Direct reads of directories disallowed.
	- Readahead implemented in readdir by Stephen Tweedie.
	- Bugs in block and inodes allocation fixed.
	- Readahead implemented in ext2_find_entry by Chip Salzenberg.
	- New mount options:
	  `check=none|normal|strict'
	  `debug'
	  `errors=continue|remount-ro|panic'
	  `grpid', `bsdgroups'
	  `nocheck'
	  `nogrpid', `sysvgroups'
	- truncate() now tries to deallocate contiguous blocks in a single call
	  to ext2_free_blocks().
	- lots of cosmetic changes.

Changes from version 0.4 to version 0.4a
========================================
        - the `sync' option support is now complete.  Version 0.4 was not
          supporting it when truncating a file.  I have tested the synchronous
          writes and they work but they make the system very slow :-(  I have
          to work again on this to make it faster.
        - when detecting an error on a mounted filesystem, version 0.4 used
          to try to write a flag in the super block even if the filesystem had
          been mounted read-only.  This is fixed.
        - the `sb=#' option now causes the kernel code to use the filesystem
          descriptors located at block #+1.  Version 0.4 used the superblock
          backup located at block # but used the main copy of the descriptors.
        - a new file attribute `S' is supported.  This attribute causes
          synchronous writes but is applied to a file not to the entire file
          system (thanks to Michael Kraehe <kraehe@bakunin.north.de> for
          suggesting it).
        - the directory cache is inhibited by default.  The cache management
          code seems to be buggy and I have to look at it carefully before
          using it again.
        - deleting a file with the `s' attribute (secure deletion) causes its
          blocks to be overwritten with random values not with zeros (thanks to
          Michael A. Griffith <grif@cs.ucr.edu> for suggesting it).
        - lots of cosmetic changes have been made.

Changes from version 0.3 to version 0.4
=======================================
        - Three new mount options are supported: `check', `sync' and `sb=#'.
          `check' tells the kernel code to make more consistency checks
          when the file system is mounted.  Currently, the kernel code checks
          that the blocks and inodes bitmaps are consistent with the free
          blocks and inodes counts.  More checks will be added in future
          releases.
          `sync' tells the kernel code to use synchronous writes when updating
          an inode, a bitmap, a directory entry or an indirect block.  This
          can make the file system much slower but can be a big win for files
          recovery in case of a crash (and we can now say to the BSD folks
          that Linux also supports synchronous updates :-).
          `sb=#' tells the kernel code to use an alternate super block instead
          of its master copy.  `#' is the number of the block (counted in
          1024 bytes blocks) which contains the alternate super block.
          An ext2 file system typically contains backups of the super block
          at blocks 8193, 16385, and so on.
        - I have change the meaning of the valid flag used by e2fsck.  it
          now contains the state of the file system.  If the kernel code
          detects an inconsistency while the file system is mounted, it flags
          it as erroneous and e2fsck will detect that on next run.
        - The super block now contains a mount counter.  This counter is
          incremented each time the file system is mounted read/write.   When
          this counter becomes bigger than a maximal mount counts (also stored
          in the super block), e2fsck checks the file system, even if it had
          been unmounted cleanly, and resets this counter to 0.
        - File attributes are now supported.  One can associate a set of
          attributes to a file.  Three attributes are defined:
          `c': the file is marked for automatic compression,
          `s': the file is marked for secure deletion: when the file is
          deleted, its blocks are zeroed and written back to the disk,
          `u': the file is marked for undeletion: when the file is deleted,
          its contents are saved to allow a future undeletion.
          Currently, only the `s' attribute is implemented in the kernel
          code.  Support for the other attributes will be added in a future
          release.
        - a few bugs related to times updates have been fixed by Bruce
          Evans and me.
        - a bug related to the links count of deleted inodes has been fixed.
          Previous versions used to keep the links count set to 1 when a file
          was deleted.  The new version now sets links_count to 0 when deleting
          the last link.
        - a race condition when deallocating an inode has been fixed by
          Stephen Tweedie.

