			SQUASHFS CHANGE LOG

4.3	12 MAY 2014	New compressor options, new Mksquashfs/Unsquashfs
			functionality, duplicate checking optimisations,
			stability improvements (option/file parsing,
			buffer/memory overflow checks, filesystem hardening
			on corrupted filesystems), CVE fixes.

	Too many changes to do the traditional custom changelog.  But, this
	is now unnecessary, so instead list most significant 15% of commits
	from git changelog in chronological order.

	- unsquashfs: add checks for corrupted data in opendir functions
	- unsquashfs: completely empty filesystems incorrectly generate an error
	- unsquashfs: fix open file limit
	- mksquashfs: Use linked list to store directory entries rather
	- mksquashfs: Remove qsort and add a bottom up linked list merge sort
	- mksquashfs: optimise lookup_inode2() for dirs
	- pseudo: fix handling of modify pseudo files
	- pseudo: fix handling of directory pseudo files
	- xattr: Fix ERROR() so that it is synchronised with the progress bar
	- mksquashfs/sort: Fix INFO() so that it is synced with the progress bar
	- mksquashfs: Add -progress to force progress bar when using -info
	- error.h: consolidate the various error macros into one header file
	- mksquashfs: fix stack overflow in write_fragment_table()
	- mksquashfs: move list allocation from off the stack
	- unsquashfs: fix oversight in directory permission setting
	- mksquashfs: dynamically allocate recovery_file
	- mksquashfs: dynamically allocate buffer in subpathname()
	- mksquashfs: dynamically allocate buffer in pathname()
	- unsquashfs: fix CVE-2012-4024
	- unsquashfs: fix CVE-2012-4025
	- mksquashfs: fix potential stack overflow in get_component()
	- mksquashfs: add parse_number() helper for numeric command line options
	- mksquasfs: check return value of fstat() in reader_read_file()
	- mksquashfs: dynamically allocate filename in old_add_exclude()
	- unsquashfs: dynamically allocate pathname in dir_scan()
	- unsquashfs: dynamically allocate pathname in pre_scan()
	- sort: dynamically allocate filename in add_sort_list()
	- mksquashfs: fix dir_scan() exit if lstat of source directory fails
	- pseudo: fix memory leak in read_pseudo_def() if exec_file() fails
	- pseudo: dynamically allocate path in dump_pseudo()
	- mksquashfs: dynamically allocate path in display_path2()
	- mksquashfs: dynamically allocate b_buffer in getbase()
	- pseudo: fix potential stack overflow in get_component()
	- pseudo: avoid buffer overflow in read_pseudo_def() using sscanf()
	- pseudo: dynamically allocate filename in exec_file()
	- pseudo: avoid buffer overflow in read_sort_file() using fscanf()
	- sort: tighten up sort file parsing
	- unsquashfs: fix name under-allocation in process_extract_files()
	- unsquashfs: avoid buffer overflow in print_filename() using sprintf()
	- Fix some limits in the file parsing routines
	- pseudo: Rewrite pseudo file processing
	- read_fs: fix small memory leaks in read_filesystem()
	- mksquashfs: fix fclose leak in reader_read_file() on I/O error
	- mksquashfs: fix frag struct leak in write_file_{process|blocks|frag}
	- unsquashfs_xattr: fix memory leak in write_xattr()
	- read_xattrs: fix xattr free in get_xattr() in error path
	- unsquashfs: add -user-xattrs option to only extract user.xxx xattrs
	- unsquashfs: add code to only print "not superuser" error message once
	- unsquashfs: check for integer overflow in user input
	- mksquashfs: check for integer overflow in user input
	- mksquashfs: fix "new" variable leak in dir_scan1()
	- read_fs: prevent buffer {over|under}flow in read_block() with
	  corrupted filesystems
	- read_fs: check metadata blocks are expected size in scan_inode_table()
	- read_fs: check the root inode block is found in scan_inode_table()
	- read_fs: Further harden scan_inode_table() against corrupted
	  filesystems
	- unsquashfs: prevent buffer {over|under}flow in read_block() with
	  corrupted filesystems
	- read_xattrs: harden xattr data reading against corrupted filesystems
	- unsquash-[23]: harden frag table reading against corrupted filesystems
	- unsquash-4.c: harden uid/gid & frag table reading against corruption
	- unsquashfs: harden inode/directory table reading against corruption
	- mksquashfs: improve out of space in output filesystem handling
	- mksquashfs: flag lseek error in writer as probable out of space
	- mksquashfs: flag lseek error in write_destination as probable out of
	  space
	- mksquashfs: print file being squashed when ^\ (SIGQUIT) typed
	- mksquashfs: make EXIT_MKSQUASHFS() etc restore via new restore thread
	- mksquashfs: fix recursive restore failure check
	- info: dump queue and cache status if ^\ hit twice within one second
	- mksquashfs: fix rare race condition in "locked fragment" queueing
	- lz4: add experimental support for lz4 compression
	- lz4: add support for lz4 "high compression"
	- lzo_wrapper: new implementation with compression options
	- gzip_wrapper: add compression options
	- mksquashfs: redo -comp <compressor> parsing
	- mksquashfs: display compressor options when -X option isn't recognised
	- mksquashfs: add -Xhelp option
	- mksquashfs/unsquashfs: fix mtime signedness
	- Mksquashfs: optimise duplicate checking when appending
	- Mksquashfs: introduce additional per CPU fragment process threads
	- Mksquashfs: significantly optimise fragment duplicate checking
	- read_fs: scan_inode_table(), fix memory leak on filesystem corruption
	- pseudo: add_pseudo(), fix use of freed variable
	- mksquashfs/unsquashfs: exclude/extract/pseudo files, fix handling of
	  leaf name
	- mksquashfs: rewrite default queue size so it's based on physical mem
	- mksquashfs: add a new -mem <mbytes> option
	- mksquashfs: fix limit on the number of dynamic pseudo files
	- mksquashfs: make -mem take a normal byte value, optionally with a
	  K, M or G 

