1998-12-16  Peter Moulder  <reiter@netspace.net.au>

	* compress.c (ext2_register_compression_module): Unlock working
 	area before we exit, even if ENOMEM.  Set ext2_rd_wa_size
 	correctly if decompression needs > compression needs.  (Never
 	happens with current algorithms, but in the process I simplified
 	the code a little.)
	(ext2_decompress_inode): Moved assertion to before blocking calls,
 	and added a non-asserted test (of the same condition) after the
 	blocking calls.
	(ext2_cleanup_compressed_inode): Repeat some tests after some
	blocking calls (down, DQUOT_INIT).

	* ext2_fs_c.h: Remove last remnants of `ifndef EXT2_HOLEMAP'
	code.
	(ext2_offset_is_clu_boundary): Tiny efficiency tweek.

1998-11-30  Peter Moulder  <reiter@netspace.net.au>

	* compress.c (ext2_compress_cluster, ext2_decompress_cluster): 
	* ioctl.c (ext2_ioctl): 
	* file.c (ext2_readpage):
	Make request_module() call dependent on CONFIG_KMOD.

1998-11-22  Peter Moulder  <pjm@opensource.captech.com>

	* compress.c (ext2_mark_algorithm_use): Adjust s_rev_level when 
	adding compression to the superblock.

1998-11-01  Jan Rêkorajski  <baggins@hunter.mimuw.edu.pl>

	* Merged with patch 0.4.21
	* Updated defconfigs for all architectures
	* Cleared some forgotten code

1998-10-31  Jan Rêkorajski  <baggins@hunter.mimuw.edu.pl>

	* Made yesterday statement false :)
	I followed Peter's sugestion to make working area pointer
	a parameter to de/compression functions.  Now there is
	no problem selecting both CONFIG_EXT2_SEPARATE_WORK_AREAS and
	CONFIG_EXT2_VERIFY_COMPRESSION.

1998-10-30  Jan Rêkorajski  <baggins@hunter.mimuw.edu.pl>

	* Hello, my name is Dexter, and I'm boy genius ;)

	* Ha, nailed The Bug, and squashed it :)
	The problem with separate work areas was due to
	compression verification.  It's clear that
	CONFIG_EXT2_SEPARATE_WORK_AREAS and CONFIG_EXT2_VERIFY_COMPRESSION
	are mutually exclusive.  Now, only fix the *config stuff
	and I'm done with "known bug" hunting.

1998-10-28  Jan Rêkorajski  <baggins@hunter.mimuw.edu.pl>

	* OK, working area pointers separated. Didn't help :(
	Oopsed while testing.  Seems that "critical bug" was
	something more...

	* Fixed a bug in ext2_register_compression_module,
	I forgot to put locks around memory reallocation.

1998-10-26 (later that day ;)  Jan Rêkorajski  <baggins@hunter.mimuw.edu.pl>

	* more separate areas work...
	Now I know what is that pjm's "critical bug", it's fundametal
	design screw up.  (Structures do _NOT_ change their size magically,
	sizeof is a const, so using ext2_wa[0/1] was a BAD idea)
	Only 6 more (ext2_wa != NULL) lines to go...

1998-10-26  Jan Rêkorajski  <baggins@hunter.mimuw.edu.pl>

	* patch against 2.1.126

	* started fixing separate work areas problems (a.k.a. races ;)
	Every algorithm uses separate variables to store pointers to
	read/write work areas.  Now they can compress and decompress
	in the same time.

	Apparently, it will save us a lot of memory :)
	See this:

	ALG	C MEM	D MEM
	---------------------
	bzip2	~150K	~150K
	gzip	 200K	  64K
	lzo	~128K	   0K
	lzrw	 ~16K	 ~16K
	lzv	  32K	   0K
	---------------------
	MAX	 200K	 150K

	So, in worst case with separate work areas we save ~50K _kernel_,
	_unswappable_ memory :)

1998-11-01  Peter Moulder  <reiter@netspace.net.au>

	* Misc small changes.

1998-10-18  Jan Rêkorajski  <baggins@hunter.mimuw.edu.pl>

	* compress.c: fix "off by one" maxlen in ex2_compress_cluster

	* modularized bzip2, gzip, lzo, lzv, lzrw
		- added ext2_compress_(un)register_module
		  see new-method-howto.c or lzv/e2compr_lzv.c
	* updated gzip to zlib 1.1.3 (was 0.93!)
	* fixed lzo - yes it works now :)
	
1998-06-30  Peter Moulder  <reiter@netspace.net.au>

	* binfmt_elf.c (elf_core_dump): 
	* binfmt_aout.c (do_aout_core_dump):
	Fix deadlock.  OK, make that 0.4.15.

	* Release e2compr-0.4.14-patch-2.1.107.

	* truncate.c, binfmt_aout.c: resolve with 2.1.107.

	* truncate.c: Don't test feature flag; EXT2_COMPRESSED_BLKADDR
	is proof enough.

1998-06-15  Peter Moulder  <reiter@netspace.net.au>

	* compress.c: Reset i_next_alloc_block and i_next_alloc goal
	to zero after compressing a cluster.

1998-06-11  Peter Moulder  <reiter@netspace.net.au>

	* compress.c: Fix [stupid] race condition.  Added many diagnostic
	checks, too, which I haven't yet removed.

1998-06-10  Peter Moulder  <reiter@netspace.net.au>

	* ext2_fs_c.h: Add aliases for some #definitions.

1998-06-09  Peter Moulder  <reiter@netspace.net.au>

	* file.c (ext2_readpage): Allow for page sizes bigger than 8KB,
	for certain ARM processors.

	* ioctl.c (ext2_ioctl): Remove spurious ext2_warning about
 	"COMPRBLK w/o COMPR".

1998-06-06  Peter Moulder  <reiter@netspace.net.au>

	* inode.c (block_getblk): Moved COMPRESSED_BLKADDR macro to
	ext2_fs_c.h, and removed the inode parameter.  We no longer
	consult the superblock to check for e2compr support; if the block
	address is 0xffffffff then we say it's compressed.

1998-05-21  Peter Moulder  <reiter@netspace.net.au>

	* compress.c (ext2_count_blocks): Do more consistency checks on
	cluster head.
	(ext2_compress_cluster): Improve information display for changing
	b_blockno problem.  Check return code of ext2_get_key().

1998-05-12  Peter Moulder  <reiter@netspace.net.au>

	* compress.c (ext2_cleanup_compressed_inode,
 	ext2_decompress_inode): Use DQUOT_INIT() for 2.1.101+ kernels.

1998-03-07  Peter Moulder  <pjm@bofh.asn.au>

	* compress.c, lzo/, ext2_fs_c.h: Add lzo algorithm.  (Patch sent
	in by Chris Old <cold@irdeto.com>.)

1998-03-06  Peter Moulder  <pjm@bofh.asn.au>

	* compress.c, file.c (ext2_readpage), ext2_fs_c.h: Support
	CONFIG_EXT2_SEPARATE_WORK_AREAS.

	* Release 0.4.2.

1998-03-02  Peter Moulder  <pjm@bofh.asn.au>

	* ioctl.c (ext2_ioctl: EXT2_IOC_SETFLAGS): Properly clear
	EXT2_DIRTY_FL if we drop EXT2_COMPR_FL.

1998-02-12  Peter Moulder  <pjm@bofh.asn.au>

	* compress.c (ext2_decompress_inode,
	ext2_cleanup_compressed_inode): Initialise quotas.

1998-01-24  Peter Moulder  <pjm@bofh.asn.au>

	* compress.c (ext2_get_cluster_blocks): Number of blocks to fetch
 	shouldn't be calculated from i_size; just use clu_nblocks.
	(i_size is short when truncate() is called.)  I suspect that this
 	change should also apply to 0.3.6.

1998-01-09  Peter Moulder  <pjm@bofh.asn.au>

	CHANGES FOR 0.4.0.  (Various files.)

	* Get rid of ,compressed cluster` bitmaps.  Store
	EXT2_COMPRESSED_BLKADDR (new constant, currently 0xffffffff) in
	last blockno of cluster to mark as compressed.

	* First cluster is no longer in general the same size as other
 	clusters of a file.  See ext2_first_cluster_nblocks() and
 	surrounding macros in ext2_fs.h.

	* Blocknos stored contiguously at the beginning of the cluster
 	rather than having holes in places where uncompressed data has
 	holes.

	* Mark incompatibilities in s_feature_incompat and
	s_algorithm_usage_bitmap (new field).

	* Always use i_sem, never I_LOCK.  (This change is overdue, and
	should probably be back-ported.)

	* ioctl.c: Allow EXT2_ECOMPR_FL to be either raised from userspace (not
 	just cleared).

	* ioctl.c: Don't ,raise EXT2_DIRTY_FL just because of toggling of
	EXT2_NOCOMPR_FL`.

	* ext2_fs.h, ioctl.h: New ioctl EXT2_IOC_RECOGNIZE_COMPRESSED to
	replace EXT2_IOC_SETCLUSTERBIT.  EXT2_IOC_CLRCLUSTERBIT has been
	removed.

	* Have ext2_ioctl() decompress the file immediately if
	EXT2_COMPR_FL is cleared from a regular file.  Report the error if
	the request couldn't be carried out.

	* Use two-level compression method table.  ext2_algorithm_table
 	keeps the `name', `avail', `init', `compress', `decompress'
 	fields, while there is a new ext2_method_table with two fields: an
 	index into ext2_algorithm_table, and an argument to the
 	de/compressor.  See compress.c.

	* Writes are compressed as soon as the end of a cluster is
 	reached, instead of waiting until close().

	* EXT2_IOC_SETCOMPRMETHOD doesn't fail for unknown compression
	method.  However, it writes 1 or 0 to *arg depending on whether or
	not (respectively) the requested method is known to the kernel.

	* fs/Config.in: CONFIG_EXT2_COMPRESS question only asked if
	CONFIG_EXPERIMENTAL=y.

	* arch/*/defconfig: Default answer for CONFIG_EXT2_COMPRESS
	changed to `n'.

	* Do checksum on _compressed_ data not uncompressed.  The intent
 	is to prevent data corruption from skrogging kernel memory or
 	causing illegal memory references.  The `reserved_2' field has been
	removed from the cluster head and replaced with `checksum'.

	* Removed `bitmap' and `reserved0' from cluster head and replaced
	with `holemap' and `holemap_nbytes'.  holemap[] is a bitmap of
	where to put holes.  (It is declared as a zero-length array of
	unsigned char.)  Unlike the former `bitmap' field, we don't
	include holes at the end of the cluster, a `1' represents a hole
	instead of a `0' in `bitmap', and of course it is variable-length.
	This paves the way for longer clusters.  However, I haven't yet
	increased the length of clen or ulen, which would be necessary for
	clusters longer than 64KB, and desirable (no 0==64K hack) even for
	64KB clusters.

	* New methods `never' and `auto'.  `auto' is largely
	unimplemented (see compress.c).

	* Gratuitous name changes.  Many things using word `uncompress'
 	changed to `decompress'.  (`Decompressed' always means `having
 	been decompressed', whereas `uncompressed' can also (and usually
 	does) mean `not having been compressed'.)
  	ext2_put_compressed_cluster() split into
 	ext2_cleanup_compressed_cluster() and ext2_decompress_inode().
  	head->len becomes head->ulen.  CONFIG_EXT2_USE_* becomes
 	s/USE/HAVE/.  EXT2_COMPR_DEBUG* become EXT2_COMPR_REPORT*.  Maybe
 	some other things.

Tue Dec  9 19:53:12 1997  Peter Moulder  <pjm@bofh.asn.au>

	* ioctl.c (ext2_ioctl): Don't ,try to prevent 4KB clusters on
	machines with 8KB pages`.

Mon Dec  8 17:48:19 1997  Peter Moulder  <pjm@bofh.asn.au>

	* namei.c (ext2_create): implement CONFIG_GZ_HACK

	* compress.c (ext2_lock_wa): call signal_pending() instead of
	testing the bitmaps.  (Necessary for 2.1.68 POSIX.1b signal
	handling.)

	* file.c (ext2_readpage): Attempt to correct rare bug for
	machines with 8KB (or larger) pages.

Mon Dec  8 16:31:38 1997  Peter Moulder  <pjm@bofh.asn.au>

	* inode.c, ext2_fs.h: Add support for a couple of e2compr-
	reserved inodes.  (This change will probably be reversed,
	but it's harmless for now.)

Fri Aug  1 15:10:48 1997  Peter Moulder  <pjm@bofh.asn.au>

	* compress.c (ext2_unlock_wa): Call schedule() if other processes
	are waiting for the working area.

Sat Jul 26 08:28:08 1997  Peter Moulder  <pjm@bofh.asn.au>

	* Makefile: e2compr files were getting compiled even if
 	CONFIG_EXT2_COMPRESS wasn't defined.  Makefile now tests for this
 	being defined.

	* acl.c: Not even root gets write access to a file with a
 	compression error.

	* compress.c (ext2_get_cluster_bit): Reverse change of Apr 21,
	i.e. return any positive number instead of converting to 1.
	(Apr 21 change was needlessly cautious.)

	* inode.c:
	* compress.c:
	* file.c: 
	Access to the cluster head does endian conversion.
	Access to inode has endian conversion in 2.1 but not in 2.0 --
	just like the standard kernel.
	* ext2_byteorder.h: new file.  (Only needed in 2.0.)
	
	* file.c (ext2_readpage): Rewrite.  Handles errors better.  Also
 	takes better care of working area lock.

	* compress.c:
	* file.c:
	* inode.c:
	* truncate.c:
	Change printk level to KERN_DEBUG for things surrounded by
	EXT2_COMPR_REPORT*.

	* inode.c: Allow bmap() if EXT2_NOCOMPR_FL set.

	* inode.c: Don't take high bit of i_flags into compr_meth.  (The
	high bit is reserved for ext2 lib.)  Also, don't write it
	from compr_meth (though the result should be the same: the
	bit is set to zero).

	* ioctl.c (ext2_ioctl): Call verify_area in a few places
	where previously we didn't.

	* super.c (ext2_setup_super): The debug string on mount didn't seem
	to be printing, so I changed `%p' to `%lx' (plus an appropriate cast)
	to see if it would change things.

	* compress.c (ext2_uncompress_cluster, ext2_uncompress_blocks): In
 	the consistency checks, consider the head size as well as
 	compr_len in calculation.

	* gzip/deflate.c (deflate_fast, deflate_slow):
	* lzv/lzv1.c:
	Yield CPU every fifth of a second (ifdef __KERNEL__).

	* include/linux/ext2_fs.h: Change definition of EXT2_ECOMPR_FL
 	from 0x0080 to 0x0800 to avoid clash with EXT2_NOATIME_FL in 2.1.
  	* Change name EXT2_MAX_CLUSTER_SIZE to EXT2_MAX_CLUSTER_BLOCKS.

Tue Apr 29 12:00:00 1997  Peter Moulder  <pjm@bofh.asn.au>

	* ioctl.c (ext2_ioctl): Call invalidate_inode_pages() if
	EXT2_NOCOMPR_FL is toggled.

Mon Apr 21 15:50:16 1997  Peter Moulder  <pjm@bofh.asn.au>

	* ext2_fs.h (ext2_cluster_is_compressed): If
	ext2_get_cluster_bit() returns error then pass the error back.
	* compress.c (ext2_get_cluster_bit): Return 1 rather than any +ve num.
	ext2_cluster_is_compressed() is the only caller.

	* compress.c (ext2_free_key,ext2_get_key,ext2_next_key): Make static.

Thu Jan 16 12:00:00 1997  Peter Moulder  <pjm@bofh.asn.au>

	* file.c (ext2_mmap): Previously we would deny mmap access if
	there were an error or if compression were disabled (NOCOMPR).  
	These checks have both been removed.
	It was wrong to disallow mmap access to a file with NOCOMPR,
	but it's more questionable whether or not we should allow
	compression to a file with ECOMPR.

This file is not very accurate, particularly the older changes.
