2005-03-11  Sunil Satnur  <satnur@fsl.cs.sunysb.edu>

	* file.c (wrapfs_write): handles zero byte write correctly.

2005-02-02  Sunil Satnur  <satnur@fsl.cs.sunysb.edu>

	* file.c: (wrapfs_lock, wrapfs_getlk, wrapfs_setlk)
	Fixed all locking bugs. wrapfs_lock now calls wrapfs_getlk
	or wrapfs_setlk depending in the fcntl command.

2005-02-04  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* print.c: Use printf attribute for fist_dprint_internal and
	correct corresponding formats throughout templates.

2005-02-02  Sunil Satnur  <satnur@fsl.cs.sunysb.edu>

	* file.c (wrapfs_write): Dont call lower write if count
	is zero

2005-02-02  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* file.c (wrapfs_mmap): Not all file systems support mmap.

2005-01-28  Sunil Satnur  <satnur@fsl.cs.sunysb.edu>

	* file.c (wrapfs_write): Dont change file position in
	append mode if bytecount is zero.

2005-01-28  Sunil Satnur  <satnur@fsl.cs.sunysb.edu>

	* wrapfs.h (fist_copy_attr_ctime): Fixed return
	type.

2005-01-04  Sunil Satnur  <satnur@fsl.cs.sunysb.edu>

	* wrapfs.h (fist_copy_attr_ctime): Added new routine
	fist_copy_attr_ctime().

2005-01-04  Sunil Satnur  <satnur@fsl.cs.sunysb.edu>

	* inode.c (wrapfs_unlink): Update the ctime of the file after
	removing it's hard link. Added a call to fist_copy_attr_ctime().

2005-01-04  Sunil Satnur  <satnur@fsl.cs.sunysb.edu>

	* inode.c (wrapfs_link): Update the parent directory's times with
	the hidden directory's times, not the hidden file's.
	(hidden_new_dentry changed to hidden_dir_dentry).

2005-01-04  Sunil Satnur  <satnur@fsl.cs.sunysb.edu>

	* file.c (wrapfs_readdir): Call fist_copy_attr_atime() when
	(err >= 0), not (err > 0).

2004-12-28  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* inode.c (permission): Remove vfs_permission check on our own
	inode, because the lower-level inode is already checked.

2004-10-29  Charles P. Wright <cwright@fsl.cs.sunysb.edu>

	* inode.c (wrapfs_truncate): Add missing dget before dentry_open.

2004-10-01  Erez Zadok  <ezk@cs.sunysb.edu>

	* main.c: remove double setting of license string.  Get license
	string from new .fist "license" decalration.