4.2	28 FEB 2011	XZ compression, and compression options support

	1. Filesystem improvements:

	    1.1 Added XZ compression
	    1.2 Added compression options support

	2. Miscellaneous improvements/bug fixes

	    1.1 Add missing NO_XATTR filesystem flag to indicate no-xattrs
		option was specified and no xattrs should be stored when
		appending.
	    1.2 Add suppport in Unquashfs -stat option for displaying
		NO_XATTR flag.
	    1.3 Remove checkdata entry from Unsquashfs -stat option if a 4.0
		filesystem - checkdata is no longer supported.
	    1.4 Fix appending bug when appending to an empty filesystem - this
		would be incorrectly treated as an error.
	    1.5 Use glibc sys/xattr.h include rather than using attr/xattr.h
		which isn't present by default on some distributions.
	    1.6 Unsquashfs, fix block calculation error with regular files when
		file size is between 2^32-block_size+1 and 2^32-1.
	    1.7 Unsquashfs, fix sparse file writing when holes are larger than
		2^31-1.
	    1.8 Add external CFLAGS and LDFLAGS support to Makefile, and allow
		build options to be specified on command line.  Also don't
		over-write passed in CFLAGS definition.
	

4.1	19 SEPT 2010	Major filesystem and tools improvements

	1. Filesystem improvements:

	    1.1 Extended attribute support
	    1.2 New compression framework
	    1.3 Support for LZO compression
	    1.4 Support for LZMA compression (not yet in mainline)

	2. Mksquashfs improvements:

	    1.1 Enhanced pseudo file support
	    1.2 New options for choosing compression algorithm used
	    1.3 New options for controlling extended attributes
	    1.4 Fix misalignment issues with memcpy etc. seen on ARM
	    1.5 Fix floating point error in progress_bar when max == 0
	    1.6 Removed use of get_nproc() call unavailable in ulibc
	    1.7 Reorganised help text
	  
	3. Unsquashfs improvements:

	    1.1 New options for controlling extended attributes
	    1.2 Fix misalignment issues with memcpy etc. seen on ARM
	    1.3 Fix floating point error in progress_bar when max == 0
	    1.4 Removed use of get_nproc() call unavailable in ulibc

	  
