Home | History | Annotate | Download | only in squashfs-tools
      1 			SQUASHFS CHANGE LOG
      2 
      3 4.3	12 MAY 2014	New compressor options, new Mksquashfs/Unsquashfs
      4 			functionality, duplicate checking optimisations,
      5 			stability improvements (option/file parsing,
      6 			buffer/memory overflow checks, filesystem hardening
      7 			on corrupted filesystems), CVE fixes.
      8 
      9 	Too many changes to do the traditional custom changelog.  But, this
     10 	is now unnecessary, so instead list most significant 15% of commits
     11 	from git changelog in chronological order.
     12 
     13 	- unsquashfs: add checks for corrupted data in opendir functions
     14 	- unsquashfs: completely empty filesystems incorrectly generate an error
     15 	- unsquashfs: fix open file limit
     16 	- mksquashfs: Use linked list to store directory entries rather
     17 	- mksquashfs: Remove qsort and add a bottom up linked list merge sort
     18 	- mksquashfs: optimise lookup_inode2() for dirs
     19 	- pseudo: fix handling of modify pseudo files
     20 	- pseudo: fix handling of directory pseudo files
     21 	- xattr: Fix ERROR() so that it is synchronised with the progress bar
     22 	- mksquashfs/sort: Fix INFO() so that it is synced with the progress bar
     23 	- mksquashfs: Add -progress to force progress bar when using -info
     24 	- error.h: consolidate the various error macros into one header file
     25 	- mksquashfs: fix stack overflow in write_fragment_table()
     26 	- mksquashfs: move list allocation from off the stack
     27 	- unsquashfs: fix oversight in directory permission setting
     28 	- mksquashfs: dynamically allocate recovery_file
     29 	- mksquashfs: dynamically allocate buffer in subpathname()
     30 	- mksquashfs: dynamically allocate buffer in pathname()
     31 	- unsquashfs: fix CVE-2012-4024
     32 	- unsquashfs: fix CVE-2012-4025
     33 	- mksquashfs: fix potential stack overflow in get_component()
     34 	- mksquashfs: add parse_number() helper for numeric command line options
     35 	- mksquasfs: check return value of fstat() in reader_read_file()
     36 	- mksquashfs: dynamically allocate filename in old_add_exclude()
     37 	- unsquashfs: dynamically allocate pathname in dir_scan()
     38 	- unsquashfs: dynamically allocate pathname in pre_scan()
     39 	- sort: dynamically allocate filename in add_sort_list()
     40 	- mksquashfs: fix dir_scan() exit if lstat of source directory fails
     41 	- pseudo: fix memory leak in read_pseudo_def() if exec_file() fails
     42 	- pseudo: dynamically allocate path in dump_pseudo()
     43 	- mksquashfs: dynamically allocate path in display_path2()
     44 	- mksquashfs: dynamically allocate b_buffer in getbase()
     45 	- pseudo: fix potential stack overflow in get_component()
     46 	- pseudo: avoid buffer overflow in read_pseudo_def() using sscanf()
     47 	- pseudo: dynamically allocate filename in exec_file()
     48 	- pseudo: avoid buffer overflow in read_sort_file() using fscanf()
     49 	- sort: tighten up sort file parsing
     50 	- unsquashfs: fix name under-allocation in process_extract_files()
     51 	- unsquashfs: avoid buffer overflow in print_filename() using sprintf()
     52 	- Fix some limits in the file parsing routines
     53 	- pseudo: Rewrite pseudo file processing
     54 	- read_fs: fix small memory leaks in read_filesystem()
     55 	- mksquashfs: fix fclose leak in reader_read_file() on I/O error
     56 	- mksquashfs: fix frag struct leak in write_file_{process|blocks|frag}
     57 	- unsquashfs_xattr: fix memory leak in write_xattr()
     58 	- read_xattrs: fix xattr free in get_xattr() in error path
     59 	- unsquashfs: add -user-xattrs option to only extract user.xxx xattrs
     60 	- unsquashfs: add code to only print "not superuser" error message once
     61 	- unsquashfs: check for integer overflow in user input
     62 	- mksquashfs: check for integer overflow in user input
     63 	- mksquashfs: fix "new" variable leak in dir_scan1()
     64 	- read_fs: prevent buffer {over|under}flow in read_block() with
     65 	  corrupted filesystems
     66 	- read_fs: check metadata blocks are expected size in scan_inode_table()
     67 	- read_fs: check the root inode block is found in scan_inode_table()
     68 	- read_fs: Further harden scan_inode_table() against corrupted
     69 	  filesystems
     70 	- unsquashfs: prevent buffer {over|under}flow in read_block() with
     71 	  corrupted filesystems
     72 	- read_xattrs: harden xattr data reading against corrupted filesystems
     73 	- unsquash-[23]: harden frag table reading against corrupted filesystems
     74 	- unsquash-4.c: harden uid/gid & frag table reading against corruption
     75 	- unsquashfs: harden inode/directory table reading against corruption
     76 	- mksquashfs: improve out of space in output filesystem handling
     77 	- mksquashfs: flag lseek error in writer as probable out of space
     78 	- mksquashfs: flag lseek error in write_destination as probable out of
     79 	  space
     80 	- mksquashfs: print file being squashed when ^\ (SIGQUIT) typed
     81 	- mksquashfs: make EXIT_MKSQUASHFS() etc restore via new restore thread
     82 	- mksquashfs: fix recursive restore failure check
     83 	- info: dump queue and cache status if ^\ hit twice within one second
     84 	- mksquashfs: fix rare race condition in "locked fragment" queueing
     85 	- lz4: add experimental support for lz4 compression
     86 	- lz4: add support for lz4 "high compression"
     87 	- lzo_wrapper: new implementation with compression options
     88 	- gzip_wrapper: add compression options
     89 	- mksquashfs: redo -comp <compressor> parsing
     90 	- mksquashfs: display compressor options when -X option isn't recognised
     91 	- mksquashfs: add -Xhelp option
     92 	- mksquashfs/unsquashfs: fix mtime signedness
     93 	- Mksquashfs: optimise duplicate checking when appending
     94 	- Mksquashfs: introduce additional per CPU fragment process threads
     95 	- Mksquashfs: significantly optimise fragment duplicate checking
     96 	- read_fs: scan_inode_table(), fix memory leak on filesystem corruption
     97 	- pseudo: add_pseudo(), fix use of freed variable
     98 	- mksquashfs/unsquashfs: exclude/extract/pseudo files, fix handling of
     99 	  leaf name
    100 	- mksquashfs: rewrite default queue size so it's based on physical mem
    101 	- mksquashfs: add a new -mem <mbytes> option
    102 	- mksquashfs: fix limit on the number of dynamic pseudo files
    103 	- mksquashfs: make -mem take a normal byte value, optionally with a
    104 	  K, M or G 
    105 
    106 4.2	28 FEB 2011	XZ compression, and compression options support
    107 
    108 	1. Filesystem improvements:
    109 
    110 	    1.1 Added XZ compression
    111 	    1.2 Added compression options support
    112 
    113 	2. Miscellaneous improvements/bug fixes
    114 
    115 	    1.1 Add missing NO_XATTR filesystem flag to indicate no-xattrs
    116 		option was specified and no xattrs should be stored when
    117 		appending.
    118 	    1.2 Add suppport in Unquashfs -stat option for displaying
    119 		NO_XATTR flag.
    120 	    1.3 Remove checkdata entry from Unsquashfs -stat option if a 4.0
    121 		filesystem - checkdata is no longer supported.
    122 	    1.4 Fix appending bug when appending to an empty filesystem - this
    123 		would be incorrectly treated as an error.
    124 	    1.5 Use glibc sys/xattr.h include rather than using attr/xattr.h
    125 		which isn't present by default on some distributions.
    126 	    1.6 Unsquashfs, fix block calculation error with regular files when
    127 		file size is between 2^32-block_size+1 and 2^32-1.
    128 	    1.7 Unsquashfs, fix sparse file writing when holes are larger than
    129 		2^31-1.
    130 	    1.8 Add external CFLAGS and LDFLAGS support to Makefile, and allow
    131 		build options to be specified on command line.  Also don't
    132 		over-write passed in CFLAGS definition.
    133 	
    134 
    135 4.1	19 SEPT 2010	Major filesystem and tools improvements
    136 
    137 	1. Filesystem improvements:
    138 
    139 	    1.1 Extended attribute support
    140 	    1.2 New compression framework
    141 	    1.3 Support for LZO compression
    142 	    1.4 Support for LZMA compression (not yet in mainline)
    143 
    144 	2. Mksquashfs improvements:
    145 
    146 	    1.1 Enhanced pseudo file support
    147 	    1.2 New options for choosing compression algorithm used
    148 	    1.3 New options for controlling extended attributes
    149 	    1.4 Fix misalignment issues with memcpy etc. seen on ARM
    150 	    1.5 Fix floating point error in progress_bar when max == 0
    151 	    1.6 Removed use of get_nproc() call unavailable in ulibc
    152 	    1.7 Reorganised help text
    153 	  
    154 	3. Unsquashfs improvements:
    155 
    156 	    1.1 New options for controlling extended attributes
    157 	    1.2 Fix misalignment issues with memcpy etc. seen on ARM
    158 	    1.3 Fix floating point error in progress_bar when max == 0
    159 	    1.4 Removed use of get_nproc() call unavailable in ulibc
    160 
    161 	  
    162 4.0	5 APR 2009	Major filesystems improvements
    163 
    164 	1. Kernel code improvements:
    165 
    166 	    1.1 Fixed little endian layout adopted.  All swapping macros
    167 		removed, and in-line swapping added for big-endian
    168 		architectures.
    169 	    1.2 Kernel code substantially improved and restructured.
    170 	    1.3 Kernel code split into separate files along functional lines.
    171 	    1.4 Vmalloc usage removed, and code changed to use separately
    172 		allocated 4K buffers
    173 
    174 	2. Unsquashfs improvements:
    175 
    176 	    2.1 Support for 4.0 filesystems added.
    177 	    2.2 Swapping macros rewritten.
    178 	    2.3 Unsquashfs code restructured and split into separate files.
    179 
    180 	3. Mksquashfs improvements:
    181 
    182 	    3.1 Swapping macros rewritten.  Fixed little-endian layout allows
    183 		code to be optimised and only added at compile time for
    184 		big endian systems.
    185 	    3.2 Support for pseudo files added.
    186 	 
    187 3.4	26 AUG 2008	Performance improvements to Unsquashfs, Mksquashfs
    188 			and the kernel code.  Plus many small bug fixes.
    189 
    190 	1. Kernel code improvements:
    191 
    192 	    1.1 Internal Squashfs kernel metadata and fragment cache
    193 		implementations have been merged and optimised.  Spinlocks are
    194 		now used, locks are held for smaller periods and wakeups have
    195 		been minimised.  Small race condition fixed where if two or
    196 		more processes tried to read the same cache block
    197 		simultaneously they would both read and decompress it.  10-20%+
    198 		speed improvement has been seen on tests.
    199 	    1.2 NFS export code rewritten following VFS changes in
    200 		linux-2.6.24.
    201 	    1.3 New patches for linux-2.6.25, linux-2.6.26, and linux-2.6.27.
    202 		Fixed patch for linux-2.6.24.
    203 	    1.4 Fixed small buffer_head leak in squashfs_read_data when
    204 		handling badly corrupted filesystems.
    205 	    1.5 Fixed bug in get_dir_index_using_offset.
    206 
    207 	2. Unsquashfs improvements:
    208 
    209 	    2.1 Unsquashfs has been parallelised.  Filesystem reading, writing
    210 		and decompression is now multi-threaded.  Up to 40% speed
    211 		improvement seen on tests.
    212 	    2.2 Unsquashfs now has a progress bar.  Use -no-progress to
    213 		disable it.
    214 	    2.3 Fixed small bug where unistd.h wasn't being included on
    215 		some distributions, leading to lseek being used rather than
    216 		lseek64 - which meant on these distributions Unsquashfs
    217 		couldn't unsquash filesystems larger than 4GB.
    218 
    219        3. Mksquashfs improvements:
    220 
    221 	    3.1 Removed some small remaining parallelisation bottlenecks.
    222 		Depending on source filesystem, up to 10%+ speed improvement.
    223 	    3.2 Progress bar improved, and moved to separate thread.
    224 	    3.3 Sparse file handling bug in Mksquashfs 3.3 fixed.
    225 	    3.4 Two rare appending restore bugs fixed (when ^C hit twice).
    226 
    227 
    228 3.3	1 NOV 2007	Increase in block size, sparse file support,
    229 			Mksquashfs and Unsquashfs extended to use
    230 			pattern matching in exclude/extract files, plus
    231 			many more improvements and bug fixes.
    232 
    233 	1. Filesystem improvements:
    234 
    235 	     1.1. Maximum block size has been increased to 1Mbyte, and the
    236 	    	  default block size has been increased to 128 Kbytes.
    237 		  This improves compression.
    238 
    239 	     1.2. Sparse files are now supported.  Sparse files are files
    240 		  which have large areas of unallocated data commonly called
    241 		  holes.  These files are now detected by Squashfs and stored
    242 		  more efficiently.  This improves compression and read
    243 		  performance for sparse files.
    244 
    245 	2. Mksquashfs improvements:
    246 
    247 	   2.1.  Exclude files have been extended to use wildcard pattern
    248 		 matching and regular expressions.  Support has also been
    249 		 added for non-anchored excludes, which means it is
    250 		 now possible to specify excludes which match anywhere
    251 		 in the filesystem (i.e. leaf files), rather than always
    252 		 having to specify exclude files starting from the root
    253 		 directory (anchored excludes).
    254 
    255 	   2.2.  Recovery files are now created when appending to existing
    256 		 Squashfs filesystems.  This allows the original filesystem
    257 		 to be recovered if Mksquashfs aborts unexpectedly
    258 		 (i.e. power failure).
    259 
    260 	3. Unsquashfs improvements:
    261 
    262 	    3.1. Multiple extract files can now be specified on the
    263 		 command line, and the files/directories to be extracted can
    264 		 now also be given in a file.
    265 
    266 	    3.2. Extract files have been extended to use wildcard pattern
    267 		 matching and regular expressions.
    268 
    269 	    3.3. Filename printing has been enhanced and Unquashfs can
    270 		 now display filenames with file attributes
    271 		 ('ls -l' style output).
    272 
    273 	    3.4. A -stat option has been added which displays the filesystem
    274 		 superblock information.
    275 
    276 	    3.5. Unsquashfs now supports 1.x filesystems.
    277 
    278 	4. Miscellaneous improvements/bug fixes:
    279 
    280 	    4.1. Squashfs kernel code improved to use SetPageError in
    281 		 squashfs_readpage() if I/O error occurs.
    282 
    283 	    4.2. Fixed Squashfs kernel code bug preventing file
    284 		 seeking beyond 2GB.
    285 
    286 	    4.3. Mksquashfs now detects file size changes between
    287 		 first phase directory scan and second phase filesystem create.
    288 		 It also deals better with file I/O errors.
    289 
    290 
    291 3.2-r2	15 JAN 2007	Kernel patch update and progress bar bug fix
    292 
    293 	1. Kernel patches 2.6.19/2.6.20 have been updated to use
    294 	   const structures and mutexes rather than older semaphores.
    295 	2. Minor SMP bug fixes.
    296 	3. Progress bar broken on x86-64.  Fixed.
    297 
    298 3.2	2 JAN 2007	NFS support, improvements to the Squashfs-tools, major
    299 			bug fixes, lots of small improvements/bug fixes, and new
    300 			kernel patches.
    301 
    302 	Improvements:
    303 
    304 	1. Squashfs filesystems can now be exported via NFS.
    305 	2. Unsquashfs now supports 2.x filesystems.
    306 	3. Mksquashfs now displays a progress bar.
    307 	4. Squashfs kernel code has been hardened against accidently or
    308 	   maliciously corrupted Squashfs filesystems.
    309 
    310 	Bug fixes:
    311 
    312 	5. Race condition occurring on S390 in readpage() fixed.
    313 	6. Odd behaviour of MIPS memcpy in read_data() routine worked-around.
    314 	7. Missing cache_flush in Squashfs symlink_readpage() added.
    315 	
    316 
    317 3.1-r2	30 AUG 2006	Mksquashfs -sort bug fix
    318 
    319 			A code optimisation after testing unfortunately
    320 			broke sorting in Mksquashfs.  This has been fixed.
    321 
    322 3.1	19 AUG 2006	This release has some major improvements to
    323 			the squashfs-tools, a couple of major bug
    324 			fixes, lots of small improvements/bug fixes,
    325 			and new kernel patches.
    326 
    327 			
    328 	1. Mksquashfs has been rewritten to be multi-threaded.  It
    329 	   has the following improvements
    330 
    331 	   1.1. Parallel compression.  By default as many compression and
    332 		fragment compression threads are created as there are available
    333 		processors.  This significantly speeds up performance on SMP
    334 		systems.
    335 	   1.2. File input and filesystem output is peformed in parallel on
    336 		separate threads to maximise I/O performance.  Even on single
    337 		processor systems this speeds up performance by at least 10%.
    338 	   1.3. Appending has been significantly improved, and files within the
    339 		filesystem being appended to are no longer scanned and
    340 		checksummed.  This significantly improves append time for large
    341 		filesystems.
    342 	   1.4. File duplicate checking has been optimised, and split into two
    343 		separate phases.  Only files which are considered possible
    344 		duplicates after the first phase are checksummed and cached in
    345 		memory.
    346 	   1.5	The use of swap memory was found to significantly impact
    347 		performance. The amount of memory used to cache files is now a
    348 		command line option, by default this is 512 Mbytes.
    349  
    350 	2. Unsquashfs has the following improvements
    351 
    352 	   2.1  Unsquashfs now allows you to specify the filename or the
    353 		directory within the Squashfs filesystem that is to be
    354 		extracted, rather than always extracting the entire filesystem.
    355 	   2.2  A new -force option has been added which forces Unsquashfs to
    356 		output to the destination directory even if files and directories
    357 		already exist in the destination directory.  This allows you to
    358 		update an already existing directory tree, or to Unsquashfs to
    359 		a partially filled directory tree.  Without the -force option
    360 		Unsquashfs will refuse to output.
    361 
    362 	3.  The following major bug fixes have been made
    363 
    364 	  3.1  	A fragment table rounding bug has been fixed in Mksquashfs.
    365 		Previously if the number of fragments in the filesystem
    366 		were a multiple of 512, Mksquashfs would generate an
    367 		incorrect filesystem.
    368 	  3.2  	A rare SMP bug which occurred when simultaneously acccessing
    369 		multiply mounted Squashfs filesystems has been fixed.
    370 
    371 	4. Miscellaneous improvements/bug fixes
    372 
    373 	  4.1	Kernel code stack usage has been reduced.  This is to ensure
    374 		Squashfs works with 4K stacks.
    375 	  4.2   Readdir (Squashfs kernel code) has been fixed to always
    376 		return 0, rather than the number of directories read.  Squashfs
    377 		should now interact better with NFS.
    378 	  4.3	Lseek bug in Mksquashfs when appending to larger than 4GB
    379 		filesystems fixed.
    380 	  4.4	Squashfs 2.x initrds can now been mounted.
    381 	  4.5	Unsquashfs exit status fixed.
    382 	  4.6	New patches for linux-2.6.18 and linux-2.4.33.
    383 
    384 	
    385 3.0	15 MAR 2006	Major filesystem improvements
    386 
    387 	1. Filesystems are no longer limited to 4 GB.  In
    388 	   theory 2^64 or 4 exabytes is now supported.
    389 	2. Files are no longer limited to 4 GB.  In theory the maximum
    390 	   file size is 4 exabytes.
    391 	3. Metadata (inode table and directory tables) are no longer
    392 	   restricted to 16 Mbytes.
    393 	4. Hardlinks are now suppported.
    394 	5. Nlink counts are now supported.
    395 	6. Readdir now returns '.' and '..' entries.
    396 	7. Special support for files larger than 256 MB has been added to
    397 	   the Squashfs kernel code for faster read access.
    398 	8. Inode numbers are now stored within the inode rather than being
    399 	   computed from inode location on disk (this is not so much an
    400 	   improvement, but a change forced by the previously listed
    401 	   improvements).
    402 
    403 2.2-r2	8 SEPT 2005	Second release of 2.2, this release fixes a couple
    404 			of small bugs, a couple of small documentation
    405 			mistakes, and adds a patch for kernel 2.6.13. 
    406 
    407 	1. Mksquashfs now deletes the output filesystem image file if an
    408 	   error occurs whilst generating the filesystem.  Previously on
    409 	   error the image file was left empty or partially written.
    410 	2. Updated mksquashfs so that it doesn't allow you to generate
    411 	   filesystems with block sizes smaller than 4K.  Squashfs hasn't
    412 	   supported block sizes less than 4K since 2.0-alpha.
    413 	3. Mksquashfs now ignores missing files/directories in sort files.
    414 	   This was the original behaviour before 2.2.
    415 	4. Fixed small mistake in fs/Kconfig where the version was still
    416 	   listed as 2.0.
    417 	5. Updated ACKNOWLEDGEMENTS file.
    418 
    419 
    420 2.2	3 JUL 2005	This release has some small improvements, bug fixes
    421 			and patches for new kernels.
    422 
    423 	1. Sort routine re-worked and debugged from release 2.1.  It now allows
    424 	   you to give Mkisofs style sort files and checks for filenames that
    425 	   don't match anything.  Sort priority has also been changed to
    426 	   conform to Mkisofs usage, highest priority files are now placed
    427 	   at the start of the filesystem (this means they will be on the
    428 	   inside of a CD or DVD).
    429 	2. New Configure options for embedded systems (memory constrained
    430 	   systems).  See INSTALL file for further details.
    431 	3. Directory index bug fixed where chars were treated as signed on
    432            some architectures.  A file would not be found in the rare case
    433 	   that the filename started with a chracter greater than 127.
    434 	4. Bug introduced into the read_data() routine when sped up to use data
    435 	   block queueing fixed.  If the second or later block resulted in an
    436 	   I/O error this was not checked.
    437 	5. Append bug introduced in 2.1 fixed.  The code to compute the new
    438 	   compressed and uncompressed directory parts after appending was
    439 	   wrong.
    440 	6. Metadata block length read routine altered to not perform a
    441 	   misaligned short read.  This was to fix reading on an ARM7 running
    442 	   uCLinux without a misaligned read interrupt handler.
    443 	7. Checkdata bug introduced in 2.1 fixed.
    444 	
    445 
    446 2.1-r2  15 DEC 2004	Code changed so it can be compiled with gcc 2.x
    447 
    448 	1.  In some of the code added for release 2.1 I unknowingly used some
    449 	    gcc extensions only supported by 3.x compilers.  I have received
    450 	    a couple of reports that the 2.1 release doesn't build on 2.x and so
    451 	    people are clearly still using gcc 2.x.  The code has been
    452 	    rewritten to remove these extensions.
    453 
    454 2.1	10 DEC 2004	Significantly improved directory handling plus numerous
    455 			other smaller improvements
    456 
    457 	1.  Fast indexed directories implemented.  These speed up directory
    458 	    operations (ls, file lookup etc.) significantly for directories
    459 	    larger than 8 KB.
    460 	2.  All directories are now sorted in alphabetical order.  This again
    461 	    speeds up directory operations, and in some cases it also results in
    462 	    a small compression improvement (greater data similarity between
    463 	    files with alphabetically similar names).
    464 	3.  Maximum directory size increased from 512 KB to 128 MB.
    465 	4.  Duplicate fragment checking and appending optimised in mksquashfs,
    466 	    depending on filesystem, this is now up to 25% faster.
    467 	5.  Mksquashfs help information reformatted and reorganised.
    468 	6.  The Squashfs version and release date is now printed at kernel
    469 	    boot-time or module insertion.  This addition will hopefully help
    470 	    to reduce the growing problem where the Squashfs version supported
    471 	    by a kernel is unknown and the kernel source is unavailable.
    472         7.  New PERFORMANCE.README file.
    473 	8.  New -2.0 mksquashfs option.
    474 	9.  CHANGES file reorganised.
    475 	10. README file reorganised, clarified and updated to include the 2.0
    476 	    mksquashfs options.
    477 	11. New patch for Linux 2.6.9.
    478 	12. New patch for Linux 2.4.28.
    479 
    480 2.0r2	29 AUG 2004	Workaround for kernel bug in kernels 2.6.8 and newer
    481 			added
    482 
    483 	1. New patch for kernel 2.6.8.1.  This includes a workaround for a
    484 	   kernel bug introduced in 2.6.7bk14, which is present in all later
    485 	   versions of the kernel.  
    486 
    487 	   If you're using a 2.6.8 kernel or later then you must use this
    488 	   2.6.8.1 patch.  If you've experienced hangs or oopses using Squashfs
    489 	   with a 2.6.8 or later kernel then you've hit this bug, and this
    490 	   patch will fix it.
    491 
    492 	   It is worth mentioning that this kernel bug potentially affects
    493 	   other filesystems.  If you receive odd results with other
    494 	   filesystems you may be experiencing this bug with that filesystem.
    495 	   I submitted a patch but this has not yet gone into the
    496 	   kernel, hopefully the bug will be fixed in later kernels. 
    497 
    498 2.0	13 JULY 2004	A couple of new options, and some bug fixes
    499 
    500 	1. New mksquashfs -all-root, -root-owned, -force-uid, and -force-gid
    501 	   options.  These allow the uids/gids of files in the generated
    502 	   filesystem to be specified, overriding the uids/gids in the
    503 	   source filesystem.
    504 	2. Initrds are now supported for kernels 2.6.x.
    505 	3. amd64 bug fixes.  If you use an amd64, please read the README-AMD64
    506 	   file.
    507 	4. Check-data and gid bug fixes.  With 2.0-alpha when mounting 1.x
    508 	   filesystems in certain cases file gids were corrupted.
    509 	5. New patch for Linux 2.6.7.
    510 
    511 2.0-ALPHA	21 MAY 2004	Filesystem changes and compression improvements
    512 
    513 	1. Squashfs 2.0 has added the concept of fragment blocks.
    514            Files smaller than the file block size and optionally the
    515 	   remainder of files that do not fit fully into a block (i.e. the
    516 	   last 32K in a 96K file) are packed into shared fragments and
    517 	   compressed together.  This achieves on average 5 - 20% better
    518 	   compression than Squashfs 1.x.
    519 	2. The maximum block size has been increased to 64K (in the ALPHA
    520 	   version of Squashfs 2.0).
    521 	3. The maximum number of UIDs has been increased to 256 (from 48 in
    522 	   1.x).
    523 	4. The maximum number of GIDs has been increased to 256 (from 15 in
    524 	   1.x).
    525 	5. Removal of sleep_on() function call in 2.6.x patch, to allow Squashfs
    526 	   to work on the Fedora rc2 kernel.
    527 	6. Numerous small bug fixes have been made.
    528 
    529 1.3r3	18 JAN 2004	Third release of 1.3, this adds a new mksquashfs option,
    530 			some bug fixes, and extra patches for new kernels
    531 
    532 	1. New mksquashfs -ef exclude option.  This option reads the exclude
    533 	   dirs/files from an exclude file, one exclude dir/file per line.  This
    534 	   avoids the command line size limit when using the -e exclude option,
    535 	2. When appending to existing filesystems, if mksquashfs experiences a
    536 	   fatal error (e.g. out of space when adding to the destination), the
    537 	   original filesystem is restored,
    538 	3. Mksquashfs now builds standalone, without the kernel needing to be
    539 	   patched.
    540 	4. Bug fix in the kernel squashfs filesystem, where the pages being
    541 	   filled were not kmapped.  This seems to only have caused problems
    542 	   on an Apple G5,
    543 	5. New patch for Linux 2.4.24,
    544 
    545 	6. New patch for Linux 2.6.1, this replaces the patch for 2.6.0-test7.
    546 
    547 1.3r2	14 OCT 2003	Second release of 1.3, bug fixes and extra patches for
    548 		        new kernels
    549 
    550 	1. Bug fix in routine that adds files to the filesystem being
    551 	   generated in mksquashfs.  This bug was introduced in 1.3
    552 	   (not enough testing...) when I rewrote it to handle files larger
    553 	   than available memory.  This bug caused a SEGV, so if you've ever
    554 	   got that, it is now fixed,
    555 	2. Long running bug where ls -s and du reported wrong block size
    556 	   fixed.  I'm pretty sure this used to work many kernel versions ago
    557 	   (2.4.7) but it broke somewhere along the line since then,
    558 	3. New patch for Linux 2.4.22,
    559 	4. New patch for 2.6.0-test7, this replaces the patch for 2.6.0-test1.
    560 
    561 1.3	29 JUL 2003	FIFO/Socket support added plus optimisations and
    562 		        improvements
    563 
    564 	1. FIFOs and Socket inodes are now supported,
    565 	2. Mksquashfs can now compress files larger than available
    566 	   memory,
    567 	3. File duplicate check routine optimised,
    568 	4. Exit codes fixed in Mksquashfs,
    569 	5. Patch for Linux 2.4.21,
    570 	6. Patch for Linux 2.6.0-test1.  Hopefully, this will work for
    571 	   the next few releases of 2.6.0-testx, otherwise, I'll be
    572 	   releasing a lot of updates to the 2.6.0 patch...
    573 
    574 1.2	13 MAR 2003	Append feature and new mksquashfs options added
    575 
    576 	Mksquashfs can now add to existing squashfs filesystems.  Three extra
    577 	options "-noappend", "-keep-as-directory", and "root-becomes"
    578 	have been added.
    579 
    580 	The append option with file duplicate detection, means squashfs can be
    581 	used as a simple versioning archiving filesystem. A squashfs
    582 	filesystem can be created with for example the linux-2.4.19 source.
    583 	Appending the linux-2.4.20 source will create a filesystem with the
    584 	two source trees, but only the changed files will take extra room,
    585 	the unchanged files will be detected as duplicates.
    586 
    587 	See the README file for usage changes.
    588 
    589 1.1b	16 JAN 2003	Bug fix release
    590 
    591 	Fixed readpage deadlock bug.  This was a rare deadlock bug that
    592 	happened when pushing pages into the page cache when using greater
    593 	than 4K blocks.  I never got this bug when I tested the filesystem,
    594 	but two people emailed me on the same day about the problem!
    595 	I fixed it by using a page cache function that wasn't there when
    596 	I originally did the work, which was nice :-)
    597 
    598 1.1	8 JAN 2003	Added features
    599 
    600 	1. Kernel squashfs can now mount different byte order filesystems.
    601 	2. Additional features added to mksquashfs.  Mksquashfs now supports
    602 	   exclude files and multiple source files/directories can be
    603 	   specified.  A nopad option has also been added, which
    604 	   informs mksquashfs not to pad filesystems to a multiple of 4K.
    605 	   See README for mksquashfs usage changes.
    606 	3. Greater than 2GB filesystems bug fix.  Filesystems greater than 2GB
    607 	   can now be created.
    608 
    609 1.0c 	14 NOV 2002	Bug fix release
    610 
    611 	Fixed bugs with initrds and device nodes
    612 
    613 1.0 	23 OCT 2002	Initial release
    614