2004-09-01  Mohammad Nayyer Zubair  <zubair@filer.fsl.cs.sunysb.edu>

	* file.c (wrapfs_fsync): when exporting upper file system
	through NFS with sync option, nfsd_sync_dir() sets struct file to
	NULL. Use inode's i_fop->fsync instead of file's. (bug #97)

2004-08-30  Mohammad Nayyer Zubair  <zubair@filer.fsl.cs.sunysb.edu>

	* file.c (wrapfs_filldir): applied patch to fix the infinite loop
	bug (bug 99).

2004-08-02  Akshat Aranya  <aaranya@t6.fsl.cs.sunysb.edu>

	* mmap.c: Fixed for appends in file sizes >4G (BZ #82)

2004-07-30  Erez Zadok  <ezk@cs.sunysb.edu>

	* released version 0.1.1.

2004-07-30  Charles P. Wright <cwright@fsl.cs.sunysb.edu>

	* doit.sh: Don't exit before setkey.

2004-07-29  Erez Zadok  <ezk@cs.sunysb.edu>

	* released version 0.1.

2004-07-29  Mohammad Nayyer Zubair  <zubair@vm.fsl.cs.sunysb.edu>

	* fist.h: moved #ifdef FIST_MALLOC_DEBUG outside of #ifdef FIST_DEBUG.
	Got compile error when debug off is set in .fist files.

2004-07-22  Charles P. Wright <cwright@fsl.cs.sunysb.edu>

	* file.c (wrapfs_open): O_WRONLY should change the mode to O_RDWR.

2004-06-25  Charles P. Wright <cwright@fsl.cs.sunysb.edu>

	* attach.c, main.c: LFS setting code from NCryptfs.

	* super.c, wrapfs.h: Detach on unmount.

	* fist_ioctl.c: Fix usage message.

2004-06-11 Abhishek Rai <abba@cs.sunysb.edu>

	* mmap.c (wrapfs_commit_write): kmaps added so that HIGHMEM systems
	always behave correctly. Only the non-sca code modified.

2004-04-27  Erez Zadok  <ezk@cs.sunysb.edu>

	* nfs-doit.sh: rename from doit-nfs.sh (easier TAB completion).

	* inode.c (wrapfs_truncate): instead of hand-crafting a partial
	fake_file which is very hacky and oopses at various places,
	including our own prepare/commit_write, use dentry_open() to open
	a real hidden_file, and stuff it inside fake_file.  Now fsx-linux
	passes again.

2004-04-12  Charles P. Wright  <cwright@polarbear.fsl.cs.sunysb.edu>

	* doit.sh, undoit.sh: Include doitopts and Eugene's set_default
	fxn in the base doit and undoit.

2004-04-03  Erez Zadok  <ezk@cs.sunysb.edu>

	* file.c (wrapfs_release): Ext2 does something strange.  If you
	compile Ext2 with EXT2_PREALLOCATE, then it will prealocate N more
	blocks of data to the file in anticipation of the file growing in
	the near future.  If, however, the file doesn't grow, then ext2
	will deallocate these pre-allocated blocks on ext2_release.
	However, our stacking template copies the number of blocks in a
	file in prepare_write and commit_write, at which point the lower
	file reports more blocks than it would have later on once the file
	is closed.  This was confirmed by using a C program that runs
	fsync() on an ext2 file that's open in the middle of the session.
	The solution here is to copy the number of blocks of the lower
	file to the upper file.  (It's possible to copy all attributes,
	but might be overkill -- I'd rather copy only what we need.)
	WARNING: this code is definitely wrong for SCA!

2004-04-02  Charles P. Wright  <cwright@localhost.localdomain>

	* file.c (wrapfs_release): Copy attributes on release so that Ext2
	behaves correctly.

	* inode.c (wrapfs_inode_revalidate): Comment regarding Revalidate.

2004-03-27  Charles P. Wright  <cwright@polarbear.fsl.cs.sunysb.edu>

	* main.c (wrapfs_read_super): Change cachefs to wrapfs.

2004-03-18  Erez Zadok  <ezk@cs.sunysb.edu>

	* inode.c (xattr_alloc, xattr_free, wrapfs_listxattr,
	wrapfs_removexattr, wrapfs_setxattr, wrapfs_getxattr): when in
	Rome, indent like the romans do.

	* inode.c (wrapfs_lookup, wrapfs_symlink): do not use an unsigned
	int for encoded_namelen, or else we can never return -errno
	numbers.  Bug reported by Sean Callanan <scallana@ic.sunysb.edu>.
	(wrapfs_lookup): un/signed bug exposed another: hidden_dentry
	could be used uninitialized.

	* file.c (wrapfs_open): don't allocate a pointer to
	wrapfs_file_info, but the whole structure.  Bug reported by
	"Alexey Smirnov" <alexey@cs.sunysb.edu>.

2004-03-16  Erez Zadok  <ezk@cs.sunysb.edu>

	* mmap.c (wrapfs_commit_write): only up() the semaphore if it was
	down'ed before.  Bug reported by Haik Lorenz
	<hlorenz@cs.sunysb.edu>.

2004-03-15  Erez Zadok  <ezk@cs.sunysb.edu>

	* vm_area.c (wrapfs_mmap, wrapfs_vm_open, wrapfs_vm_close)
	(wrapfs_vm_shared_unmap): after ftohf(), ASSERT that hidden file
	isn't NULL.  Bug reported by Haik Lorenz <hlorenz@cs.sunysb.edu>.

	* mmap.c (wrapfs_do_readpage, wrapfs_commit_write,
	wrapfs_commit_write): after ftohf(), ASSERT that hidden file isn't
	NULL.  Bug reported by Haik Lorenz <hlorenz@cs.sunysb.edu>.

	* file.c (wrapfs_lock): if ever got to actually call
	posix_test_lock(), the check for success/failure and return some
	reasonable error.  Bug reported by Haik Lorenz
	<hlorenz@cs.sunysb.edu>.

	* file.c (wrapfs_llseek, wrapfs_read, wrapfs_write,
	wrapfs_readdir, wrapfs_poll, wrapfs_flush, wrapfs_fsync,
	wrapfs_fasync, wrapfs_lock): after ftohf(), ASSERT that hidden
	file isn't NULL.  Bug reported by Haik Lorenz
	<hlorenz@cs.sunysb.edu>.

2004-03-13  Erez Zadok  <ezk@cs.sunysb.edu>

	* attach.c: don't generate attach code unless needed.

	* main.c (wrapfs_read_super): don't just set "stohs(sb) = NULL"
	but memset the entire wrapfs_sb_info private structure.  Otherwise
	we oops in the "out_free" label near the end of this function,
	when we try to mntput(stopd(sb)->hidden_mnt) and hidden_mnt has a
	non-NULL bogus value.  This bug is triggered when lookup for
	hidden_root fails.  Bug found by Tim Wong <Tim@wesmel.com>.

2003-11-22  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* super.c (wrapfs_show_options): Show dir= and debug= in /proc/mounts

	* fist.h: Include seq_file.h for /proc/mounts

	* attach.c (add_attached): kmalloc moved outside of spinlock

2003-11-10  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* file.c (wrapfs_readdir): Applied bug fix for NFS exporting wrapfs.
	Included code to properly handle name exclusions.

2003-09-22  Erez Zadok  <ezk@cs.sunysb.edu>

	* support FIST_MALLOC_DEBUG code for tracking down memory leaks.
	See explanation in script match-malloc.pl.

2003-09-12  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* file.c (wrapfs_lock): fix typo, check if err is less than 0.

2003-09-11  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* file.c (wrapfs_lock): struct flock's fl_file field should be set
	to hidden_file before calling ->lock() below, and then fixed back
	on the way up.  This caused in an oops deep inside NFS's NLM code,
	discovered when stacking on NFS, chrooting, and using flock().

2003-09-06  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* inode.c (wrapfs_setxattr): Use void * instead of const void * for
	value.  The const void * is only present in the EA+ACL patches, not
	the mainline kernel.

2003-09-05  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* main.c (wrapfs_read_super): mntput hidden_mount when the underlying
	directory does not exist.

2003-08-02  Erez Zadok  <ezk@cs.sunysb.edu>

	* released version 0.0.7.

2003-07-29  Erez Zadok  <ezk@cs.sunysb.edu>

	* main.c (MODULE_LICENSE): define Bison license for compiled module.

	* *.[hc]: follow gnu coding styles: indentation, macro nesting, if
	vs. ifdef use, comments on every #else/#endif, extraneous spaces,
	etc.

2003-07-28  Kiran-Kumar Muniswamy-Reddy  <kiran@t1.fsl.cs.sunysb.edu>

	* mmap.c (wrapfs_commit_write): added comment about the deadlock.

2003-07-28  Kiran-Kumar Muniswamy-Reddy  <kiran@icon.fsl.cs.sunysb.edu>

	* inode.c : ifdef out extended attributes code for sca.

2003-07-24  Kiran-Kumar Muniswamy-Reddy  <kiran@icon.fsl.cs.sunysb.edu>

	* inode.c (setxattr): compile fix for 2.4.20.

2003-07-24  Kiran-Kumar Muniswamy-Reddy  <kiran@t2.fsl.cs.sunysb.edu>

	* mmap.c (wrapfs_get1page_cached): added this function. Similar to
	get1page but it doesn't guarantee that the page is unlocked.
	(wrapfs_commit_write): call get1page_cached instead of get1page
	when we append / extend the file. This is to eliminate the
	deadlock.

2003-07-23  Kiran-Kumar Muniswamy-Reddy  <kiran@t1.fsl.cs.sunysb.edu>

	* inode.c (wrapfs_setattr): call vmtruncate on the inode before
	calling wrapfs_truncate_and_enlarge.
	(wrapfs_truncate_and_enlarge): changed the interface to take the
	dentry and new file size as argument. Use this in the function
	instead of inode->i_size.  removed the call to
	truncate_inode_pages as vmtruncate will call it if required.

	* mmap.c (wrapfs_shift_inward, wrapfs_shift_outward): don't printk
	a message when the number of bytes to be shifted is 0.

	* inode.c (wrapfs_truncate_and_enlarge): initialize opaque to
	0. This was causing fsx-linux to oops.

2003-07-10  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* inode.c: Added support for stacking on extended attribute methods
	(getxattr, setxattr, removexattr, listxattr).  Data filtering is
	used for attribute values.  Name filtering is used for the attribute
	name, but prefixes are kept intact.

2003-07-09  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* attach.c (do_attach): Fixed reference count bug for lower f/s
	when using attach mode.

2003-07-03  Kiran-Kumar Muniswamy-Reddy  <kiran@t4.fsl.cs.sunysb.edu>

	* aux.c (wrapfs_idx_lookup): removed dget on parent dentry before
	calling lookup_one_len for the idx_dentry. The dget would leave
	some inodes busy on the lower level file system.

	* inode.c (wrapfs_truncate_and_enlarge): call truncate_inode_pages
	while truncating down the inode and zero out the pages beyond the
	the new inode length.

2003-06-17  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* mmap.c (wrapfs_fill_zeros): Added entry/exit prints.
	(wrapfs_commit_write): Changed from - size > 0 to from > size.
	fsx-linux now passes on IA64.

	* inode.c (wrapfs_truncate): Added entry/exit prints.

2003-06-16  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* attach.c: Cast strlen to an int before using as printf size.

	* file.c, print.c: Fixed prints with %x instead of %p.

2003-05-28  Puja Gupta  <pugupta@cs.sunysb.edu>

	* super.c (wrapfs_delete_inode): added function call for writing index
	file on inode delete.
	(wrapfs_sops): wrapfs_delete_inode is now generated for SCA
	file systems.

	* aux.c (wrapfs_idx_write): one more check added for number of bytes
	written to index file.

2003-04-30  Puja Gupta  <pugupta@cs.sunysb.edu>

	* mmap.c (wrapfs_writepage): removed kunmap, ClearPageUptodate,
	and SetPageUptodate for SCA code, its already done in
	wrapfs_commit_write.

2003-04-23  Puja Gupta  <pugupta@cs.sunysb.edu>

	* wrapfs.h: Added field for hidden_dentry in wrapfs_inode_info for
	writepage method for SCA code.

	* mmap.c (wrapfs_writepage): writepage method for SCA code written.
	(wrapfs_aops): Removed ifndef FIST_FILTER_SCA for writepage.

	* main.c (wrapfs_interpose): Store hidden_dentry into inode's private
	data.  dget hidden_dentry.

        * super.c (wrapfs_clear_inode): dput hidden_dentry stored in inode's
	private data.

	* file.c (wrapfs_llseek): Removed check for offset greater than file
	size.

2003-04-13  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* attach.c (del_attached_ent): Fixed attach locking problem
	  (courtesy of Sheshadri/Swaroop).

2003-03-24  Erez Zadok  <ezk@cs.sunysb.edu>

	* file.c (wrapfs_ioctl): check if hidden_file is NULL before using
	it.  But report from Vinay Pai <vinay@cs.sunysb.edu>.

2003-03-04  Kiran-Kumar Muniswamy-Reddy  <kiran@t4.fsl.cs.sunysb.edu>

	* inode.c (wrapfs_lookup, wrapfs_symlink): validate the
	filename length returned by encode_filename.

2003-02-26  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* attach.c, aux.c, file.c, mmap.c, sca_aux.c, sca_list_idx.c,
	 sca_read.c, sca_write.c, vm_area.c: s/if(/if (/ (for,while as well)

2003-02-22  Puja Gupta  <pugupta@cs.sunysb.edu>

	* vm_area.c, mmap.c, file.c:  Check if ftopd(file) is NULL before
	accessing ftohf(file)

2003-02-09  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* mmap.c, super.c, subr.c: testing for kmalloc return values.

	* main.c (wrapfs_read_super): Return value of kmalloc was not checked.

2003-01-20  Erez Zadok  <ezk@cs.sunysb.edu>

	* super.c (wrapfs_read_inode): comment out the FS_REQUIRES_DEV dev
	code because it could cause an oops.  Add a new comment that
	explains how to export a nodev file system: use nfs-utils 1.0 or
	later, and 2.4.20 or newer with the "fsid=" export parameter.

	* file.c (wrapfs_write): check if ->write() op exists, not if
	->read() exists.  Bug report from Jerome de Vivie
	<jerome.devivie@free.fr>.

2002-12-27  Erez Zadok  <ezk@cs.sunysb.edu>

	* super.c (wrapfs_read_inode): To export a file system via NFS, it
	has to have the FS_REQUIRES_DEV flag, so turn it on.  But should
	we inherit the flag from the lower file system, or can we allow
	our file system to be exported even if the lower one cannot be
	natively exported.

2002-11-02  Charles P. Wright  <cwright@ic.sunysb.edu>

	* wrapfs.h,file.c: Added per file private data structure
	(can be accessed through ftopd(file)) and modified appropriate
	macros.
2002-10-07  Charles P. Wright  <cwright@ic.sunysb.edu>

	* super.c (wrapfs_umount_begin): Do not pass umount_begin down
	to lower file-system when using attach mode.

2002-09-21  Charles P. Wright  <cwright@ic.sunysb.edu>

	* main.c (wrapfs_interpose): Run init_special_inode with modes
	from lower inode rather than uninitialized upper inode.

2002-04-07  Kiran-Kumar Muniswamy-Reddy  <kiran@a-rh72.fsl.cs.sunysb.edu>

	* mmap.c (wrapfs_commit_write): SCA code - fixed mtime and
	ctime of lower layer not being updated

2002-04-03  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* main.c (wrapfs_interpose): bug fix.  Run create_special_inode()
	on our inode only if the hidden_inode is special.

2002-04-02  Kiran-Kumar Muniswamy-Reddy  <kiran@t2.fsl.cs.sunysb.edu>

	* file.c (wrapfs_read): fix for atime not being updated
	for reads of size zero
	(wrapfs_write): fix for ctime and mtime of upper layer not
	being updated

2002-04-01  Kiran-Kumar Muniswamy-Reddy  <kiran@t2.fsl.cs.sunysb.edu>

	* mmap.c (wrapfs_commit_write): fix for lower layer's
	mtime and ctime not being synced with upper layer's
	mtime and ctime
	(wrapfs_writepage): fix for lower layer's mtime and
	ctime not being synced with upper layer's mtime and
	ctime

	* file.c (wrapfs_read_update_atime): added function for updating
	atime of lower level filesystem

2002-03-30  Erez Zadok  <ezk@cricket.fsl.cs.sunysb.edu>

	* file.c (wrapfs_llseek): fix fist_print_* call prototypes in SCA
	code.

	* main.c (wrapfs_parse_options): advance options pointer to the
	next comma-delimited option.

2002-03-29  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* main.c (wrapfs_interpose): for fist-lite, fix our inode's a_ops
	to that of the hidden inode.  Another hack.

	* super.c (wrapfs_read_inode): for fist-lite, intialize inode's
	a_ops to wrapfs_empty_aops (essentially all NULL ops).

	* file.c (wrapfs_main_fops): for fist-lite, define our own read,
	write, and mmap methods.
	(wrapfs_read): method for fist-lite.
	(wrapfs_write): method for fist-lite.
	(wrapfs_read): method for fist-lite.
	(wrapfs_mmap): method for fist-lite.  A hack to circumvent VFS
	deficiencies.  Force vma's vm_file to be hidden_file, then fix
	refcounts on file and hidden-file.

	* main.c (wrapfs_interpose): initialize special inodes (devices,
	fifos, sockets) properly.  Patch from David Chow
	<davidchow@shaolinmicro.com>.

2002-03-29  Charles P. Wright <cwright@ic.sunysb.edu>

	* attach.c: count number of attachments in vfsmount structure,
	add return type to delete_entry, permissions checking on
	detach, detach will d_drop and dput the from point.

2002-03-25  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* main.c (wrapfs_iunique): include this code only if
	FIST_DYNAMIC_INODE_NUMBERS is on.  Minor code re-indenting to
	match style.

	* wrapfs.h: use extern on wrapfs_iunique() and make sure it's
	defined only if FIST_DYNAMIC_INODE_NUMBERS is on.

2002-03-25  Charles P. Wright  <cwright@ic.sunysb.edu>

	* wrapfs.h: changed attached_ent structure to have dentry
	instead of name and length, changed to use <linux/list.h>
	list rather than own singly linked implementation.

	* wrapfs.h: Added fields to private data structure for attach
	list and lock.  It may be appropriate to change this to a
	special structure just for the root of an attach mode fs.

	* attach.c: use new attached_ent structure, in readdir
	will use dynamic inodes instead of numbers 17 and onwards.
	Fixed oops having to do with putnami'ng invalid name,
	on error in fist_attach_ioctl.  Added minimal detach support.

	* super.c: will not mntput (stopd(sb)->hidden_mnt) on
	unmount of MNTSTYLE_ATTACH filesystem (hidden_mnt) does not
	exist for these mounts)

	* main.c: wrapper function to iunique that complains if the
	numbers begin to wrap around on us.

2002-03-24  Kiran-Kumar Muniswamy-Reddy  <kiran@t3.fsl.cs.sunysb.edu>

	* mmap.c (wrapfs_fill_zeros): function for handling sparse files.

	(wrapfs_commit_write): This function was already handling sparse
	files, but was not zeroing out appropriate regions of new
	allocated disk blocks.  Added code that zeroes out the appropriate
	portions of new allocated disk blocks.  The code for this was
	enclosed in a #ifndef FIST_ENCODING_TYPE_NONE, removed the #ifndef
	since the code will be needed for all filesystems.
	(wrapfs_get1page): was enclosed in #ifndef FIST_ENCODING_NONE,
	removed the #ifndef since it is called from wrapfs_truncate, which
	is invoked for truncates that extend the file for non-SCA
	filesystems

	* inode.c (wrapfs_truncate): function to handle truncations that
	extend the size of the file -- for non-SCA filesystems
	(wrapfs_setattr): added a call to wrapfs_truncate for truncate on
	non-SCA filesystems.

	* wrapfs.h: added the declaration for wrapfs_fill_zeros, required
	by wrapfs_truncate.

2002-03-24  Erez Zadok  <ezk@cricket.fsl.cs.sunysb.edu>

	* wrapfs.h: change {en,de}code_block extern to include pagenum.

	* subr.c (wrapfs_{de,en}code_block): ditto

	* mmap.c (wrapfs_do_readpage, wrapfs_commit_write,
	wrapfs_writepage): pass page number to encode/decode_block.

	* main.c (wrapfs_interpose): call iunique() if
	dynamic_inode_numbers is on.
	(wrapfs_read_super): avoid __FUNCTION__ in calls to fist_print_*.

2002-03-23  Charles P Wright <cwright@ic.sunysb.edu>

	* attach.c: do_attach will not Oops if the attach point does
	not exist.  do_attach checks if object to be attached is a
	directory with read and execute permissions.  do_attach
	checks mount permissions.

2002-03-19  Ion Badulescu  <ionut@moisil.badula.org>

	* main.c (wrapfs_parse_options): use simple_strtoul() instead of
	simple_strtol()

2002-03-18  Ion Badulescu  <ionut@moisil.badula.org>

	* print.c (fist_set_debug_value): print the new debug level when
	changing it; move fist_debug_var outside of FIST_DEBUG

	* main.c: moved MODULE_PARM(fist_debug_var) from print.c

	* ALL: use __FUNCTION__ as if it were a function, not a string
	macro, to appease gcc3.

2002-03-16  Charles P Wright <cwright@ic.sunysb.edu>

	* Move all initialization of declared automatic variables in all
	functions to after the call to print_entry_location().  This helps
	debug bugs and problems that result in NULL/bad pointer
	dereferencing.

2002-03-09  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* wrapfs.h: add a new field to the wrapfs superblock private
	information.  This is a pointer to the head of the list of
	attached nodes.
	Define externs for attach-related functions.

	* wrapfs.h: define attached_entry data structure, used for a
	linked list of nodes attached to the mount point.

	* print.c (fist_print_dentry): print d_op address, to see if we
	have dentry ops at all.

	* main.c (wrapfs_interpose): attach code should not check hidden
	super_block. on the top-level attach node because it doesn't have
	a hidden super_block.
	(__wrapfs_hidden_dentry): check for attach's allowed dops and iops

	* fist_ioctl.c: support calls to new attach ioctls.  Some
	restructuring of the code.

	* fist.h (FIST_IOCTL_[AD]ETACH): define two new ioctls.  One to
	attach and one to detach.

	* README.attach: text file explaining motivation and use of attach
	mode.

	* attach.c: new file includes the vast majority of attach-mode
	code.

	* Beginning of attach-mode code.  Just barely working.

2002-02-21  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* super.c (wrapfs_statfs): don't compile this ->statfs() function
	when attach mode is used.  We have a different version in
	attach.c.

	* main.c (wrapfs_interpose): comments how we might handle dynamic
	inode number generation in wrapfs().
	(__wrapfs_hidden_dentry): use ASSERT2().
	(wrapfs_parse_options): document parse_options function.
	(wrapfs_read_super): this version of ->read_super() is not used
	when attach-mode is on.

	* wrapfs.h (fist_copy_attr_all): copy i_blkbits as well.

	* fist.h (ASSERT2): version of ASSERT that prints the info about
	the caller of the function which triggered the assertion.  Useful
	to track which function caused wrapfs_hidden_*() to fail.

2002-02-17  Erez Zadok  <ezk@whitestar.dyn.optonline.net>

	* wrapfs.h (WRAPFS_SUPER_MAGIC): define superblock magic for fist
	file systems.

	* print.c (fist_print_inode): print i_mode as well.

2002-02-03  Ion Badulescu  <ionut@moisil.badula.org>

	* main.c (wrapfs_parse_options): added mount option "debug=%d" for
	setting the debug level at mount time
	added MODULE_DESCRIPTION()

	* print.c: changed default debug level to 0; added
	MODULE_PARM(fist_debug_var)

	* file.c (wrapfs_poll): return DEFAULT_POLLMASK if the underlying
	fs doesn't have a poll() method [patch from Marc Boucher

	* fist.h: define DEFAULT_POLLMASK if not already defined

2002-02-02  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* file.c (wrapfs_ioctl): don't fail ioctls by default, unless we
	know for sure that they are unknown.  Otherwise, cryptfs code
	returns a failure even after setting the cipher key correctly.
	Plus, the default behavior for wrapfs_ioctl() for all other OSs
	(freebsd and solaris) is to succeed by default unless the ioctl is
	unknown.

2001-12-26  Ion Badulescu  <ion@guppy.limebrokerage.com>

	* mmap.c (wrapfs_writepage): disable writepage() for SCA, because
	It Can Not Possibly Work(TM).

2001-12-04  Ion Badulescu  <ion@guppy.limebrokerage.com>

	* fist.h: defined SEEK_{SET,CUR,END} if not defined, this is
	needed for David's code below to even compile (which makes me
	wonder if he's ever tested it)

2001-11-05  David Chow <davidchow@rcn.com.hk>

	* file.c (wrapfs_llseek): Added boundary checks for SCA.  Fix
	position problem for SCA llseek.  Since SCA doesn't not align with
	the hidden file.  Only equate the hidden fpos to virtual fpos for
	non-SCA fs.  Also fix.
	This patch was applied by Erez, but untested.

2001-10-26  Ion Badulescu  <ion@guppy.limebrokerage.com>

	* main.c: include <linux/module.h> last

	* fist.h: include <linux/init.h> here

	* main.c, fist.h: moved the MODULE_LICENSE definition to main.c

2001-10-19  Ion Badulescu  <ion@guppy.limebrokerage.com>

	* mmap.c: added conditional schedule() calls in all while loops,
	to improve latency when doing lots of data movement; allow block
	ciphers, but restrict encoding_blocksize to 1 for now

2001-10-18  Ion Badulescu  <ion@guppy.limebrokerage.com>

	* mmap.c: use __FUNCTION__ in several fist_dprint()'s
	(wrapfs_commit_write): handle all possible cases of
	write-in-the-middle with stream cyphers; disallow block cyphers
	for now; optimize wrapfs_encode_block usage; properly mark our
	inode as dirty

	* main.c: added MODULE_LICENSE("LGPL")

	* fist.h (MODULE_LICENSE): provide stub if not defined elsewhere

2001-10-18  Ion Badulescu  <ionut@buggy.badula.org>

	* mmap.c (wrapfs_get1page): moved here from aux.c, compiled in if
	encoding type is not 'none'
	(wrapfs_do_readpage): clear out the end of an incomplete page
	[fixes one corruption case]
	(wrapfs_commit_write): don't allow holes in an encoded file,
	instead encode them and write them out; deal properly with
	different encoding techniques [fixes another corruption case]

	* all: use PAGE_CACHE_SIZE instead of PAGE_SIZE

	* doit-nfs.sh: use overlay mounts

2001-10-15  Ion Badulescu  <ion@guppy.limebrokerage.com>

	* inode.c (wrapfs_{link,mkdir,mknod}): same fix as for
	wrapfs_symlink below
	(wrapfs_{create,link}): add comment about potential a negative
	dentry being returned by a successful 'create'-type operation, in
	the SCA code

2001-10-12  Ion Badulescu  <ion@guppy.limebrokerage.com>

	* fist.h: fixed problem with MODVERSIONS kernels

2001-10-12  Ion Badulescu  <ion@guppy.limebrokerage.com>

	* main.c (wrapfs_read_super): allow LFS if SCA is not used. Have
	fun with 2GB+ files on cryptfs! :-)

	* wrapfs.h: prototype for wrapfs_dir_iops

	* print.c (fist_PageDecrAfter): deal with yet another
	inconsistency in the Linux VM (fixes problem with 2.4-ac)

	* main.c (wrapfs_interpose): use wrapfs_dir_fops for directories
	(wrapfs_parse_options): don't crash if the underlying directory
	doesn't exist

	* inode.c (wrapfs_symlink): don't interpose if the hidden_dentry
	is negative, d_drop our dentry instead (fixes problem when
	stacking over NFSv2)
	(wrapfs_dir_iops): new set of inode ops for directories only;
	(wrapfs_symlink_iops, wrapfs_main_iops): drastically reduced set
	of inode ops (fixes "can cd into file" problem)

	* fist.h: linux/malloc.h is deprecated, use linux/slab.h instead

	* file.c (wrapfs_ioctl): return ENOTTY for non-existant ioctl's
	(fixes problem with 'tar -z')

2001-10-08  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* Makefile: set TOPINC to best known system headers.  Optionally
	include fistdev.mk if it exists, allowing fistgen developers to
	override the value of TOPINC.

2001-10-04  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* main.c (wrapfs_read_super): avoid dereferencing NULL pointer if
	stopd() is NULL (b/c the mount command failed to include a "-o
	dir=" option).

	* print.c (fist_print_sb): sb->s_active and s_count only exist in
	2.4.8 and newer.

2001-10-01  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* main.c (wrapfs_read_super): bug fix: copy hidden superblock
	s_blocksize and s_blocksize_bits.  Now 2.2 kernels can execute
	binaries greater than one page.  (Yes, it's entirely non-obvious
	what the fix has to do with the bug, yet 2 man days were wasted on
	this bug.)

	* print.c: set default debug level to 18 (max) so we can see a few
	debugging messages before fist_ioctl has a chance to reset the
	debugging level.

	* main.c (wrapfs_read_super): print superblock and hidden
	superblock on exit.

	* print.c (fist_print_sb): new function

2001-09-29  Ion Badulescu  <lionut@gonzales.badula.org>

	* inode.c (wrapfs_rmdir): no need to set i_nlink to 0 here, it is
	done (properly) in wrapfs_put_inode()

2001-09-29  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* inode.c (wrapfs_unlink): no need to special-case if err==ENOENT,
	because we're now handling negative dentries correctly
	(wrapfs_rmdir): ditto

	* super.c (wrapfs_put_inode): ->put_inode() becomes a mandatory
	op, because of NFS (which doesn't really unlink files, but renames
	them to .nfsXXX).  If our inode->i_count is 1, we force ->i_nlink
	to 0, to ensure that iput() will drop our reference to the hidden
	inode upon freeing us.

2001-09-29  Ion Badulescu  <lionut@gonzales.badula.org>

	* wrapfs.h (fist_copy_attr_all): copy i_rdev between hidden_inode
	and our inode

2001-09-29  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* print.c (fist_print_page_flags): PageSwapCache() needs a kernel
	symbol on 2.4.10 that isn't exported.

2001-09-29  Ion Badulescu  <lionut@gonzales.badula.org>

	Fixes to make "cat ." (or any other directory) fail:

	* super.c (wrapfs_read_inode): use wrapfs_main_iops and
	wrapfs_main_fops

	* main.c (wrapfs_interpose): change i_fops to wrapfs_dir_fops for
	directories
	(__wrapfs_hidden_dentry): use wrapfs_main_iops and
	wrapfs_main_fops

	* inode.c (wrapfs_symlink_iops): renamed from wrapfs_iops_symlink
	(wrapfs_main_iops): renamed from wrapfs_iops

	* file.c (wrapfs_read, wrapfs_write): remove ifdef's around them,
	they are used for directories; fixed some comments in
	wrapfs_write;
	(wrapfs_dir_fops): new file_operations structure for directories
	(wrapfs_main_fops): renamed from wrapfs_fops

2001-09-29  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* print.c (fist_print_buffer_flags): buffer_protected() doesn't
	exist in 2.4.10 (big VM changes)

2001-09-29  Ion Badulescu  <lionut@gonzales.badula.org>

	* inode.c (wrapfs_permission): use vfs_permission() instead of our
	own concocted subset of it

2001-09-29  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* fist_ioctl.c: include string.h

	* dentry.c (wrapfs_d_delete): add parentheses around assignment
	inside a condition, plus a printf

2001-09-29  Ion Badulescu  <lionut@gonzales.badula.org>

	Changes that eliminate the need for a kernel patch:

	* file.c (wrapfs_open): massage flags to include read access to
	the hidden file, if we are filtering data; call dentry_open() with
	only two args

	* aux.c (wrapfs_idx_open): call dentry_open() with only two args;
	remove one of the function's own arguments as well

	* inode.c (wrapfs_truncate_and_enlarge): ditto; also call
	wrapfs_idx_open() with only two args, due to the dentry_open()
	change

	* mmap.c: copied sync_page() from mm/filemap.c, because it's not
	an exported function

	* main.c (wrapfs_read_super): initialize sb->s_maxbytes for both
	2.4.[23], to catch the RH 2.4.2-2 kernel (which is really a
	2.4.3-pre kernel and thus needs that change)

2001-09-29  Ion Badulescu  <lionut@gonzales.badula.org>

	* dentry.c (wrapfs_d_delete): a dentry could have no private data,
	don't dereference blindly

	* inode.c (wrapfs_lookup): added a comment about "weird" dentries
	(without either d_inode or private data)

	* Makefile (TOPINC): use /lib/modules/<uname -r>/build/include

	* ALL: minor updates to support kernels up to 2.4.9

2001-03-22  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* main.c (wrapfs_read_super): Linux 2.4.2-ac3 and beyond has code
	 in mm/filemap.c:generic_file_write() that requires sb->s_maxbytes
	 to be populated.  If not set, all write()s under that sb will
	 return 0.  Patch from Paul Walmsley <shag@booyaka.com>.
	 (wrapfs_read_super): for now, set s_maxbytes to MAX_NON_LFS, b/c
	 we don't yet support file systems with files larger than 2GB.

2000-05-24  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* inode.c (wrapfs_unlink): call d_delete() because dput() does
	that too.
	(wrapfs_rmdir): call d_delete() because dput() does
	that too.
	(wrapfs_truncate_and_enlarge): call mntget() before dentry_open()
	because it will decrement the mnt's refcount if error, and fput()
	will do an mntput() for us upon file close.

	* file.c (wrapfs_open): call mntget() before dentry_open() because
	it will decrement the mnt's refcount if error, and fput() will do
	an mntput() for us upon file close.

	* dentry.c (wrapfs_d_delete): fully implement d_delete, and have
	it call the lower file system's ->d_delete method if the latter
	has one.  This is needed since 2.3.99-pre9 changed dput() and now
	have dput() call d_delete() and ->d_drop.

	* aux.c (wrapfs_idx_open): call mntget() before dentry_open()
	because it will decrement the mnt's refcount if error, and fput()
	will do an mntput() for us upon file close.
	(wrapfs_idx_set_entry): bug fix.  move holes support code outside
	the previous "if" statement, which had nothing to do holes.

2000-05-16  Erez Zadok  <ezk@earth.cs.columbia.edu>

	* inode.c (wrapfs_truncate_and_enlarge): call mntget since we've
	called dentry_open().

	* aux.c (wrapfs_idx_open): call mntget since we've called
	dentry_open().

	* file.c (wrapfs_open): use ftohf() not file->private_data.
	(wrapfs_open): call mntget(hidden_file->f_vfsmnt) else we BUG() in
	wrapfs_release() when it calls fput(hidden_file).

	* mmap.c: All calls to ->readpage, ->writepage, wrapfs_get1page,
	and read_cache_page changed to pass file instead of dentry.

	* inode.c (wrapfs_truncate_and_enlarge): use fake a struct file so
	we can pass it to wrapfs_get1page (which absolutely needs it).  An
	ugly hack because notify_change doesn't take a struct file and it
	isn't that easy to make it do so.

	* aux.c (wrapfs_get1page): now takes a file, not dentry.  All
	calls to ->readpage and read_cache_page changed to pass file
	instead of dentry.

2000-05-16  Erez Zadok  <ezk@beetle.mcl.cs.columbia.edu>

	* mmap.c (wrapfs_writepage): ->writepage doesn't take struct
	dentry any more (2.3.99-pre7).

	* main.c (wrapfs_parse_options): walk_init renamed to path_init in
	2.3.99-pre7.
	(wrapfs_parse_options): walk_name renamed to path_walk.

2000-05-10  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* Makefile: define TOPINC for special -I flags, to avoid bad
	header inclusions with just a -I<null> option.

2000-05-01  Erez Zadok  <ezk@beetle.mcl.cs.columbia.edu>

	* sca_aux.c, sca_aux.h, sca_list_idx.c, sca_mk_idx.c, sca_read.c,
	sca_write.c: SCA support user-level files to print an index file,
	recover it, decode a file, and encode a file.  These files are
	generated only if SCA code is on.

	* aux.c (wrapfs_{read,write}_file): filp_open doesn't need 4th
	arg.

2000-04-30  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* mmap.c (wrapfs_sync_page): define new method sync_page.

2000-04-30  Erez Zadok  <ezk@beetle.mcl.cs.columbia.edu>

	* mmap.c (wrapfs_writepage): now takes an extra argument, struct
	file (2.3.99-pre6).  Let's hope that it can never be NULL.

2000-04-24  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* inode.c (wrapfs_rmdir): handle cases where the file/dir is
	removed through the hidden fs

2000-04-24  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	Updated to 2.3.99-pre6-pre5:

	* wrapfs.h: added hidden_mnt to struct wrapfs_sb_info

	* super.c (wrapfs_put_super): mntput() the hidden_mnt; #ifdef
	FIST_DEBUG the delete_inode() method, as it's not needed anymore

	* main.c (wrapfs_interpose): use wrapfs_iops_symlink if the inode
	is a symlink
	(wrapfs_parse_options): determine and store hidden_mnt

	* inode.c (wrapfs_readlink): return -EINVAL instead of -EPERM if
	the hidden inode doesn't support readlink
	(wrapfs_follow_link): changed return type, use vfs_follow_link
	(wrapfs_iops_symlink): new inode_operations structure, used only
	for symlinks

	* aux.c (wrapfs_idx_open), file.c (wrapfs_open): pass hidden_mnt
	to dentry_open

	* aux.c (fist_lookup, wrapfs_idx_lookup), inode.c (wrapfs_lookup):
	use lookup_one instead of lookup_dentry

2000-04-23  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* Changed index handling routines to allocate memory as
	whole pages

2000-04-23  Erez Zadok  <ezk@earth.cs.columbia.edu>

	* doit.sh (PATH): don't force insmod with '-f' to insert the
	module.  Too dangerous.

	* make all kfree() use kfree_s() as much as possible (presumably
	kfree_s is faster).

	* rename functions that may conflict with similar other modules to
	wrapfs_*.

	* Makefile-4-kernel: new file, a file systems specific Linux
	kernel makefile you can drop into a Linux kernel source tree.

	* *.c: include local headers with "foo.h" quotes not <foo.h>

	* wrapfs.h: simple optional code to count number of writes and
	number of writes in the middle.

2000-04-22  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* inode.c (wrapfs_unlink): fixes for cases when files get removed
	from under us

2000-04-18  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* file.c (wrapfs_ioctl): return 0 or 1 for fast-tail flag.

2000-04-18  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* fast tails work, other bugs fixed

2000-04-16  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* mmap.c: added initial untested support for fast tails, probably
	broke everything else in the process :-); added kmap/kunmap calls
	where necessary

	* aux.c (wrapfs_idx_read/write): read flags from the disk, write
	them back; remove modified flag, integrate with the other flags

2000-04-15  Erez Zadok  <ezk@vir.cs.columbia.edu>

	* fist_ioctl.c (main): -d option now must be used for set/get
	debugging value.  new -f option can be used to set/get the global
	fast-tail flag.

2000-04-15  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* inode.c (wrapfs_rmdir, wrapfs_unlink): fixed it so that deleting
	an open file works correctly
	(wrapfs_permission): check for read-only filesystem

2000-04-14  Johan M. Andersen  <johan@beetle.mcl.cs.columbia.edu>

	* aux.c: remove wrapfs_encode_buffer and wrapfs_decode_buffer,
	they are algorithm specific.

2000-04-14  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* vm_area.c: ifdef'ed out the entire code

	* inode.c (wrapfs_unlink): don't complain if symlinks don't have
	index files
	(wrapfs_readlink): removed bogus dprint() which could result in a
	bad page fault since the strings wasn't null-terminated;
	removed old versions of truncate and enlarge; moved get1page to aux.c

	* file.c (wrapfs_mmap): ifdef'ed out, not needed

	* aux.c (get1page): moved here from mmap.c; made idx_* calls
	non-static as they are called from other files

	* Makefile (O_OBJS): removed vm_area.o

2000-04-13  Johan M. Andersen  <johan@vir.cs.columbia.edu>

	* inode.c (wrapfs_rename): Move the index file as well as the
	target file.
	(wrapfs_link): Link the index file as well as the target file

2000-04-13  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* mmap.c (wrapfs_commit_write): fixed calls to shift_*; fixed size
	of hidden_inode after shifting

	* inode.c (wrapfs_unlink): fixed the logic in unlink, it's still
	wrong and ocassionally screws up but it's better than before

	* file.c (wrapfs_filldir): commented out a fist_dprint call, it
	can go wild on strings that are not zero-terminated

	* aux.c (wrapfs_sca_set_entry): fixed hole support, moved sanity
	check down so it won't complain needlessly

2000-04-08  Erez Zadok  <ezk@earth.cs.columbia.edu>

	* basic writing of file and index table works for one page only,
	the first page.

2000-04-08  Erez Zadok  <ezk@vir.cs.columbia.edu>

	* mmap.c (wrapfs_readpage): call readpage() again if we returned
	from wait_on_page with a page that's not up-to-date; that can
	happen when a partial page has a few buffers which are ok, but not
	the whole page.

2000-04-07  Johan M. Andersen  <johan@vir.cs.columbia.edu>

	* wrapfs.h (HIDDEN_PAGE_STARTING_OFFSET): Add macros for hidden
	page info (length and start offset)

2000-04-06  Erez Zadok  <ezk@vir.cs.columbia.edu>

	* print.c (fist_print_scafs_header): new routine to print contents
	of an SCA header.

	* convert scafs_hdr part of the private inode data to be a real
	structure, not a malloc'ed one, since we always need to allocate
	it anyway.

2000-04-06  Johan M. Andersen  <johan@vir.cs.columbia.edu>

	* aux.c (wrapfs_sca_read_idx): Add sanity checks to ensure the
	index file isn't corrupted.
	* main.c (wrapfs_interpose): move igrab before index-file read so
	we can reference underlying file in read_idx
	(wrapfs_interpose): Fix to out_iput by Ion to iput the hidden
	inode and un-interpose the upper-level inode for non-existing files.

2000-04-06  Erez Zadok  <ezk@vir.cs.columbia.edu>

	* aux.c (krealloc): an in-kernel realloc routine.
	(wrapfs_sca_add_entry): routine to add one more "entry" into an
	existing in-memory Index Table (IT) header structure.

2000-04-06  Johan M. Andersen  <johan@vir.cs.columbia.edu>

	* aux.c (wrapfs_decode_buffers): Fix CVS Breakage, comment
	(wrapfs_decode_buffers): Make zlib usage match usage in
	wrapfs_encode_buffers

	* aux.c (wrapfs_encode_buffers): Fill out and comment

2000-04-06  Erez Zadok  <ezk@vir.cs.columbia.edu>

	* main.c (wrapfs_interpose): put back old code; assertion that
	hidden dentry may be NULL isn't always true.
	(wrapfs_interpose): when new files are created, the parent hidden
	inode is locked, and we cannot and shouldn't call sca_read_idx,
	because it will do a lookup in the same directory and will
	deadlock.

2000-04-05  Johan M. Andersen  <johan@vir.cs.columbia.edu>

	* aux.c (wrapfs_decode_buffers): Move check for full buffers to
	after the call to inflate. This allows zlib to finish its
	checksums/etc even though it reports no space left in the output
	buffer.

2000-04-05  Erez Zadok  <ezk@vir.cs.columbia.edu>

	* inode.c (wrapfs_unlink): remove .idx file before removing main
	file.

	* wrapfs.h (INDEX_EXTENSION): define INDEX_EXTENSION here

	* aux.c (wrapfs_sca_read_idx): if index file does not exist,
	return ENOENT on looking up main file.

2000-04-04  Erez Zadok  <ezk@whitestar.cs.columbia.edu>

	* file.c (wrapfs_filldir): skip listing .idx files.

2000-04-03  Ion Badulescu  <ib42@moisil.cs.columbia.edu>

	* wrapfs.h (CURRENT_HIDDEN_PAGEINDEX): fixed silly error which was
	corrupting data when crossing lower page boundary

	* mmap.c (wrapfs_readpage): return errors from decode_buffers()

	* main.c (wrapfs_interpose): reorganized, avoid leaking
	inodes/dentries on error conditions

	* aux.c (wrapfs_sca_read_idx): dput the idx_dentry if the index
	files doesn't exist
	(wrapfs_decode_buffers): debugging, return consistent error codes

	* fist.h (print_exit_pointer): new debugging macro

	* wrapfs.h: changed type of scafs_header.read_size from loff_t to
	off_t (64 to 32 bits). Note that this will still break on a
	big-endian platform.
	(copy_inode_size): fixed calculation of i_blocks

	* mmap.c (wrapfs_readpage): sanity check: exit if there are no
	pages needed

2000-04-02  Ion Badulescu  <ib42@moisil.cs.columbia.edu>

	* mmap.c (wrapfs_readpage): reinit CURRENT_HIDDEN_PAGE to NULL if error

	* aux.c (wrapfs_sca_read_idx): changed index table algorithm
	(wrapfs_count_hidden_pages): implemented
	(wrapfs_decode_buffers): implemented, currently buggy
	[all the above is Johan's work]

	* wrapfs.h (copy_inode_size): compute the different file size and
	blocks in case of SCA filesystems

	* main.c, super.c: don't call iget() in read_inode(), instead do the
	interposition where it should be done: in interpose, by calling igrab()
	(wrapfs_interpose): read index file if SCA filesystem

	* mmap.c (wrapfs_readpage): added incipient support for SCA

2000-04-02  Johan M. Andersen  <johan@vir.cs.columbia.edu>

	* aux.c (wrapfs_sca_read_idx) reads an index-file into memory

2000-04-01  Erez Zadok  <ezk@earth.cs.columbia.edu>

	* aux.c (wrapfs_write_file,wrapfs_read_file): fixed "aclfs" typo.

2000-04-01  Erez Zadok  <ezk@beetle.mcl.cs.columbia.edu>

	* aux.c: placeholder for SCA/gzipfs code

	* Makefile (${O_OBJS}): depend on optional included headers

2000-04-01  Erez Zadok  <ezk@earth.cs.columbia.edu>

	* inode.c (wrapfs_mkdir,wrapfs_mknod): eliminate unused label
	(wrapfs_symlink): don't need hidden_symname

2000-03-26  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* inode.c (wrapfs_setattr): unconditionally copy attributes from
	lower inode
	moved debugging code around

	* fist.h: removed declaration of fist_mod_dec_use_count()

	* file.c: moved debugging code around

	* Makefile: removed comment

2000-03-25  Ion Badulescu  <ib42@beetle.mcl.cs.columbia.edu>

	* debug code rearranged, some deleted

2000-03-25  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* mmap.c (wrapfs_commit_write): unlock our page (and don't hang)
	if the lower file system is full.
	(wrapfs_commit_write): propagate errors correctly (so we handle a
	full file system etc.)

2000-03-24  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* mmap.c (wrapfs_prepare_write): added struct file pointer to this
	function, to be in stnc with commit_write.  Change in 2.3.99-pre3.

2000-03-20  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* major updates for 2.3.99-pre1, but there are still bugs.

2000-03-18  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* main.c (wrapfs_read_super): no need to un/lock our superblock,
	and no need to mainain module count increment/decrement.
	New module un/loading style.

	* super.c (wrapfs_statfs): call vfs_statfs. no need to pass
	bufsize to us or vfs_statfs.

2000-03-09  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* make sure the number of links, and inode/block count of the f/s
	are kept in sync w/ the lower f/s, and they are updated upon
	unlink, rmdir, rename, mkdir, etc.

2000-03-06  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* updates for 2.3.49.