4.0	5 APR 2009	Major filesystems improvements

	1. Kernel code improvements:

	    1.1 Fixed little endian layout adopted.  All swapping macros
		removed, and in-line swapping added for big-endian
		architectures.
	    1.2 Kernel code substantially improved and restructured.
	    1.3 Kernel code split into separate files along functional lines.
	    1.4 Vmalloc usage removed, and code changed to use separately
		allocated 4K buffers

	2. Unsquashfs improvements:

	    2.1 Support for 4.0 filesystems added.
	    2.2 Swapping macros rewritten.
	    2.3 Unsquashfs code restructured and split into separate files.

	3. Mksquashfs improvements:

	    3.1 Swapping macros rewritten.  Fixed little-endian layout allows
		code to be optimised and only added at compile time for
		big endian systems.
	    3.2 Support for pseudo files added.
	 
3.4	26 AUG 2008	Performance improvements to Unsquashfs, Mksquashfs
			and the kernel code.  Plus many small bug fixes.

	1. Kernel code improvements:

	    1.1 Internal Squashfs kernel metadata and fragment cache
		implementations have been merged and optimised.  Spinlocks are
		now used, locks are held for smaller periods and wakeups have
		been minimised.  Small race condition fixed where if two or
		more processes tried to read the same cache block
		simultaneously they would both read and decompress it.  10-20%+
		speed improvement has been seen on tests.
	    1.2 NFS export code rewritten following VFS changes in
		linux-2.6.24.
	    1.3 New patches for linux-2.6.25, linux-2.6.26, and linux-2.6.27.
		Fixed patch for linux-2.6.24.
	    1.4 Fixed small buffer_head leak in squashfs_read_data when
		handling badly corrupted filesystems.
	    1.5 Fixed bug in get_dir_index_using_offset.

	2. Unsquashfs improvements:

	    2.1 Unsquashfs has been parallelised.  Filesystem reading, writing
		and decompression is now multi-threaded.  Up to 40% speed
		improvement seen on tests.
	    2.2 Unsquashfs now has a progress bar.  Use -no-progress to
		disable it.
	    2.3 Fixed small bug where unistd.h wasn't being included on
		some distributions, leading to lseek being used rather than
		lseek64 - which meant on these distributions Unsquashfs
		couldn't unsquash filesystems larger than 4GB.

       3. Mksquashfs improvements:

	    3.1 Removed some small remaining parallelisation bottlenecks.
		Depending on source filesystem, up to 10%+ speed improvement.
	    3.2 Progress bar improved, and moved to separate thread.
	    3.3 Sparse file handling bug in Mksquashfs 3.3 fixed.
	    3.4 Two rare appending restore bugs fixed (when ^C hit twice).


