	SQUASHFS 4.3 - A squashed read-only filesystem for Linux

	Copyright 2002-2014 Phillip Lougher <phillip@lougher.demon.co.uk>

	Released under the GPL licence (version 2 or later).

Welcome to Squashfs 4.3.  This is the first release in over 3 years, and
there are substantial improvements to stability, new compression options
and compressors, speed optimisations, and new options for Mksquashfs/Unsquashfs.

This is a tools only release, support for Squashfs filesystems is
in mainline (2.6.29 and later).

Changes in Squashfs-tools 4.3
-----------------------------

1. Stability improvements.  Better checking of user input for out of
   range/invalid values.  Better handling of corrupted Squashfs filesystems
   (Mksquashfs append mode, and Unsquashfs).  Better handling of buffer
   overflow/underflow.

2. GZIP compressor now supports compression options, allowing different
   compression levels to be used.

3. Rewritten LZO compressor with compression options, allowing different
   LZO algorithms and different compression levels to be used.

4. New LZ4 compressor (note not yet in mainline kernel)

5. Better default memory usage for Mksquashfs.  Mksquashfs by default now
   uses 25% of physical memory.

6. Duplicate checking in Mksquashfs further optimised.  With certain
   "problem filesystems" greater than 2x performance improvement.
   Filesystems with a lot of duplicates should see at least 10-20% speed
   improvement.

7. The -stat option in Unsquashfs now displays the compression options
   used to generate the original filesystem.  Previously -stat only displayed
   the compression algorithm used.

8. The file being compressed/uncompressed in Mksquashfs/Unsquashfs is now
   displayed if CTRL-\ (SIGQUIT from keyboard) typed.

9. The status of the internal queues/caches in Mksquashfs/Unsquashfs is
   now displayed if CTRL-\ (SIGQUIT from keyboard) is typed twice within
   one second.  Normally only useful for "power users", but it can be
   used to discover if there's any bottlenecks affecting performance
   (the bottleneck will normally be the compressors/fragment compressors).

10. Miscellaneous new options for Mksquashfs/Unsquashfs to fine tune behaviour.

11. Fixes for CVE-2012-4024 and CVE-2012-4025.

Compatiblity
------------

Mksquashfs 4.3 generates 4.0 filesystems.  These filesystems are fully
compatible/interchangable with filesystems generated by Mksquashfs 4.0 and are
mountable on 2.6.29 and later kernels.

Compressors
-----------

New compression options and compressors are now supported.

The new options and compressors are:

1. gzip
	  -Xcompression-level <compression-level>
		<compression-level> should be 1 .. 9 (default 9)
	  -Xwindow-size <window-size>
		<window-size> should be 8 .. 15 (default 15)
	  -Xstrategy strategy1,strategy2,...,strategyN
		Compress using strategy1,strategy2,...,strategyN in turn
		and choose the best compression.
		Available strategies: default, filtered, huffman_only,
		run_length_encoded and fixed

2. lzo
	  -Xalgorithm <algorithm>
		Where <algorithm> is one of:
			lzo1x_1
			lzo1x_1_11
			lzo1x_1_12
			lzo1x_1_15
			lzo1x_999 (default)
	  -Xcompression-level <compression-level>
		<compression-level> should be 1 .. 9 (default 8)
		Only applies to lzo1x_999 algorithm

3. lz4
	  -Xhc
		Compress using LZ4 High Compression

The compression specific options are, obviously, specific to the compressor
in question, and you should read the compressor documentation and check
their web sites to understand their behaviour.

In general the defaults used by Mksquashfs for each compressor are optimised
to give the best performance for each compressor, where what constitutes
best depends on the compressor.  For gzip/xz best means highest compression
(trying multiple filters/strategies can improve compression, but this is
extremely expensive computationally, and hence, not suitable for the defaults),
for LZO/LZ4 best means a tradeoff between compression and (de)-compression
overhead (LZO/LZ4 by definition are intended for weaker processors).

New Mksquashfs options
----------------------

1. -mem <size>

  Set the amount of memory used by Mksquashfs to <size> bytes.  G/M and K
  post-fixes are supported.

  By default Mksquashfs uses 25% of the physical memory.  Increasing
  this with the -mem option can increase performance (note it does not have
  any effect on compression).  Reducing it can prevent thrashing if the
  system is busy and there is not 25% of physical memory free (again, note
  it does not have any effect on compression).

2. -exit-on-error

  By default Mksquashfs treats certain errors as benign, if these
  errors occur Mksquashfs prints the error on the console but continues.
  These errors are typically failure to read a file from the source filesystem.
  This is deliberate, in many cases users prefer Mksquashfs to flag
  the error but continue rather than abort what may be hours of compression.

  But there are times where failure to read any file is considered critical,
  and users (especially in the case of automated scripts where the
  errors output to the console may be missed) prefer Mksquashfs to exit.

  The new -exit-on-error option can be used in this scenario.  This option
  makes Mksquashfs treat all benign errors as fatal.

3. -progress

  By default if -info is specified, the progress bar is disabled as it gets
  in the way.  Occasionally you might want the progress bar enabled whilst
  -info is enabled.  This option forces Mksquashfs to output the progress
  bar when -info is specified.

4. -Xhelp

  Display the usage text for the currently selected compressor.

New Unsquashfs options
----------------------

1. -u[ser-xattrs]

  Only write user xattrs.  This forces Unsquashfs to ignore system xattrs.
  This is useful when Unsquashing a filesystem as a non-root user, and the
  filesystem contains system xattrs which are only writable by root.

Major bugs fixed
----------------

1. If Mksquashfs ran out of space in the destination filesystem, this
   would not cause Mksquashfs to immediately abort, and Mksquashfs would
   continue to process the source filesystem.  Mksquashfs now immediately
   aborts on out of space in the destination filesystem.

2. Unsquashfs ignored the maximum number of open files limit, and if that
   was lower than the default limit for Linux, it would run out of file
   descriptors.  Unsquashfs now limits the number of open files to the
   limit currently in force (e.g. specified by setrlimit).

3. If huge numbers of dynamic pseudo files were specified, Mksquashfs
   could exceed the maximum number of open files limit.  This was because
   Mksquashfs created all the dynamic file processes up front before
   commencing source filesystem reading and compression.  Mksquashfs
   now creates the dynamic file processes on demand whilst reading
   and compressing the source filesystem, thus limiting the number of
   dynamic pseudo file processes in existence at any one time.

4. When outputting Unsquashfs used to set the permissions of directories
   as it recursively descended.  This in hindsight had an obvious oversight,
   if a directory had only read permission (or was otherwise restricted), then
   Unsquashfs would fail to write its contents when descending into it.  Fixed
   by setting directory permissions as Unsquashfs recursively unwinds.