3.3	1 NOV 2007	Increase in block size, sparse file support,
			Mksquashfs and Unsquashfs extended to use
			pattern matching in exclude/extract files, plus
			many more improvements and bug fixes.

	1. Filesystem improvements:

	     1.1. Maximum block size has been increased to 1Mbyte, and the
	    	  default block size has been increased to 128 Kbytes.
		  This improves compression.

	     1.2. Sparse files are now supported.  Sparse files are files
		  which have large areas of unallocated data commonly called
		  holes.  These files are now detected by Squashfs and stored
		  more efficiently.  This improves compression and read
		  performance for sparse files.

	2. Mksquashfs improvements:

	   2.1.  Exclude files have been extended to use wildcard pattern
		 matching and regular expressions.  Support has also been
		 added for non-anchored excludes, which means it is
		 now possible to specify excludes which match anywhere
		 in the filesystem (i.e. leaf files), rather than always
		 having to specify exclude files starting from the root
		 directory (anchored excludes).

	   2.2.  Recovery files are now created when appending to existing
		 Squashfs filesystems.  This allows the original filesystem
		 to be recovered if Mksquashfs aborts unexpectedly
		 (i.e. power failure).

	3. Unsquashfs improvements:

	    3.1. Multiple extract files can now be specified on the
		 command line, and the files/directories to be extracted can
		 now also be given in a file.

	    3.2. Extract files have been extended to use wildcard pattern
		 matching and regular expressions.

	    3.3. Filename printing has been enhanced and Unquashfs can
		 now display filenames with file attributes
		 ('ls -l' style output).

	    3.4. A -stat option has been added which displays the filesystem
		 superblock information.

	    3.5. Unsquashfs now supports 1.x filesystems.

	4. Miscellaneous improvements/bug fixes:

	    4.1. Squashfs kernel code improved to use SetPageError in
		 squashfs_readpage() if I/O error occurs.

	    4.2. Fixed Squashfs kernel code bug preventing file
		 seeking beyond 2GB.

	    4.3. Mksquashfs now detects file size changes between
		 first phase directory scan and second phase filesystem create.
		 It also deals better with file I/O errors.


3.2-r2	15 JAN 2007	Kernel patch update and progress bar bug fix

	1. Kernel patches 2.6.19/2.6.20 have been updated to use
	   const structures and mutexes rather than older semaphores.
	2. Minor SMP bug fixes.
	3. Progress bar broken on x86-64.  Fixed.

3.2	2 JAN 2007	NFS support, improvements to the Squashfs-tools, major
			bug fixes, lots of small improvements/bug fixes, and new
			kernel patches.

	Improvements:

	1. Squashfs filesystems can now be exported via NFS.
	2. Unsquashfs now supports 2.x filesystems.
	3. Mksquashfs now displays a progress bar.
	4. Squashfs kernel code has been hardened against accidently or
	   maliciously corrupted Squashfs filesystems.

	Bug fixes:

	5. Race condition occurring on S390 in readpage() fixed.
	6. Odd behaviour of MIPS memcpy in read_data() routine worked-around.
	7. Missing cache_flush in Squashfs symlink_readpage() added.
	

3.1-r2	30 AUG 2006	Mksquashfs -sort bug fix

			A code optimisation after testing unfortunately
			broke sorting in Mksquashfs.  This has been fixed.

3.1	19 AUG 2006	This release has some major improvements to
			the squashfs-tools, a couple of major bug
			fixes, lots of small improvements/bug fixes,
			and new kernel patches.

			
	1. Mksquashfs has been rewritten to be multi-threaded.  It
	   has the following improvements

	   1.1. Parallel compression.  By default as many compression and
		fragment compression threads are created as there are available
		processors.  This significantly speeds up performance on SMP
		systems.
	   1.2. File input and filesystem output is peformed in parallel on
		separate threads to maximise I/O performance.  Even on single
		processor systems this speeds up performance by at least 10%.
	   1.3. Appending has been significantly improved, and files within the
		filesystem being appended to are no longer scanned and
		checksummed.  This significantly improves append time for large
		filesystems.
	   1.4. File duplicate checking has been optimised, and split into two
		separate phases.  Only files which are considered possible
		duplicates after the first phase are checksummed and cached in
		memory.
	   1.5	The use of swap memory was found to significantly impact
		performance. The amount of memory used to cache files is now a
		command line option, by default this is 512 Mbytes.
 
	2. Unsquashfs has the following improvements

	   2.1  Unsquashfs now allows you to specify the filename or the
		directory within the Squashfs filesystem that is to be
		extracted, rather than always extracting the entire filesystem.
	   2.2  A new -force option has been added which forces Unsquashfs to
		output to the destination directory even if files and directories
		already exist in the destination directory.  This allows you to
		update an already existing directory tree, or to Unsquashfs to
		a partially filled directory tree.  Without the -force option
		Unsquashfs will refuse to output.

	3.  The following major bug fixes have been made

	  3.1  	A fragment table rounding bug has been fixed in Mksquashfs.
		Previously if the number of fragments in the filesystem
		were a multiple of 512, Mksquashfs would generate an
		incorrect filesystem.
	  3.2  	A rare SMP bug which occurred when simultaneously acccessing
		multiply mounted Squashfs filesystems has been fixed.

	4. Miscellaneous improvements/bug fixes

	  4.1	Kernel code stack usage has been reduced.  This is to ensure
		Squashfs works with 4K stacks.
	  4.2   Readdir (Squashfs kernel code) has been fixed to always
		return 0, rather than the number of directories read.  Squashfs
		should now interact better with NFS.
	  4.3	Lseek bug in Mksquashfs when appending to larger than 4GB
		filesystems fixed.
	  4.4	Squashfs 2.x initrds can now been mounted.
	  4.5	Unsquashfs exit status fixed.
	  4.6	New patches for linux-2.6.18 and linux-2.4.33.

	
3.0	15 MAR 2006	Major filesystem improvements

	1. Filesystems are no longer limited to 4 GB.  In
	   theory 2^64 or 4 exabytes is now supported.
	2. Files are no longer limited to 4 GB.  In theory the maximum
	   file size is 4 exabytes.
	3. Metadata (inode table and directory tables) are no longer
	   restricted to 16 Mbytes.
	4. Hardlinks are now suppported.
	5. Nlink counts are now supported.
	6. Readdir now returns '.' and '..' entries.
	7. Special support for files larger than 256 MB has been added to
	   the Squashfs kernel code for faster read access.
	8. Inode numbers are now stored within the inode rather than being
	   computed from inode location on disk (this is not so much an
	   improvement, but a change forced by the previously listed
	   improvements).

2.2-r2	8 SEPT 2005	Second release of 2.2, this release fixes a couple
			of small bugs, a couple of small documentation
			mistakes, and adds a patch for kernel 2.6.13. 

	1. Mksquashfs now deletes the output filesystem image file if an
	   error occurs whilst generating the filesystem.  Previously on
	   error the image file was left empty or partially written.
	2. Updated mksquashfs so that it doesn't allow you to generate
	   filesystems with block sizes smaller than 4K.  Squashfs hasn't
	   supported block sizes less than 4K since 2.0-alpha.
	3. Mksquashfs now ignores missing files/directories in sort files.
	   This was the original behaviour before 2.2.
	4. Fixed small mistake in fs/Kconfig where the version was still
	   listed as 2.0.
	5. Updated ACKNOWLEDGEMENTS file.


2.2	3 JUL 2005	This release has some small improvements, bug fixes
			and patches for new kernels.

	1. Sort routine re-worked and debugged from release 2.1.  It now allows
	   you to give Mkisofs style sort files and checks for filenames that
	   don't match anything.  Sort priority has also been changed to
	   conform to Mkisofs usage, highest priority files are now placed
	   at the start of the filesystem (this means they will be on the
	   inside of a CD or DVD).
	2. New Configure options for embedded systems (memory constrained
	   systems).  See INSTALL file for further details.
	3. Directory index bug fixed where chars were treated as signed on
           some architectures.  A file would not be found in the rare case
	   that the filename started with a chracter greater than 127.
	4. Bug introduced into the read_data() routine when sped up to use data
	   block queueing fixed.  If the second or later block resulted in an
	   I/O error this was not checked.
	5. Append bug introduced in 2.1 fixed.  The code to compute the new
	   compressed and uncompressed directory parts after appending was
	   wrong.
	6. Metadata block length read routine altered to not perform a
	   misaligned short read.  This was to fix reading on an ARM7 running
	   uCLinux without a misaligned read interrupt handler.
	7. Checkdata bug introduced in 2.1 fixed.
	

2.1-r2  15 DEC 2004	Code changed so it can be compiled with gcc 2.x

	1.  In some of the code added for release 2.1 I unknowingly used some
	    gcc extensions only supported by 3.x compilers.  I have received
	    a couple of reports that the 2.1 release doesn't build on 2.x and so
	    people are clearly still using gcc 2.x.  The code has been
	    rewritten to remove these extensions.

2.1	10 DEC 2004	Significantly improved directory handling plus numerous
			other smaller improvements

	1.  Fast indexed directories implemented.  These speed up directory
	    operations (ls, file lookup etc.) significantly for directories
	    larger than 8 KB.
	2.  All directories are now sorted in alphabetical order.  This again
	    speeds up directory operations, and in some cases it also results in
	    a small compression improvement (greater data similarity between
	    files with alphabetically similar names).
	3.  Maximum directory size increased from 512 KB to 128 MB.
	4.  Duplicate fragment checking and appending optimised in mksquashfs,
	    depending on filesystem, this is now up to 25% faster.
	5.  Mksquashfs help information reformatted and reorganised.
	6.  The Squashfs version and release date is now printed at kernel
	    boot-time or module insertion.  This addition will hopefully help
	    to reduce the growing problem where the Squashfs version supported
	    by a kernel is unknown and the kernel source is unavailable.
        7.  New PERFORMANCE.README file.
	8.  New -2.0 mksquashfs option.
	9.  CHANGES file reorganised.
	10. README file reorganised, clarified and updated to include the 2.0
	    mksquashfs options.
	11. New patch for Linux 2.6.9.
	12. New patch for Linux 2.4.28.

2.0r2	29 AUG 2004	Workaround for kernel bug in kernels 2.6.8 and newer
			added

	1. New patch for kernel 2.6.8.1.  This includes a workaround for a
	   kernel bug introduced in 2.6.7bk14, which is present in all later
	   versions of the kernel.  

	   If you're using a 2.6.8 kernel or later then you must use this
	   2.6.8.1 patch.  If you've experienced hangs or oopses using Squashfs
	   with a 2.6.8 or later kernel then you've hit this bug, and this
	   patch will fix it.

	   It is worth mentioning that this kernel bug potentially affects
	   other filesystems.  If you receive odd results with other
	   filesystems you may be experiencing this bug with that filesystem.
	   I submitted a patch but this has not yet gone into the
	   kernel, hopefully the bug will be fixed in later kernels. 

2.0	13 JULY 2004	A couple of new options, and some bug fixes

	1. New mksquashfs -all-root, -root-owned, -force-uid, and -force-gid
	   options.  These allow the uids/gids of files in the generated
	   filesystem to be specified, overriding the uids/gids in the
	   source filesystem.
	2. Initrds are now supported for kernels 2.6.x.
	3. amd64 bug fixes.  If you use an amd64, please read the README-AMD64
	   file.
	4. Check-data and gid bug fixes.  With 2.0-alpha when mounting 1.x
	   filesystems in certain cases file gids were corrupted.
	5. New patch for Linux 2.6.7.

2.0-ALPHA	21 MAY 2004	Filesystem changes and compression improvements

	1. Squashfs 2.0 has added the concept of fragment blocks.
           Files smaller than the file block size and optionally the
	   remainder of files that do not fit fully into a block (i.e. the
	   last 32K in a 96K file) are packed into shared fragments and
	   compressed together.  This achieves on average 5 - 20% better
	   compression than Squashfs 1.x.
	2. The maximum block size has been increased to 64K (in the ALPHA
	   version of Squashfs 2.0).
	3. The maximum number of UIDs has been increased to 256 (from 48 in
	   1.x).
	4. The maximum number of GIDs has been increased to 256 (from 15 in
	   1.x).
	5. Removal of sleep_on() function call in 2.6.x patch, to allow Squashfs
	   to work on the Fedora rc2 kernel.
	6. Numerous small bug fixes have been made.

1.3r3	18 JAN 2004	Third release of 1.3, this adds a new mksquashfs option,
			some bug fixes, and extra patches for new kernels

	1. New mksquashfs -ef exclude option.  This option reads the exclude
	   dirs/files from an exclude file, one exclude dir/file per line.  This
	   avoids the command line size limit when using the -e exclude option,
	2. When appending to existing filesystems, if mksquashfs experiences a
	   fatal error (e.g. out of space when adding to the destination), the
	   original filesystem is restored,
	3. Mksquashfs now builds standalone, without the kernel needing to be
	   patched.
	4. Bug fix in the kernel squashfs filesystem, where the pages being
	   filled were not kmapped.  This seems to only have caused problems
	   on an Apple G5,
	5. New patch for Linux 2.4.24,

	6. New patch for Linux 2.6.1, this replaces the patch for 2.6.0-test7.

1.3r2	14 OCT 2003	Second release of 1.3, bug fixes and extra patches for
		        new kernels

	1. Bug fix in routine that adds files to the filesystem being
	   generated in mksquashfs.  This bug was introduced in 1.3
	   (not enough testing...) when I rewrote it to handle files larger
	   than available memory.  This bug caused a SEGV, so if you've ever
	   got that, it is now fixed,
	2. Long running bug where ls -s and du reported wrong block size
	   fixed.  I'm pretty sure this used to work many kernel versions ago
	   (2.4.7) but it broke somewhere along the line since then,
	3. New patch for Linux 2.4.22,
	4. New patch for 2.6.0-test7, this replaces the patch for 2.6.0-test1.

1.3	29 JUL 2003	FIFO/Socket support added plus optimisations and
		        improvements

	1. FIFOs and Socket inodes are now supported,
	2. Mksquashfs can now compress files larger than available
	   memory,
	3. File duplicate check routine optimised,
	4. Exit codes fixed in Mksquashfs,
	5. Patch for Linux 2.4.21,
	6. Patch for Linux 2.6.0-test1.  Hopefully, this will work for
	   the next few releases of 2.6.0-testx, otherwise, I'll be
	   releasing a lot of updates to the 2.6.0 patch...

1.2	13 MAR 2003	Append feature and new mksquashfs options added

	Mksquashfs can now add to existing squashfs filesystems.  Three extra
	options "-noappend", "-keep-as-directory", and "root-becomes"
	have been added.

	The append option with file duplicate detection, means squashfs can be
	used as a simple versioning archiving filesystem. A squashfs
	filesystem can be created with for example the linux-2.4.19 source.
	Appending the linux-2.4.20 source will create a filesystem with the
	two source trees, but only the changed files will take extra room,
	the unchanged files will be detected as duplicates.

	See the README file for usage changes.

1.1b	16 JAN 2003	Bug fix release

	Fixed readpage deadlock bug.  This was a rare deadlock bug that
	happened when pushing pages into the page cache when using greater
	than 4K blocks.  I never got this bug when I tested the filesystem,
	but two people emailed me on the same day about the problem!
	I fixed it by using a page cache function that wasn't there when
	I originally did the work, which was nice :-)

1.1	8 JAN 2003	Added features

	1. Kernel squashfs can now mount different byte order filesystems.
	2. Additional features added to mksquashfs.  Mksquashfs now supports
	   exclude files and multiple source files/directories can be
	   specified.  A nopad option has also been added, which
	   informs mksquashfs not to pad filesystems to a multiple of 4K.
	   See README for mksquashfs usage changes.
	3. Greater than 2GB filesystems bug fix.  Filesystems greater than 2GB
	   can now be created.

1.0c 	14 NOV 2002	Bug fix release

	Fixed bugs with initrds and device nodes

1.0 	23 OCT 2002	Initial release
